Module: HatiJsonapiError::Helpers
- Defined in:
- lib/hati_jsonapi_error/helpers.rb
Overview
This module contains helper methods for rendering errors in a JSON API format.
Defined Under Namespace
Classes: ApiErr
Constant Summary collapse
- HatiErrs =
HatiJsonapiError::Errors
Instance Method Summary collapse
-
#handle_error(error, with_original: false) ⇒ Object
with_original: oneOf: [false, true, :full_trace].
- #render_error(error, status: nil, short: false) ⇒ Object
Instance Method Details
#handle_error(error, with_original: false) ⇒ Object
with_original: oneOf: [false, true, :full_trace]
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/hati_jsonapi_error/helpers.rb', line 31 def handle_error(error, with_original: false) error_class = error if error.class <= HatiJsonapiError::BaseError error_class ||= HatiJsonapiError::Registry.lookup_error(error) unless error_class msg = 'Used handle_error but no mapping of default error set' raise HatiErrs::HelpersHandleError, msg end # Fix: if error_class is already an instance, use it directly, otherwise create new instance api_err = error_class.is_a?(Class) ? error_class.new : error_class if with_original api_err. = { original_error: error.class, trace: error.backtrace[0], message: error. } api_err..merge!(backtrace: error.backtrace.join("\n")) if with_original == :full_trace end render_error(api_err) end |
#render_error(error, status: nil, short: false) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/hati_jsonapi_error/helpers.rb', line 12 def render_error(error, status: nil, short: false) error_instance = error.is_a?(Class) ? error.new : error unless error_instance.class <= HatiJsonapiError::BaseError msg = "Supported only explicit type of HatiJsonapiError::BaseError, got: #{error_instance.class.name}" raise HatiErrs::HelpersRenderError, msg end resolver = HatiJsonapiError::Resolver.new(error_instance) unless defined?(render) msg = 'Render not defined' raise HatiErrs::HelpersRenderError, msg end render json: resolver.to_json(short: short), status: status || resolver.status end |