diff options
author | David Heinemeier Hansson <david@basecamp.com> | 2014-05-23 08:24:13 +0200 |
---|---|---|
committer | David Heinemeier Hansson <david@basecamp.com> | 2014-05-23 08:24:13 +0200 |
commit | 02202e6a446fe93459a4bf5ef747e0f69466819f (patch) | |
tree | 8411128ee93f36fd599932141bcc42950aeb32e6 | |
parent | 53948bf3a3628a96d5608653618d3770e5acc23b (diff) | |
parent | 0f8dc7e69cb602ebc2e7428dd4e3d815fdea60de (diff) | |
download | rails-02202e6a446fe93459a4bf5ef747e0f69466819f.tar.gz rails-02202e6a446fe93459a4bf5ef747e0f69466819f.tar.bz2 rails-02202e6a446fe93459a4bf5ef747e0f69466819f.zip |
Merge pull request #62 from DouweM/patch-3
Don't swallow unhandled exceptions.
-rw-r--r-- | lib/active_job/execution.rb | 2 | ||||
-rw-r--r-- | test/cases/rescue_test.rb | 9 | ||||
-rw-r--r-- | test/jobs/rescue_job.rb | 13 |
3 files changed, 18 insertions, 6 deletions
diff --git a/lib/active_job/execution.rb b/lib/active_job/execution.rb index 563e42ff89..d21fd32292 100644 --- a/lib/active_job/execution.rb +++ b/lib/active_job/execution.rb @@ -16,7 +16,7 @@ module ActiveJob perform *arguments end rescue => exception - rescue_with_handler(exception) + rescue_with_handler(exception) || raise(exception) end def perform(*) diff --git a/test/cases/rescue_test.rb b/test/cases/rescue_test.rb index a91ed01f45..aea8b036d4 100644 --- a/test/cases/rescue_test.rb +++ b/test/cases/rescue_test.rb @@ -11,6 +11,13 @@ class RescueTest < ActiveSupport::TestCase test 'rescue perform exception with retry' do job = RescueJob.new job.execute("david") - assert_equal [ "rescued from StandardError", "performed beautifully" ], $BUFFER + assert_equal [ "rescued from ArgumentError", "performed beautifully" ], $BUFFER + end + + test 'let through unhandled perform exception' do + job = RescueJob.new + assert_raises(RescueJob::OtherError) do + job.execute("other") + end end end diff --git a/test/jobs/rescue_job.rb b/test/jobs/rescue_job.rb index 66b28d768e..acf2b81515 100644 --- a/test/jobs/rescue_job.rb +++ b/test/jobs/rescue_job.rb @@ -1,13 +1,18 @@ class RescueJob < ActiveJob::Base - rescue_from(StandardError) do - $BUFFER << "rescued from StandardError" + class OtherError < StandardError; end + + rescue_from(ArgumentError) do + $BUFFER << "rescued from ArgumentError" arguments[0] = "DIFFERENT!" retry_now end def perform(person = "david") - if person == "david" - raise "Hair too good" + case person + when "david" + raise ArgumentError, "Hair too good" + when "other" + raise OtherError else $BUFFER << "performed beautifully" end |