2021-09-14 06:25:02 +00:00
|
|
|
module RequestExceptionHandler
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
included do
|
|
|
|
rescue_from ActiveRecord::RecordInvalid, with: :render_record_invalid
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def handle_with_exception
|
|
|
|
yield
|
2022-05-09 08:53:19 +00:00
|
|
|
rescue ActiveRecord::RecordNotFound
|
2021-09-14 06:25:02 +00:00
|
|
|
render_not_found_error('Resource could not be found')
|
|
|
|
rescue Pundit::NotAuthorizedError
|
|
|
|
render_unauthorized('You are not authorized to do this action')
|
2022-10-13 22:12:04 +00:00
|
|
|
rescue ActionController::ParameterMissing => e
|
|
|
|
render_could_not_create_error(e.message)
|
2021-09-14 06:25:02 +00:00
|
|
|
ensure
|
|
|
|
# to address the thread variable leak issues in Puma/Thin webserver
|
|
|
|
Current.reset
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_unauthorized(message)
|
|
|
|
render json: { error: message }, status: :unauthorized
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_not_found_error(message)
|
|
|
|
render json: { error: message }, status: :not_found
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_could_not_create_error(message)
|
|
|
|
render json: { error: message }, status: :unprocessable_entity
|
|
|
|
end
|
|
|
|
|
2021-12-09 06:37:48 +00:00
|
|
|
def render_payment_required(message)
|
|
|
|
render json: { error: message }, status: :payment_required
|
|
|
|
end
|
|
|
|
|
2021-09-14 06:25:02 +00:00
|
|
|
def render_internal_server_error(message)
|
|
|
|
render json: { error: message }, status: :internal_server_error
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_record_invalid(exception)
|
|
|
|
render json: {
|
2021-12-03 07:49:11 +00:00
|
|
|
message: exception.record.errors.full_messages.join(', '),
|
|
|
|
attributes: exception.record.errors.attribute_names
|
2021-09-14 06:25:02 +00:00
|
|
|
}, status: :unprocessable_entity
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_error_response(exception)
|
|
|
|
render json: exception.to_hash, status: exception.http_status
|
|
|
|
end
|
|
|
|
end
|