diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index aa60439..4d139d4 100644 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -384,14 +384,17 @@ module ActionController #:nodoc: class << self def call(env) # HACK: For global rescue to have access to the original request and response - request = env["actioncontroller.rescue.request"] ||= Request.new(env) - response = env["actioncontroller.rescue.response"] ||= Response.new - process(request, response) + request = env["actioncontroller.rescue.request"] ||= Request.new(env) + response = env["actioncontroller.rescue.response"] ||= Response.new + method = env["actioncontroller.rescue.method"] || :perform_action + args = env["actioncontroller.rescue.args"] || [] + + process(request, response, method, *args) end # Factory for the standard create, process loop where the controller is discarded after processing. - def process(request, response) #:nodoc: - new.process(request, response) + def process(request, response, method = :perform_action, *args) #:nodoc: + new.process(request, response, method, *args) end # Converts the class name from something like "OneModule::TwoModule::NeatController" to "NeatController". diff --git a/actionpack/lib/action_controller/rescue.rb b/actionpack/lib/action_controller/rescue.rb index de35b53..290141b 100644 --- a/actionpack/lib/action_controller/rescue.rb +++ b/actionpack/lib/action_controller/rescue.rb @@ -60,9 +60,11 @@ module ActionController #:nodoc: module ClassMethods def call_with_exception(env, exception) #:nodoc: + env["actioncontroller.rescue.method"] = :rescue_action + env["actioncontroller.rescue.args"] = [exception] request = env["actioncontroller.rescue.request"] response = env["actioncontroller.rescue.response"] - new.process(request, response, :rescue_action, exception) + call(env) end end