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