lib/bmg/algebra/shortcuts.rb in bmg-0.16.0.pre.rc1 vs lib/bmg/algebra/shortcuts.rb in bmg-0.16.0.pre.rc2
- old
+ new
@@ -7,31 +7,47 @@
p | Predicate.match(a, matcher, options)
}
self.restrict(predicate)
end
- def prefix(prefix)
+ def prefix(prefix, options = {})
raise "Attrlist must be known to use `prefix`" unless self.type.knows_attrlist?
- renaming = self.type.to_attrlist.each_with_object({}){|a,r|
- r[a] = :"#{prefix}#{a}"
- }
+ attrs = self.type.to_attrlist
+ attrs = attrs - options[:but] if options[:but]
+ renaming = Hash[attrs.map{|a| [a, :"#{prefix}#{a}"] }]
self.rename(renaming)
end
- def suffix(suffix)
+ def suffix(suffix, options = {})
raise "Attrlist must be known to use `suffix`" unless self.type.knows_attrlist?
- renaming = self.type.to_attrlist.each_with_object({}){|a,r|
- r[a] = :"#{a}#{suffix}"
- }
+ attrs = self.type.to_attrlist
+ attrs = attrs - options[:but] if options[:but]
+ renaming = Hash[attrs.map{|a| [a, :"#{a}#{suffix}"] }]
self.rename(renaming)
end
+ def image(right, as = :image, on = [], options = {})
+ return super unless on.is_a?(Hash)
+ renaming = Hash[on.map{|k,v| [v,k] }]
+ self.image(right.rename(renaming), as, on.keys, options)
+ end
+
def join(right, on = [])
return super unless on.is_a?(Hash)
- renaming = on.each_pair.inject({}){|r, (k,v)|
- r.merge(v => k)
- }
+ renaming = Hash[on.map{|k,v| [v,k] }]
self.join(right.rename(renaming), on.keys)
+ end
+
+ def matching(right, on = [])
+ return super unless on.is_a?(Hash)
+ renaming = Hash[on.map{|k,v| [v,k] }]
+ self.matching(right.rename(renaming), on.keys)
+ end
+
+ def not_matching(right, on = [])
+ return super unless on.is_a?(Hash)
+ renaming = Hash[on.map{|k,v| [v,k] }]
+ self.not_matching(right.rename(renaming), on.keys)
end
end # module Shortcuts
end # module Algebra
end # module Bmg