Sha256: 98954afacb698ddfa3586b567de7042277ff6be593055cce303f088bd75bb73a

Contents?: true

Size: 1.71 KB

Versions: 10

Compression:

Stored size: 1.71 KB

Contents

require 'jsonapi/error_serializer'

module JSONAPI
  # [ActiveModel::Errors] serializer
  class ActiveModelErrorSerializer < ErrorSerializer
    set_id :object_id
    set_type :error

    attribute :status do
      '422'
    end

    attribute :title do
      Rack::Utils::HTTP_STATUS_CODES[422]
    end

    attribute :code do |object|
      _, error_hash = object
      code = error_hash[:error] unless error_hash[:error].is_a?(Hash)
      code ||= error_hash[:message] || :invalid
      # `parameterize` separator arguments are different on Rails 4 vs 5...
      code.to_s.delete("''").parameterize.tr('-', '_')
    end

    attribute :detail do |object, params|
      error_key, error_hash = object
      errors_object = params[:model].errors

      # Rails 4 provides just the message.
      if error_hash[:error].present? && error_hash[:error].is_a?(Hash)
        message = errors_object.generate_message(
          error_key, nil, error_hash[:error]
        )
      elsif error_hash[:error].present?
        message = errors_object.generate_message(
          error_key, error_hash[:error], error_hash
        )
      else
        message = error_hash[:message]
      end

      errors_object.full_message(error_key, message)
    end

    attribute :source do |object, params|
      error_key, _ = object
      model_serializer = params[:model_serializer]
      attrs = (model_serializer.attributes_to_serialize || {}).keys
      rels = (model_serializer.relationships_to_serialize || {}).keys

      if attrs.include?(error_key)
        { pointer: "/data/attributes/#{error_key}" }
      elsif rels.include?(error_key)
        { pointer: "/data/relationships/#{error_key}" }
      else
        { pointer: '' }
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
jsonapi.rb-1.6.0 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.7 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.6 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.5 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.4 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.3 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.2 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.1 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.5.0 lib/jsonapi/active_model_error_serializer.rb
jsonapi.rb-1.4.5 lib/jsonapi/active_model_error_serializer.rb