Module: Grape::ErrorFormatter::Base
- Defined in:
- lib/grape/error_formatter/base.rb
Constant Summary collapse
- FORMATTERS =
{ serializable_hash: Grape::ErrorFormatter::Json, json: Grape::ErrorFormatter::Json, jsonapi: Grape::ErrorFormatter::Json, txt: Grape::ErrorFormatter::Txt, xml: Grape::ErrorFormatter::Xml }
Class Method Summary collapse
- .formatter_for(api_format, options = {}) ⇒ Object
- .formatters(options) ⇒ Object
- .present(message, env) ⇒ Object
Class Method Details
.formatter_for(api_format, options = {}) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/grape/error_formatter/base.rb', line 17 def formatter_for(api_format, = {}) spec = formatters()[api_format] case spec when nil [:default_error_formatter] || Grape::ErrorFormatter::Txt when Symbol method(spec) else spec end end |
.formatters(options) ⇒ Object
13 14 15 |
# File 'lib/grape/error_formatter/base.rb', line 13 def formatters() FORMATTERS.merge([:error_formatters] || {}) end |
.present(message, env) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/grape/error_formatter/base.rb', line 32 def present(, env) = {} [:with] = .delete(:with) if .is_a?(Hash) presenter = env['api.endpoint'].entity_class_for_obj(, ) unless presenter || env['rack.routing_args'].nil? # env['api.endpoint'].route does not work when the error occurs within a middleware # the Endpoint does not have a valid env at this moment http_codes = env['rack.routing_args'][:route_info].route_http_codes || [] found_code = http_codes.find do |http_code| (http_code[0].to_i == env['api.endpoint'].status) && http_code[2].respond_to?(:represent) end presenter = found_code[2] if found_code end if presenter = { env: env } [:version] = env['api.version'] if env['api.version'] = presenter.represent(, ).serializable_hash end end |