Class: Grape::ErrorFormatter::Base
- Inherits:
-
Object
- Object
- Grape::ErrorFormatter::Base
- Defined in:
- lib/grape/error_formatter/base.rb
Class Method Summary collapse
-
.call(error:, env: nil, include_backtrace: false, include_original_exception: false) ⇒ Object
Custom error formatters override
call. - .format_structured_message(_structured_message) ⇒ Object
- .present(message, env) ⇒ Object
- .wrap_message(message) ⇒ Object
Class Method Details
.call(error:, env: nil, include_backtrace: false, include_original_exception: false) ⇒ Object
Custom error formatters override call. The error is a frozen
Grape::Exceptions::ErrorResponse carrying +status+/+message+/
+headers+/+backtrace+/+original_exception+. env is the Rack env
(needed by entity-presenter resolution). include_backtrace and
include_original_exception are the request-time toggles set by
rescue_from; the base implementation embeds the corresponding
fields in the response body when they are true.
14 15 16 17 18 19 20 21 22 |
# File 'lib/grape/error_formatter/base.rb', line 14 def call(error:, env: nil, include_backtrace: false, include_original_exception: false) = (present(error., env)) if .is_a?(Hash) [:backtrace] = error.backtrace if include_backtrace && error.backtrace.present? [:original_exception] = error.original_exception.inspect if include_original_exception && error.original_exception end () end |
.format_structured_message(_structured_message) ⇒ Object
61 62 63 |
# File 'lib/grape/error_formatter/base.rb', line 61 def () raise NotImplementedError end |
.present(message, env) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/grape/error_formatter/base.rb', line 24 def present(, env) # error! accepts a message hash with an optional :with key specifying the entity presenter. # Extract it here so the presenter can be resolved and the key is not serialized in the response. # See spec/integration/grape_entity/entity_spec.rb for examples. with = nil payload = if .is_a?(Hash) && .key?(:with) payload = .dup with = payload.delete(:with) end presenter = with || env[Grape::Env::API_ENDPOINT].entity_class_for_obj(payload) unless presenter || env[Grape::Env::GRAPE_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[Grape::Env::GRAPE_ROUTING_ARGS][:route_info].http_codes || [] found_code = http_codes.find do |http_code| (http_code[0].to_i == env[Grape::Env::API_ENDPOINT].status) && http_code[2].respond_to?(:represent) end if env[Grape::Env::API_ENDPOINT].request presenter = found_code[2] if found_code end return payload unless presenter = { env: } [:version] = env[Grape::Env::API_VERSION] if env.key?(Grape::Env::API_VERSION) presenter.represent(payload, ).serializable_hash end |
.wrap_message(message) ⇒ Object
55 56 57 58 59 |
# File 'lib/grape/error_formatter/base.rb', line 55 def () return if .is_a?(Hash) { message: } end |