1
0
Fork 0
mirror of https://github.com/archtechx/jobpipeline.git synced 2025-12-14 10:44:04 +00:00

Merge pull request #9 from hackerESQ/patch-1

adds error catching to handle method
This commit is contained in:
Samuel Štancl 2022-03-20 21:53:38 +01:00 committed by GitHub
commit cd2c5c39ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 1 deletions

View file

@ -6,6 +6,8 @@ namespace Stancl\JobPipeline;
use Closure;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
use Throwable;
class JobPipeline implements ShouldQueue
{
@ -63,7 +65,17 @@ class JobPipeline implements ShouldQueue
$job = [new $job(...$this->passable), 'handle'];
}
$result = app()->call($job);
try {
$result = app()->call($job);
} catch (Throwable $exception) {
if (method_exists(get_class($job[0]), 'failed')) {
call_user_func_array([$job[0], 'failed'], [$exception]);
} else {
Log::error($exception);
}
break;
}
if ($result === false) {
break;

View file

@ -134,6 +134,22 @@ class JobPipelineTest extends TestCase
$this->assertFalse($this->valuestore->has('foo'));
}
/** @test */
public function the_pipeline_can_execute_failed_method_on_job()
{
Event::listen(TestEvent::class, JobPipeline::make([
ExceptionJob::class,
])->send(function () {
return $this->valuestore;
})->toListener());
event(new TestEvent(new TestModel()));
sleep(1);
$this->assertEquals($this->valuestore->get('exeception'), 'pipeline exception');
}
/** @test */
public function closures_can_be_used_as_jobs()
{
@ -251,3 +267,23 @@ class FalseJob
return false;
}
}
class ExceptionJob
{
protected $valuestore;
public function __construct(Valuestore $valuestore)
{
$this->valuestore = $valuestore;
}
public function handle()
{
throw new \Exception('pipeline exception', 1);
}
public function failed(\Throwable $e)
{
$this->valuestore->put('exeception', $e->getMessage());
}
}