module JSONAPIHelpers::Serializers::ModelError

Constants

KNOWN_ERROR_TYPES

Public Class Methods

error_message_for(model_errors, field, error) click to toggle source
# File lib/jsonapi_helpers/serializers/model_error.rb, line 49
def self.error_message_for(model_errors, field, error)
  message = error.fetch(:error)
  return message if message.is_a?(String) # expects it to already be translated

  model_errors.generate_message(field, message, count: error[:count])
end
error_meta_for(error) click to toggle source
# File lib/jsonapi_helpers/serializers/model_error.rb, line 56
def self.error_meta_for(error)
  meta = {
    type: error_type_for(error.fetch(:error))
  }
  meta[:count] = error[:count] if error[:count]
  meta[:value] = error[:value] if error[:value]
  meta
end
error_type_for(error_type) click to toggle source
# File lib/jsonapi_helpers/serializers/model_error.rb, line 65
def self.error_type_for(error_type)
  return error_type if KNOWN_ERROR_TYPES.include?(error_type)
  :invalid
end
serialize(model, key_transform: JSONAPIHelpers.config.key_transform) click to toggle source
# File lib/jsonapi_helpers/serializers/model_error.rb, line 34
def self.serialize(model, key_transform: JSONAPIHelpers.config.key_transform)
  model.errors.details.flat_map do |field, errors|
    errors.map do |error|
      attribute_name = KeyTransform.call(field.to_s, key_transform: key_transform)

      {
        status: 422,
        source: { pointer: "/data/attributes/#{attribute_name}" },
        detail: error_message_for(model.errors, field, error),
        meta: error_meta_for(error)
      }
    end
  end
end