Class: PactBroker::Api::Resources::ErrorHandler
- Inherits:
-
Object
- Object
- PactBroker::Api::Resources::ErrorHandler
- Includes:
- Logging
- Defined in:
- lib/pact_broker/api/resources/error_handler.rb
Class Method Summary collapse
- .call(e, request, response) ⇒ Object
- .display_message(e, error_reference) ⇒ Object
- .generate_error_reference ⇒ Object
- .obfuscated_error_message(error_reference) ⇒ Object
- .report(e, error_reference, request) ⇒ Object
- .reportable?(e) ⇒ Boolean
- .response_body_hash(e, error_reference) ⇒ Object
Methods included from Logging
Class Method Details
.call(e, request, response) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 11 def self.call e, request, response error_reference = generate_error_reference if reportable?(e) log_error(e, "Error reference #{error_reference}") report(e, error_reference, request) else logger.info "Error reference #{error_reference} - #{e.class} #{e.}\n#{e.backtrace.join("\n")}" end response.body = response_body_hash(e, error_reference).to_json end |
.display_message(e, error_reference) ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 30 def self.(e, error_reference) if PactBroker.configuration.show_backtrace_in_error_response? e. || (error_reference) else reportable?(e) ? (error_reference) : e. end end |
.generate_error_reference ⇒ Object
22 23 24 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 22 def self.generate_error_reference SecureRandom.urlsafe_base64.gsub(/[^a-z]/i, '')[0,10] end |
.obfuscated_error_message(error_reference) ⇒ Object
38 39 40 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 38 def self. error_reference "An error has occurred. The details have been logged with the reference #{error_reference}" end |
.report(e, error_reference, request) ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 55 def self.report e, error_reference, request PactBroker.configuration.api_error_reporters.each do | error_notifier | begin error_notifier.call(e, env: request.env, error_reference: error_reference) rescue StandardError => e log_error(e, "Error executing api_error_reporter") end end end |
.reportable?(e) ⇒ Boolean
26 27 28 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 26 def self.reportable?(e) !e.is_a?(PactBroker::Error) && !e.is_a?(JSON::GeneratorError) end |
.response_body_hash(e, error_reference) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pact_broker/api/resources/error_handler.rb', line 42 def self.response_body_hash e, error_reference response_body = { error: { message: (e, error_reference), reference: error_reference } } if PactBroker.configuration.show_backtrace_in_error_response? response_body[:error][:backtrace] = e.backtrace end response_body end |