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