application_controller.rb 969 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # frozen_string_literal: true
  2. require './lib/api_error/base_error'
  3. class API::ApplicationController < ApplicationController
  4. protect_from_forgery with: :null_session
  5. include CookieBasedCsrf
  6. before_action :set_default_response_format
  7. rescue_from StandardError, with: :handle_unhandled_api_error
  8. def not_found
  9. error = APIError::BaseError.new('The requested resource was not found')
  10. render_error(error, :not_found)
  11. end
  12. private
  13. def handle_unhandled_api_error(err)
  14. msg = "Unhandled API Error: #{err}\n#{err.backtrace.join("\n")}"
  15. Rails.logger.error(msg)
  16. error = APIError::BaseError.new(
  17. 'An unhandled exception occurred.',
  18. internal_error: err,
  19. )
  20. render_error(error)
  21. end
  22. def render_error(error, status = :internal_server_error)
  23. render json: {
  24. errors: [{message: error.message, type: error.type}],
  25. }, status: status
  26. end
  27. def set_default_response_format
  28. request.format = :json
  29. end
  30. end