class Almanack::SerializedTransformation

Public Class Methods

new(subject) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 4
def initialize(subject)
  @subject = subject
  @transformations = {}
end

Public Instance Methods

apply() click to toggle source
# File lib/almanack/serialized_transformation.rb, line 17
def apply
  recurse(cloned)
end
key(&block) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 9
def key(&block)
  @transformations[:key] = block
end
value(&block) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 13
def value(&block)
  @transformations[:value] = block
end

Private Instance Methods

cloned() click to toggle source
# File lib/almanack/serialized_transformation.rb, line 23
def cloned
  @subject.dup
end
no_change() click to toggle source
# File lib/almanack/serialized_transformation.rb, line 31
def no_change
  -> (obj) { obj }
end
recursable?(node) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 27
def recursable?(node)
  node.is_a?(Array) || node.is_a?(Hash)
end
recurse(entity) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 39
def recurse(entity)
  case entity
  when Array
    entity.map { |child| recurse(child) }
  when Hash
    entity.each_with_object({}) do |(key, value), hash|
      transformed_key = recursable?(key) ? recurse(key) : transformation(:key, key)
      hash[transformed_key] = recurse(value)
    end
  else
    transformation(:value, entity)
  end
end
transformation(type, entity) click to toggle source
# File lib/almanack/serialized_transformation.rb, line 35
def transformation(type, entity)
  (@transformations[type] || no_change).call(entity)
end