Class: KeyMapable::Mapper
- Inherits:
-
Object
- Object
- KeyMapable::Mapper
- Defined in:
- lib/key_mapable/mapper.rb
Overview
Used internally by the KeyMapable concern.
Instance Attribute Summary collapse
-
#structure ⇒ Object
readonly
Returns the value of attribute structure.
-
#subject ⇒ Object
readonly
Returns the value of attribute subject.
Instance Method Summary collapse
- #array_key_map(original_key, new_key, &block) ⇒ Object
-
#initialize(subject) ⇒ Mapper
constructor
A new instance of Mapper.
- #key(name, &block) ⇒ Object
- #key_map(original_key, new_key, transform: ->(val) { val }, &block) ⇒ Object
- #key_value(key) ⇒ Object
- #resolve ⇒ Object
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
#structure ⇒ Object (readonly)
Returns the value of attribute structure.
5 6 7 |
# File 'lib/key_mapable/mapper.rb', line 5 def structure @structure end |
#subject ⇒ Object (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
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_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, transform: ->(val) { val }, &block) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/key_mapable/mapper.rb', line 22 def key_map(original_key, new_key, transform: ->(val) { val }, &block) original_subject = subject.public_send(original_key) transformed_subject = transform.call(original_subject) if block_given? child_mapper = self.class.new(transformed_subject) child_mapper.instance_eval &block @structure[new_key] = child_mapper.resolve else @structure[new_key] = transformed_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 |
#resolve ⇒ Object
43 44 45 |
# File 'lib/key_mapable/mapper.rb', line 43 def resolve @structure end |