Module: HalApi::Controller::Exceptions
- Extended by:
- ActiveSupport::Concern
- Included in:
- HalApi::Controller
- Defined in:
- lib/hal_api/controller/exceptions.rb
Overview
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
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #log_error(env, wrapper) ⇒ Object
- #notice_error(error) ⇒ Object
- #respond_with_error(exception) ⇒ Object
Instance Method Details
#log_error(env, wrapper) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/hal_api/controller/exceptions.rb', line 40 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? = "\n#{exception.class} (#{exception.}):\n" if exception.respond_to?(:annoted_source_code) ActiveSupport::Deprecation.silence do << exception.annoted_source_code.to_s end end << " " << trace.join("\n ") logger.fatal("#{}\n\n") end |
#notice_error(error) ⇒ Object
59 60 61 62 63 |
# File 'lib/hal_api/controller/exceptions.rb', line 59 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) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 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 error = if exception.is_a?(HalApi::Errors::ApiError) && exception.status >= 500 log_error(request.env, wrapper) notice_error(exception) exception elsif exception.is_a?(HalApi::Errors::ApiError) exception else log_error(request.env, wrapper) notice_error(exception) HalApi::Errors::ApiError.new(exception.).tap do |e| e.set_backtrace(exception.backtrace) end end respond_with( error, status: error.status, location: nil, # for POST requests represent_with: HalApi::Errors::Representer ) end |