aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2014-05-23 01:14:13 +0200
committerDouwe Maan <douwe@selenight.nl>2014-05-23 03:27:21 +0200
commit0f8dc7e69cb602ebc2e7428dd4e3d815fdea60de (patch)
tree8411128ee93f36fd599932141bcc42950aeb32e6
parent53948bf3a3628a96d5608653618d3770e5acc23b (diff)
downloadrails-0f8dc7e69cb602ebc2e7428dd4e3d815fdea60de.tar.gz
rails-0f8dc7e69cb602ebc2e7428dd4e3d815fdea60de.tar.bz2
rails-0f8dc7e69cb602ebc2e7428dd4e3d815fdea60de.zip
Don't swallow unhandled exceptions.
-rw-r--r--lib/active_job/execution.rb2
-rw-r--r--test/cases/rescue_test.rb9
-rw-r--r--test/jobs/rescue_job.rb13
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