Error response handlers for a Rails controller, that always return JSON.
Add this line to your application's Gemfile:
gem 'erratum_responsum'And then execute:
$ bundle
Or install it yourself as:
$ gem install erratum_responsum
Add the concern to your ApplicationController or ApiController
require 'erratum_responsum'
class ApiController < ActionController::API
include ErratumResponsum
endYou can optionally set the class variable error_media_type to change the Content-Type of error responses.
self.error_media_type = 'application/vnd.xpbytes.errors.v1+json'In order to use the error responses, use rescue_from to handle them:
rescue_from CanCan::AccessDenied, AuthorizedTransaction::TransactionUnauthorized, with: :forbidden
rescue_from OptimisticallyStale::MissingLockVersion, ActionController::BadRequest,
RequestMissingParam, with: :bad_request
rescue_from ActiveRecord::RecordNotFound, with: :not_found
rescue_from ActionController::UnknownFormat, NoAcceptSerializer, with: :not_acceptable
rescue_from ResourceGone, with: :gone
rescue_from ActiveRecord::StatementInvalid, ActiveRecord::RecordInvalid,
ContentDoesNotMatchContentType, with: :unprocessable_entity
rescue_from ActiveRecord::RecordNotUnique, ActiveRecord::StaleObjectError, with: :conflict
rescue_from ContentTypeNotRecognised, with: :unsupported_media_typeNow, when one of these error is raised in a controller action, the error response is generated automatically.
💡 Remove
CanCanif you don't usecancancan.💡 Remove
AuthorizedTransaction, if you don't useauthorized_transaction.💡 Remove
OptimisticallyStaleif you don't useoptimistically_stale
When the exception has more information, such as an error_code, the code will use that instead, prefixed with Ex.
If there is no such information, the error class name is used to generate the error code, prefixed with Gx.
Change this behaviour by overriding def error_code(error).
This gem does expose more errors
After checking out the repo, run bin/setup to install dependencies.
Then, run rake test to run the tests.
You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.
To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at XPBytes/erratum_responsum.