Sha256: 3df2b82c7b0c66047ad1f6b356d50af53ebfb07746d2fed943c07f317188151b
Contents?: true
Size: 1.4 KB
Versions: 2
Compression:
Stored size: 1.4 KB
Contents
module Bmg class TupleTransformer def initialize(transformation) @transformation = transformation end def self.new(arg) return arg if arg.is_a?(TupleTransformer) super end def call(tuple) transform_tuple(tuple, @transformation) end def knows_attrlist? @transformation.is_a?(Hash) end def to_attrlist @transformation.keys end private def transform_tuple(tuple, with) case with when Symbol tuple.each_with_object({}){|(k,v),dup| dup[k] = transform_attr(v, with) } when Proc tuple.each_with_object({}){|(k,v),dup| dup[k] = transform_attr(v, with) } when Hash with.each_with_object(tuple.dup){|(k,v),dup| dup[k] = transform_attr(dup[k], v) } when Array with.inject(tuple){|dup,on| transform_tuple(dup, on) } else raise ArgumentError, "Unexpected transformation `#{with.inspect}`" end end def transform_attr(value, with) case with when Symbol value.send(with) when Proc with.call(value) when Hash with[value] else raise ArgumentError, "Unexpected transformation `#{with.inspect}`" end end end # module TupleTransformer end # module Bmg
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
bmg-0.17.8 | lib/bmg/support/tuple_transformer.rb |
bmg-0.17.7 | lib/bmg/support/tuple_transformer.rb |