Class: Metaschema::ModelGenerator::Services::FieldDeserializer

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

Overview

Deserializes a field value from the source format into a model instance. Handles SINGLETON_OR_ARRAY normalization and collapsible field expansion.

Pipeline: normalize -> separate -> cast -> validate_collection -> transform

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of FieldDeserializer.



11
12
13
14
15
16
17
18
19
20
# File 'lib/metaschema/model_generator/services/field_deserializer.rb', line 11

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



22
23
24
# File 'lib/metaschema/model_generator/services/field_deserializer.rb', line 22

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

Instance Method Details

#callObject



26
27
28
29
30
31
32
33
34
35
# File 'lib/metaschema/model_generator/services/field_deserializer.rb', line 26

def call
  data = normalize(@data)
  data = separate(data) if @collapsible
  data = cast(data)
  validate_collection!(data)
  data = transform(data)
  data = unwrap_singleton(data)

  @model.public_send(:"#{@attribute.name}=", data)
end