Class: Metaschema::ModelGenerator::Services::FieldSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/metaschema/model_generator/services/field_serializer.rb

Overview

Serializes a field value from a model instance to the target format. Handles SINGLETON_OR_ARRAY normalization and collapsible field merging.

Pipeline: transform -> make_collapsible -> serialize -> apply_value_map

-> collapse -> denormalize

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, attr, format, data, group_as:, collapsible:) ⇒ FieldSerializer

Returns a new instance of FieldSerializer.



14
15
16
17
18
19
20
21
22
23
# File 'lib/metaschema/model_generator/services/field_serializer.rb', line 14

def initialize(model, attr, format, data, group_as:, collapsible:)
  @model = model
  @attribute = model.class.attributes[attr]
  @format = format
  @mapping_rule = model.class.mappings[format].mappings
    .find { |r| r.to == attr }
  @data = data
  @group_as = group_as
  @collapsible = collapsible
end

Class Method Details

.callObject



25
26
27
# File 'lib/metaschema/model_generator/services/field_serializer.rb', line 25

def self.call(...)
  new(...).call
end

Instance Method Details

#callObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/metaschema/model_generator/services/field_serializer.rb', line 29

def call
  value = @model.public_send(@attribute.name)
  return if value.nil?

  value = transform(value)
  value = make_collapsible(value) if @collapsible
  value = serialize(value)
  return unless @mapping_rule&.render?(value, @model)

  value = apply_value_map(value)
  value = collapse(value) if @collapsible
  value = denormalize(value)

  @data[@mapping_rule.name] = value
end