Skip to content

Commit

Permalink
Broke callbacks out into before, after, success, and failure.
Browse files Browse the repository at this point in the history
  • Loading branch information
markbates authored and bkeepers committed Sep 4, 2010
1 parent d6710f5 commit 50d0d80
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
6 changes: 4 additions & 2 deletions lib/delayed/backend/base.rb
Expand Up @@ -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

Expand Down
22 changes: 19 additions & 3 deletions spec/backend/shared_backend_spec.rb
Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 50d0d80

Please sign in to comment.