tramway-api/app/serializers/tramway/api/v1/error_serializer.rb
# frozen_string_literal: true
class Tramway::Api::V1::ErrorSerializer < ActiveModel::Serializer
# Based on https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model/serializer/error_serializer.rb
# @return [Hash<field_name,Array<error_message>>]
def as_json
error_messages(object)
end
def success?
false
end
private
def error_messages(object, path = []) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
error_messages = {}
if object.respond_to? :errors
object.errors.messages.each do |name, messages|
error_messages.merge!((path + [name]).join('/') => messages)
end
end
if object.respond_to? :model
if object.model
object.model.errors.messages.each do |name, messages|
error_messages.merge!((path + [name]).join('/') => messages)
end
end
object.model&.attributes&.each do |attribute_key, attribute_value|
if attribute_value.is_a?(Array)
attribute_value.each_with_index do |array_attribute_value, array_attribute_key|
error_messages.merge!(
error_messages(
array_attribute_value,
path + [attribute_key] + [array_attribute_key]
)
)
end
end
end
end
error_messages
end
end