aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/rescue.rb
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-09-21 14:57:24 -0300
committerEmilio Tagua <miloops@gmail.com>2009-09-21 14:57:24 -0300
commita294d8362bfb62b7133ad0799ae1327cd5ddd1e4 (patch)
tree477930041d5c42f2453178ab110c8455c6d702fe /actionpack/lib/action_dispatch/middleware/rescue.rb
parent378b02d3aa890cedabf1ef81c34a371dbbc52c25 (diff)
parente2d0b0ee61c5a8c2626abb5ac1029b48ec1965eb (diff)
downloadrails-a294d8362bfb62b7133ad0799ae1327cd5ddd1e4.tar.gz
rails-a294d8362bfb62b7133ad0799ae1327cd5ddd1e4.tar.bz2
rails-a294d8362bfb62b7133ad0799ae1327cd5ddd1e4.zip
Merge commit 'rails/master'
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/rescue.rb')
-rw-r--r--actionpack/lib/action_dispatch/middleware/rescue.rb20
1 files changed, 16 insertions, 4 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/rescue.rb b/actionpack/lib/action_dispatch/middleware/rescue.rb
index 1456825526..aee672112c 100644
--- a/actionpack/lib/action_dispatch/middleware/rescue.rb
+++ b/actionpack/lib/action_dispatch/middleware/rescue.rb
@@ -1,14 +1,26 @@
module ActionDispatch
class Rescue
- def initialize(app, rescuer)
- @app, @rescuer = app, rescuer
+ def initialize(app, rescuers = {}, &block)
+ @app, @rescuers = app, {}
+ rescuers.each { |exception, rescuer| rescue_from(exception, rescuer) }
+ instance_eval(&block) if block_given?
end
def call(env)
@app.call(env)
rescue Exception => exception
- env['action_dispatch.rescue.exception'] = exception
- @rescuer.call(env)
+ if rescuer = @rescuers[exception.class.name]
+ env['action_dispatch.rescue.exception'] = exception
+ rescuer.call(env)
+ else
+ raise exception
+ end
end
+
+ protected
+ def rescue_from(exception, rescuer)
+ exception = exception.class.name if exception.is_a?(Exception)
+ @rescuers[exception.to_s] = rescuer
+ end
end
end