diff --git a/src/JobPipeline.php b/src/JobPipeline.php index 5559b89..72235ff 100644 --- a/src/JobPipeline.php +++ b/src/JobPipeline.php @@ -57,7 +57,11 @@ class JobPipeline implements ShouldQueue public function handle(): void { foreach ($this->jobs as $job) { - $result = app()->call([new $job(...$this->passable), 'handle']); + if (is_string($job)) { + $job = [new $job(...$this->passable), 'handle']; + } + + $result = app()->call($job); if ($result === false) { break; diff --git a/tests/JobPipelineTest.php b/tests/JobPipelineTest.php index abbbee6..0327660 100644 --- a/tests/JobPipelineTest.php +++ b/tests/JobPipelineTest.php @@ -133,6 +133,24 @@ class JobPipelineTest extends TestCase // Foo job is not excuted $this->assertFalse($this->valuestore->has('foo')); } + + /** @test */ + public function closures_can_be_used_as_jobs() + { + $passes = false; + + Event::listen(TestEvent::class, JobPipeline::make([ + function (TestModel $model) use (&$passes) { + $passes = $model instanceof TestModel; + } + ])->send(function (TestEvent $event) { + return $event->testModel; + })->toListener()); + + event(new TestEvent(new TestModel())); + + $this->assertTrue($passes); + } } class FooJob diff --git a/tests/tmp/jobpipelinetest.json b/tests/tmp/jobpipelinetest.json deleted file mode 100644 index 9ae3f94..0000000 --- a/tests/tmp/jobpipelinetest.json +++ /dev/null @@ -1 +0,0 @@ -{"false_job_executed":true} \ No newline at end of file