module HalApi::Controller::Exceptions
Since we are taking over exception handling, make sure we log exceptions github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
Public Instance Methods
log_error(env, wrapper)
click to toggle source
# File lib/hal_api/controller/exceptions.rb, line 35 def log_error(env, wrapper) logger = env['action_dispatch.logger'] || self.logger || ActiveSupport::Logger.new($stderr) return unless logger exception = wrapper.exception trace = wrapper.application_trace trace = wrapper.framework_trace if trace.empty? 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 << " " << trace.join("\n ") logger.fatal("#{message}\n\n") end end
notice_error(error)
click to toggle source
# File lib/hal_api/controller/exceptions.rb, line 52 def notice_error(error) if defined?(::NewRelic::Agent) && ::NewRelic::Agent.respond_to?(:notice_error) ::NewRelic::Agent.notice_error(error) end end
respond_with_error(exception)
click to toggle source
# File lib/hal_api/controller/exceptions.rb, line 9 def respond_with_error(exception) wrapper = if HalApi.rails_major_version >= 5 ::ActionDispatch::ExceptionWrapper.new(ActiveSupport::BacktraceCleaner.new, exception) else ::ActionDispatch::ExceptionWrapper.new(request.env, exception) end log_error(request.env, wrapper) error = exception if !error.is_a?(HalApi::Errors::ApiError) error = HalApi::Errors::ApiError.new(error.message).tap do |e| e.set_backtrace(error.backtrace) end end notice_error(exception) if error.status >= 500 respond_with( error, status: error.status, location: nil, # for POST requests represent_with: HalApi::Errors::Representer ) end