Module: ApiErrorHandler
- Defined in:
- lib/api_error_handler.rb,
lib/api_error_handler/errors.rb,
lib/api_error_handler/version.rb,
lib/api_error_handler/error_reporter.rb,
lib/api_error_handler/serializers/xml.rb,
lib/api_error_handler/serializers/json.rb,
lib/api_error_handler/error_id_generator.rb,
lib/api_error_handler/serializers/json_api.rb,
lib/api_error_handler/serializers/base_serializer.rb
Defined Under Namespace
Modules: Serializers Classes: Error, ErrorIdGenerator, ErrorReporter, InvalidOptionError, MissingDependencyError
Constant Summary collapse
- SERIALIZERS_BY_FORMAT =
{ json: Serializers::Json, json_api: Serializers::JsonApi, xml: Serializers::Xml, }.freeze
- SERIALIZER_OPTIONS =
{ backtrace: false, }.freeze
- CONTENT_TYPE_BY_FORMAT =
{ json_api: "application/vnd.api+json" }.freeze
- VERSION =
"0.2.1"
Instance Method Summary collapse
Instance Method Details
#handle_api_errors(options = {}) ⇒ Object
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 54 |
# File 'lib/api_error_handler.rb', line 26 def handle_api_errors( = {}) format = .fetch(:format, :json) error_reporter = ErrorReporter.new([:error_reporter]) = SERIALIZER_OPTIONS.merge( .slice(*SERIALIZER_OPTIONS.keys) ) serializer_class = [:serializer] || SERIALIZERS_BY_FORMAT.fetch(format) content_type = [:content_type] || CONTENT_TYPE_BY_FORMAT[format] rescue_from StandardError do |error| status = ActionDispatch::ExceptionWrapper.rescue_responses[error.class.to_s] error_id = ErrorIdGenerator.run([:error_id]) error_reporter.report(error, error_id: error_id) serializer = serializer_class.new(error, status) response_body = serializer.serialize( .merge(error_id: error_id) ) render( serializer.render_format => response_body, content_type: content_type, status: status ) rescue raise error end end |