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