module Erratum::RescuableResource

Public Class Methods

included(base) click to toggle source
# File lib/erratum/rescuable_resource.rb, line 7
def self.included(base)
  base.include ::AppleCore::ActionController::ResourceNaming

  base.rescue_from 'ActiveRecord::RecordInvalid',
                   'ActiveRecord::RecordNotSaved',
                   'ActiveRecord::RecordNotFound',
                   'ActiveRecord::RecordNotUnique',
                   'ActiveRecord::InvalidForeignKey',
                   'ActiveRecord::ValueTooLong',
                   'ActionController::ParameterMissing',
                   'ActionController::UnpermittedParameters' do |exception|

    erratum = Array(
                Erratum.build(
                  exception,
                  resource_name: self.class.singular_underscored_base_resource_name,
                  resource_id:   params[:id],
                  action:        action_name,
                ),
              )

    render json:   Hash['errors' => erratum.as_json],
           status: erratum.first.http_status
  end

  base.rescue_from 'Erratum::Error' do |exception|
    exception = Array(exception)

    render json:   Hash['errors' => exception.as_json],
           status: exception.first.http_status
  end
end