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