Class: DbFuel::Modeling::RecordTransformer

Inherits:
Object
  • Object
show all
Defined in:
lib/db_fuel/modeling/record_transformer.rb

Overview

Creates attribute renderers based on attributes passed. Also constains methods to transform attribute renderers and include timestamp attributes if needed.

Constant Summary collapse

NOW_TYPE =

:nodoc:

'r/value/now'
CREATED_AT =
'created_at'
UPDATED_AT =
'updated_at'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resolver:, attributes: []) ⇒ RecordTransformer

Returns a new instance of RecordTransformer.

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
# File 'lib/db_fuel/modeling/record_transformer.rb', line 22

def initialize(resolver:, attributes: [])
  raise ArgumentError, 'resolver is required' unless resolver

  @resolver            = resolver
  @attribute_renderers = make_renderers(attributes)

  freeze
end

Instance Attribute Details

#attribute_renderersObject (readonly)

Returns the value of attribute attribute_renderers.



20
21
22
# File 'lib/db_fuel/modeling/record_transformer.rb', line 20

def attribute_renderers
  @attribute_renderers
end

#resolverObject (readonly)

Returns the value of attribute resolver.



20
21
22
# File 'lib/db_fuel/modeling/record_transformer.rb', line 20

def resolver
  @resolver
end

Instance Method Details

#transform(row, time, keys: Set.new, created_at: false, updated_at: false) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/db_fuel/modeling/record_transformer.rb', line 31

def transform(row, time, keys: Set.new, created_at: false, updated_at: false)
  dynamic_attributes, all_keys = make_dynamic_attributes(
    keys: keys,
    created_at: created_at,
    updated_at: updated_at
  )

  dynamic_attributes.each_with_object({}) do |attribute_renderer, memo|
    next if all_keys.any? && all_keys.exclude?(attribute_renderer.key)

    value = attribute_renderer.transform(row, time)

    resolver.set(memo, attribute_renderer.key, value)
  end
end