From 50d0d808ededd0a13eaf4f59dd2a6ed1e70d34b1 Mon Sep 17 00:00:00 2001 From: Mark Bates Date: Mon, 14 Jun 2010 23:53:05 +0800 Subject: [PATCH] Broke callbacks out into before, after, success, and failure. --- lib/delayed/backend/base.rb | 6 ++++-- spec/backend/shared_backend_spec.rb | 22 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/delayed/backend/base.rb b/lib/delayed/backend/base.rb index c3500c299..0ff905a32 100644 --- a/lib/delayed/backend/base.rb +++ b/lib/delayed/backend/base.rb @@ -65,10 +65,12 @@ def invoke_job payload_object.before(self) if payload_object.respond_to?(:before) begin payload_object.perform - payload_object.after(self) if payload_object.respond_to?(:after) + payload_object.success(self) if payload_object.respond_to?(:success) rescue Exception => e - payload_object.after(self, e) if payload_object.respond_to?(:after) + payload_object.failure(self, e) if payload_object.respond_to?(:failure) raise e + ensure + payload_object.after(self) if payload_object.respond_to?(:after) end end diff --git a/spec/backend/shared_backend_spec.rb b/spec/backend/shared_backend_spec.rb index 5d7b02de3..16e0c7d53 100644 --- a/spec/backend/shared_backend_spec.rb +++ b/spec/backend/shared_backend_spec.rb @@ -17,6 +17,14 @@ def after(job, error = nil) SuccessfulCallbackJob.messages << 'after perform' end + def success(job) + SuccessfulCallbackJob.messages << 'success!' + end + + def failure(job, error) + SuccessfulCallbackJob.messages << 'oops!' + end + class << self attr_accessor :messages end @@ -31,7 +39,15 @@ def perform 1 / nil end - def after(job, error = nil) + def after(job) + FailureCallbackJob.messages << "after perform" + end + + def success(job) + FailureCallbackJob.messages << 'success!' + end + + def failure(job, error) FailureCallbackJob.messages << "error during peform: #{error.message}" end @@ -102,13 +118,13 @@ def create_job(opts = {}) it "should call before and after callbacks" do job = @backend.enqueue(SuccessfulCallbackJob.new) job.invoke_job - SuccessfulCallbackJob.messages.should == ['before perform', 'perform', 'after perform'] + SuccessfulCallbackJob.messages.should == ["before perform", "perform", "success!", "after perform"] end it "should call the after callback with an error" do job = @backend.enqueue(FailureCallbackJob.new) lambda {job.invoke_job}.should raise_error(TypeError) - FailureCallbackJob.messages.should == ["before perform", "error during peform: nil can't be coerced into Fixnum"] + FailureCallbackJob.messages.should == ["before perform", "error during peform: nil can't be coerced into Fixnum", "after perform"] end end