Method: Bmg::Type#autowrap

Defined in:
lib/bmg/type.rb

#autowrap(options) ⇒ Object



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