Class: Salestation::Web::ErrorMapper
- Inherits:
-
Object
- Object
- Salestation::Web::ErrorMapper
- Defined in:
- lib/salestation/web/error_mapper.rb
Constant Summary collapse
- UndefinedErrorClass =
Class.new(StandardError)
- ERROR_TO_RESPONSE_DEFAULTS =
{ App::Errors::InvalidInput => -> (error) { Responses::UnprocessableEntityFromSchemaErrors.create(**error) }, App::Errors::DependencyCurrentlyUnavailable => -> (error) { Responses::ServiceUnavailable.new( message: error., debug_message: "Please try again later", base_error: error.base_error ) }, App::Errors::RequestedResourceNotFound => -> (error) { Responses::NotFound.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::Forbidden => -> (error) { Responses::Forbidden.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::Conflict => -> (error) { Responses::Conflict.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::NotAcceptable => -> (error) { Responses::NotAcceptable.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::UnsupportedMediaType => -> (error) { Responses::UnsupportedMediaType.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::BadRequest => -> (error) { Responses::BadRequest.new(message: error., debug_message: error., base_error: error.base_error) }, App::Errors::RequestEntityTooLarge => -> (error) { Responses::RequestEntityTooLarge.new(message: error., debug_message: error., base_error: error.base_error) } }.freeze
Instance Method Summary collapse
-
#initialize(map = {}) ⇒ ErrorMapper
constructor
A new instance of ErrorMapper.
- #map ⇒ Object
Constructor Details
#initialize(map = {}) ⇒ ErrorMapper
Returns a new instance of ErrorMapper.
42 43 44 |
# File 'lib/salestation/web/error_mapper.rb', line 42 def initialize(map = {}) @error_to_response_map = ERROR_TO_RESPONSE_DEFAULTS.merge(map) end |
Instance Method Details
#map ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/salestation/web/error_mapper.rb', line 46 def map -> (error) do _, error_mapper = @error_to_response_map .find {|error_type, _| error.kind_of?(error_type) } # Interpret a Failure from the application layer as Success in the web # layer. Even if the domain specific operation failed, the web layer is # still able to successfully produce a well-formed response. if error_mapper Deterministic::Result::Success(error_mapper.call(error)) elsif error.is_a?(Hash) Deterministic::Result::Success(Responses::InternalError.new(error)) else raise UndefinedErrorClass, "Undefined error class: #{error.class.name}" end end end |