move show_detailed_exceptions? to Rescue module

This commit is contained in:
lest 2011-11-22 13:34:13 +03:00
parent c6d6b28bb4
commit 5bcd119b8d
4 changed files with 14 additions and 7 deletions

View File

@ -196,15 +196,10 @@ module ActionController
@_request = request
@_env = request.env
@_env['action_controller.instance'] = self
@_env['action_dispatch.show_detailed_exceptions'] = show_detailed_exceptions?
process(name)
to_a
end
def show_detailed_exceptions?
defined?(Rails.application) && Rails.application.config.consider_all_requests_local || request.local?
end
def to_a #:nodoc:
response ? response.to_a : [status, headers, response_body]
end

View File

@ -3,6 +3,11 @@ module ActionController #:nodoc:
extend ActiveSupport::Concern
include ActiveSupport::Rescuable
included do
config_accessor :consider_all_requests_local
self.consider_all_requests_local = false if consider_all_requests_local.nil?
end
def rescue_with_handler(exception)
if (exception.respond_to?(:original_exception) &&
(orig_exception = exception.original_exception) &&
@ -12,10 +17,15 @@ module ActionController #:nodoc:
super(exception)
end
def show_detailed_exceptions?
consider_all_requests_local || request.local?
end
private
def process_action(*args)
super
rescue Exception => exception
request.env['action_dispatch.show_detailed_exceptions'] = show_detailed_exceptions?
rescue_with_handler(exception) || raise(exception)
end
end

View File

@ -21,6 +21,8 @@ module ActionController
paths = app.config.paths
options = app.config.action_controller
options.consider_all_requests_local ||= app.config.consider_all_requests_local
options.assets_dir ||= paths["public"].first
options.javascripts_dir ||= paths["public/javascripts"].first
options.stylesheets_dir ||= paths["public/stylesheets"].first

View File

@ -1,7 +1,7 @@
require 'abstract_unit'
module ShowExceptions
class ShowExceptionsController < ActionController::Metal
class ShowExceptionsController < ActionController::Base
use ActionDispatch::ShowExceptions
def boom
@ -27,7 +27,7 @@ module ShowExceptions
end
test 'show diagnostics from a remote ip when consider_all_requests_local is true' do
Rails.stubs(:application).returns stub(:config => stub(:consider_all_requests_local => true))
ShowExceptionsController.any_instance.stubs(:consider_all_requests_local).returns(true)
@app = ShowExceptionsController.action(:boom)
self.remote_addr = '208.77.188.166'
get '/'