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