class KeyMapable::Mapper
Used internally by the KeyMapable
concern.
Attributes
accessor[R]
structure[R]
subject[R]
Public Class Methods
new(subject, accessor = KeyMapable::Accessor::Method)
click to toggle source
# File lib/key_mapable/mapper.rb, line 7 def initialize(subject, accessor = KeyMapable::Accessor::Method) @subject = subject @structure = {} @accessor = accessor end
Public Instance Methods
array_key_map(original_key, new_key, &block)
click to toggle source
# File lib/key_mapable/mapper.rb, line 35 def array_key_map(original_key, new_key, &block) original_subject = access(original_key) @structure[new_key] = original_subject.map do |item| child_mapper = self.class.new(item, accessor) child_mapper.instance_eval(&block) child_mapper.resolve end end
key(name, &block)
click to toggle source
# File lib/key_mapable/mapper.rb, line 17 def key(name, &block) child_mapper = self.class.new(subject, accessor) child_mapper.instance_eval(&block) @structure[name] = child_mapper.resolve end
key_map(original_key, new_key, transform: ->(val) { val }
click to toggle source
# File lib/key_mapable/mapper.rb, line 23 def key_map(original_key, new_key, transform: ->(val) { val }, &block) original_subject = access(original_key) transformed_subject = transform.call(original_subject) if block_given? child_mapper = self.class.new(transformed_subject, accessor) child_mapper.instance_eval &block @structure[new_key] = child_mapper.resolve else @structure[new_key] = transformed_subject end end
key_value(key) { |subject| ... }
click to toggle source
# File lib/key_mapable/mapper.rb, line 13 def key_value(key) @structure[key] = yield(subject) end
resolve()
click to toggle source
# File lib/key_mapable/mapper.rb, line 44 def resolve @structure end
Private Instance Methods
access(key)
click to toggle source
# File lib/key_mapable/mapper.rb, line 50 def access(key) accessor.access(subject, key) end