class DebugExceptionsJson
Constants
- DEFAULT_BUILDER
- VERSION
Public Class Methods
new(app, response_builder = DEFAULT_BUILDER)
click to toggle source
app - A rack app response_builder - A Proc which builds response
response_builder takes 2 parameters:
exception - An exception object env - A Hash
# File lib/debug_exceptions_json.rb, line 28 def initialize(app, response_builder = DEFAULT_BUILDER) @app = app @response_builder = response_builder end
Public Instance Methods
call(env)
click to toggle source
# File lib/debug_exceptions_json.rb, line 33 def call(env) @app.call(env) rescue Exception => exception raise exception unless show_exception?(env) raise exception unless response_with_json?(env) log_error(exception, env) @response_builder.call(exception, env) end
Private Instance Methods
log_error(exception, env)
click to toggle source
# File lib/debug_exceptions_json.rb, line 53 def log_error(exception, env) logger = logger(env) return unless logger ActiveSupport::Deprecation.silence do message = "\n#{exception.class} (#{exception.message}):\n" message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) message << " " << exception.backtrace.join("\n ") logger.fatal("#{message}\n\n") end end
logger(env)
click to toggle source
# File lib/debug_exceptions_json.rb, line 65 def logger(env) env['action_dispatch.logger'] || stderr_logger end
response_with_json?(env)
click to toggle source
# File lib/debug_exceptions_json.rb, line 49 def response_with_json?(env) env['HTTP_ACCEPT'] =~ /application\/json/ end
show_exception?(env)
click to toggle source
# File lib/debug_exceptions_json.rb, line 45 def show_exception?(env) env['action_dispatch.show_exceptions'] && env['action_dispatch.show_detailed_exceptions'] end
stderr_logger()
click to toggle source
# File lib/debug_exceptions_json.rb, line 69 def stderr_logger @stderr_logger ||= ActiveSupport::Logger.new($stderr) end