Sha256: e019232d6991a4bc63b8f2cba0683e0d098af072a30ed2d32f1fc57425dd4640

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

module Agilibox::ApiControllerConcern
  extend ActiveSupport::Concern

  private

  def render_json(json = {}, options = {})
    json.reverse_merge!(current_user: current_user)
    options.reverse_merge!(current_user: current_user)

    json = Agilibox::MiniModelSerializer::Serialize.call(json, options)

    render options.merge(json: json)
  end

  def render_json_error(message_or_object, options = {})
    if message_or_object.is_a?(ActiveRecord::Base)
      message = message_or_object.errors.full_messages.join(", ")
    else
      message = message_or_object
    end

    options[:status] ||= :unprocessable_entity

    render_json({error: message}, options)
  end

  def render_not_found
    render_json_error t("errors.not_found"), status: :not_found
  end

  def render_forbidden
    render_json_error t("errors.forbidden"), status: :forbidden
  end

  def render_unauthorized
    render_json_error t("errors.unauthorized"), status: :unauthorized
  end

  def render_forbidden_or_unauthorized
    current_user ? render_unauthorized : render_forbidden
  end

  included do |controller|
    if controller < ActionController::Rescue
      if defined?(Pundit::NotAuthorizedError)
        rescue_from Pundit::NotAuthorizedError, with: :render_forbidden_or_unauthorized
      end

      rescue_from ActiveRecord::RecordNotFound, with: :render_not_found
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
agilibox-1.0.14 app/controllers/concerns/agilibox/api_controller_concern.rb
agilibox-1.0.13 app/controllers/concerns/agilibox/api_controller_concern.rb
agilibox-1.0.12 app/controllers/concerns/agilibox/api_controller_concern.rb
agilibox-1.0.11 app/controllers/concerns/agilibox/api_controller_concern.rb
agilibox-1.0.10 app/controllers/concerns/agilibox/api_controller_concern.rb