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(subject) ⇒ Mapper

Returns a new instance of Mapper.



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

def initialize(subject)
  @subject = subject
  @structure = {}
end

Instance Attribute Details

#structureObject (readonly)

Returns the value of attribute structure.



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

def structure
  @structure
end

#subjectObject (readonly)

Returns the value of attribute subject.



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

def subject
  @subject
end

Instance Method Details

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



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

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

#key(name, &block) ⇒ Object



16
17
18
19
20
# File 'lib/key_mapable/mapper.rb', line 16

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

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



22
23
24
25
26
27
28
29
30
31
# File 'lib/key_mapable/mapper.rb', line 22

def key_map(original_key, new_key, &block)
  original_subject = subject.public_send(original_key)
  if block_given?
    child_mapper = self.class.new(original_subject)
    child_mapper.instance_eval &block
    @structure[new_key] = child_mapper.resolve
  else
    @structure[new_key] = original_subject
  end
end

#key_value(key) ⇒ Object



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

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

#resolveObject



46
47
48
# File 'lib/key_mapable/mapper.rb', line 46

def resolve
  @structure
end

#transformObject



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

def transform
  @structure = yield(@subject)
end