class PactBroker::Api::Resources::ErrorResponseGenerator
Public Class Methods
call(error, error_reference, env, message: nil)
click to toggle source
@param error [StandardError] @param error_reference [String] an error reference to display to the user @param env [Hash] the rack env @return [Hash, String] the response headers to set, the response body to set
# File lib/pact_broker/api/resources/error_response_generator.rb, line 25 def self.call(error, error_reference, env, message: nil) body = response_body_hash(error, error_reference, env, display_message(error, message, obfuscated_error_message(error_reference))) return headers(env), body.to_json end
display_message(error, message, obfuscated_message)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 30 def self.display_message(error, message, obfuscated_message) if message message elsif PactBroker.configuration.show_backtrace_in_error_response? error.message || obfuscated_message else PactBroker::Errors.reportable_error?(error) ? obfuscated_message : error.message end end
error_decorator_class(env)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 81 def self.error_decorator_class(env) env["pactbroker.application_context"].decorator_configuration.class_for(:runtime_error_problem_json_decorator) end
hal_json_response_body(error, error_reference, message)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 48 def self.hal_json_response_body(error, error_reference, message) response_body = { error: { message: message, reference: error_reference } } if PactBroker.configuration.show_backtrace_in_error_response? response_body[:error][:backtrace] = error.backtrace end response_body end
headers(env)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 69 def self.headers(env) if problem_json?(env) { "Content-Type" => "application/problem+json;charset=utf-8" } else { "Content-Type" => "application/hal+json;charset=utf-8" } end end
obfuscated_error_message(error_reference)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 65 def self.obfuscated_error_message(error_reference) message("errors.runtime.with_error_reference", error_reference: error_reference) end
problem_json?(env)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 77 def self.problem_json?(env) env["HTTP_ACCEPT"]&.include?("application/problem+json") end
problem_json_response_body(message, env)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 61 def self.problem_json_response_body(message, env) error_decorator_class(env).new(message).to_hash(user_options: { base_url: env["pactbroker.base_url" ] }) end
response_body_hash(error, error_reference, env, message)
click to toggle source
# File lib/pact_broker/api/resources/error_response_generator.rb, line 40 def self.response_body_hash(error, error_reference, env, message) if problem_json?(env) problem_json_response_body(message, env) else hal_json_response_body(error, error_reference, message) end end