Class: KeyMapable::Mapper

Inherits:
Object
  • Object
show all
Defined in:
lib/key_mapable/mapper.rb

Overview

Used internally by the KeyMapable concern.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value) ⇒ Mapper

Returns a new instance of Mapper.



7
8
9
10
# File 'lib/key_mapable/mapper.rb', line 7

def initialize(value)
  @value = value
  @tree = {}
end

Instance Attribute Details

#treeObject (readonly)

Returns the value of attribute tree.



5
6
7
# File 'lib/key_mapable/mapper.rb', line 5

def tree
  @tree
end

#valueObject (readonly)

Returns the value of attribute value.



5
6
7
# File 'lib/key_mapable/mapper.rb', line 5

def value
  @value
end

Instance Method Details

#array_key_map(original_key, new_key, &block) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/key_mapable/mapper.rb', line 34

def array_key_map(original_key, new_key, &block)
  original_value = value.public_send(original_key)
  @tree[new_key] = original_value.map do |item|
    child_mapper = self.class.new(item)
    child_mapper.instance_eval(&block)
    child_mapper.resolve
  end
end

#key(name, &block) ⇒ Object



12
13
14
15
16
# File 'lib/key_mapable/mapper.rb', line 12

def key(name, &block)
  child_mapper = self.class.new(value)
  child_mapper.instance_eval(&block)
  @tree[name] = child_mapper.resolve
end

#key_map(original_key, new_key, &block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/key_mapable/mapper.rb', line 18

def key_map(original_key, new_key, &block)
  original_value = value.public_send(original_key)
  if block_given?
    child_mapper = self.class.new(original_value)
    @tree[new_key] = child_mapper.instance_eval do
      yield(original_value)
    end
  else
    @tree[new_key] = original_value
  end
end

#key_value(key) ⇒ Object



30
31
32
# File 'lib/key_mapable/mapper.rb', line 30

def key_value(key)
  @tree[key] = yield()
end

#resolveObject



43
44
45
# File 'lib/key_mapable/mapper.rb', line 43

def resolve
  @tree
end