lib/lou.rb in lou-0.0.1 vs lib/lou.rb in lou-0.1.0

- old
+ new

@@ -1,62 +1,36 @@ require 'lou/version' +require 'lou/transformer' module Lou def self.extended(base) base.class_eval do @transforms = [] end end - def transform(mapping) - @transforms << mapping - self + def transform + Transformer.new.tap do |t| + @transforms << t + end end def apply(input) output = deep_clone(input) @transforms.each do |t| output = t.apply(output) end output end - def undo(output) + def reverse(output) input = deep_clone(output) @transforms.reverse_each do |t| - input = t.undo(input) + input = t.reverse(input) end input end def deep_clone(obj) Marshal.load(Marshal.dump(obj)) - end - - def forward(&block) - Transformer.new(&block) - end - - class Transformer - def initialize(&block) - forward(&block) - end - - def forward(&block) - @forward = block - self - end - - def backward(&block) - @backward = block - self - end - - def apply(input) - @forward.nil? ? input : @forward.call(input) - end - - def undo(output) - @backward.nil? ? output : @backward.call(output) - end end end