Module: ActiveItem::ComposedOf

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
lib/active_item/composed_of.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#populate_composed_attributes_from_item(item) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/active_item/composed_of.rb', line 9

def populate_composed_attributes_from_item(item)
  self.class.compositions.each do |part_id, config|
    dynamo_key = self.class.to_dynamo_key(part_id.to_s)
    vo_class = Object.const_get(config[:class_name])

    if item[dynamo_key].is_a?(Hash)
      vo = if vo_class.respond_to?(:from_dynamo_map)
             vo_class.from_dynamo_map(item[dynamo_key])
           else
             kwargs = {}
             config[:mapping].each do |_model_attr, vo_attr|
               key = self.class.to_dynamo_key(vo_attr.to_s)
               kwargs[vo_attr] = item[dynamo_key][key] || item[dynamo_key][vo_attr.to_s]
             end
             vo_class.new(**kwargs)
           end

      instance_variable_set("@_composed_#{part_id}", vo)
      config[:mapping].each do |model_attr, vo_attr|
        instance_variable_set("@#{model_attr}", vo.send(vo_attr))
      end
    end
  end
end