Sha256: f6e26a8ddc89421410ce100f874f9a8f080da2de2cf52c48c1626296c7178478

Contents?: true

Size: 1.38 KB

Versions: 6

Compression:

Stored size: 1.38 KB

Contents

module InfinumJsonApiSetup
  module Error
    class Base
      # @return [String]
      attr_reader :details

      # @return [String]
      attr_reader :title

      # @param [Hash] opts
      # @option opts [Object] :object
      # @option opts [String] :message
      def initialize(object: nil, message: nil)
        @details =
          details_from_object(object) || message || I18n.t("json_api.errors.#{http_status}.detail")
        @title = I18n.t("json_api.errors.#{http_status}.title")
      end

      # @return [String]
      def code
        self.class.name.demodulize.underscore.upcase
      end

      # @return [Symbol]
      def http_status
        self.class.name.demodulize.underscore.to_sym
      end

      private

      def details_from_object(object)
        return unless object_supported?(object)

        object.errors.map { |error| [error.attribute, error.full_message] }
      end

      def object_supported?(object)
        object.present? && object.respond_to?(:errors) && object.errors.is_a?(ActiveModel::Errors)
      end
    end

    class Forbidden < Base; end

    class BadRequest < Base; end

    class Gone < Base; end

    class Unauthorized < Base; end

    class UnprocessableEntity < Base; end

    class InternalServerError < Base; end

    class RecordNotFound < Base
      # @return [Symbol]
      def http_status
        :not_found
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
infinum_json_api_setup-0.0.8 lib/infinum_json_api_setup/error.rb
infinum_json_api_setup-0.0.7 lib/infinum_json_api_setup/error.rb
infinum_json_api_setup-0.0.6 lib/infinum_json_api_setup/error.rb
infinum_json_api_setup-0.0.5 lib/infinum_json_api_setup/error.rb
infinum_json_api_setup-0.0.4 lib/infinum_json_api_setup/error.rb
infinum_json_api_setup-0.0.3 lib/infinum_json_api_setup/error.rb