rootstrap/rails_api_base

View on GitHub
app/controllers/api/concerns/act_as_api_request.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
93%
# frozen_string_literal: true

module API
  module Concerns
    module ActAsAPIRequest
      extend ActiveSupport::Concern

      included do
        before_action :skip_session_storage
        before_action :check_json_request
      end

      def check_json_request
        return if !request_with_body? || request.content_type&.include?('json')

        render json: { error: I18n.t('api.errors.invalid_content_type') }, status: :not_acceptable
      end

      def skip_session_storage
        # Devise stores the cookie by default, so in api requests, it is disabled
        # http://stackoverflow.com/a/12205114/2394842
        request.session_options[:skip] = true
      end

      private

      def request_with_body?
        request.post? || request.put? || request.patch?
      end
    end
  end
end