application_controller.rb 943 B

123456789101112131415161718192021222324252627282930313233343536373839
  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. before_action :set_default_response_format
  6. rescue_from StandardError, with: :handle_unhandled_api_error
  7. def not_found
  8. error = APIError::BaseError.new('The requested resource was not found')
  9. render_error(error, :not_found)
  10. end
  11. private
  12. def handle_unhandled_api_error(err)
  13. msg = "Unhandled API Error: #{err}\n#{err.backtrace.join("\n")}"
  14. Rails.logger.error(msg)
  15. error = APIError::BaseError.new(
  16. 'An unhandled exception occurred.',
  17. internal_error: err,
  18. )
  19. render_error(error)
  20. end
  21. def render_error(error, status = :internal_server_error)
  22. render json: {
  23. errors: [{message: error.message, type: error.type}],
  24. }, status: status
  25. end
  26. def set_default_response_format
  27. request.format = :json
  28. end
  29. end