106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/bmg/type.rb', line 106
def autowrap(options)
sep = options[:split] || Operator::Autowrap::DEFAULT_OPTIONS[:split]
splitter = ->(a){ a.to_s.split(sep).first }
is_split = ->(a){ a.to_s.split(sep).size > 1 }
dup.tap{|x|
x.attrlist = self.attrlist.map(&splitter).uniq.map(&:to_sym) if knows_attrlist?
x.keys = self._keys.autowrap(self, x, options) if knows_keys?
autowrapped = self.predicate.free_variables.select(&is_split)
x.predicate = autowrapped.empty? ? self.predicate : self.predicate.and_split(autowrapped).last
}
end
|