Module: Zodra::ResponseSerializer

Defined in:
lib/zodra/response_serializer.rb

Class Method Summary collapse

Class Method Details

.call(object, definition, key_format: Zodra.configuration.key_format, type_resolver: TypeRegistry.global) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/zodra/response_serializer.rb', line 5

def self.call(object, definition, key_format: Zodra.configuration.key_format, type_resolver: TypeRegistry.global)
  result = {}

  definition.attributes.each do |attr_name, attribute|
    value = extract_value(object, attr_name)
    serialized_key = transform_key(attr_name, key_format)

    if attribute.reference?
      referenced = type_resolver.find!(attribute.reference_name)
      result[serialized_key] = value.nil? ? nil : call(value, referenced, key_format:, type_resolver:)
    elsif attribute.array? && attribute.of
      referenced = type_resolver.find(attribute.of)
      result[serialized_key] = serialize_array(value, referenced, key_format:, type_resolver:)
    else
      result[serialized_key] = value
    end
  end

  result
end