class ApiValve::ErrorResponder

Public Class Methods

new(error) click to toggle source
# File lib/api_valve/error_responder.rb, line 3
def initialize(error)
  @error = error
end

Public Instance Methods

call() click to toggle source
# File lib/api_valve/error_responder.rb, line 7
def call
  [
    status,
    {'Content-Type' => 'application/vnd.api+json'},
    [MultiJson.dump({errors: [json_error]}, mode: :compat)]
  ]
end

Private Instance Methods

json_code() click to toggle source
# File lib/api_valve/error_responder.rb, line 34
def json_code
  @error.try(:code) || @error.class.name.demodulize.underscore
end
json_detail() click to toggle source
# File lib/api_valve/error_responder.rb, line 42
def json_detail
  return if json_title == @error.message
  return if @error.message == @error.class.name

  @error.message
end
json_error() click to toggle source
# File lib/api_valve/error_responder.rb, line 24
def json_error
  {
    status: status.to_s,
    code:   json_code,
    title:  json_title,
    detail: json_detail,
    meta:   json_meta
  }.compact
end
json_meta() click to toggle source
# File lib/api_valve/error_responder.rb, line 49
def json_meta
  (@error.try(:to_hash).presence || {}).merge(
    backtrace: ApiValve.expose_backtraces ? @error.backtrace : nil
  ).compact.presence
end
json_title() click to toggle source
# File lib/api_valve/error_responder.rb, line 38
def json_title
  @error.try(:title) || Rack::Utils::HTTP_STATUS_CODES[status]
end
status() click to toggle source
# File lib/api_valve/error_responder.rb, line 17
def status
  status = @error.try(:http_status)
  return status if status.is_a?(Integer)

  Rack::Utils::SYMBOL_TO_STATUS_CODE[status] || 500
end