class Mustermann::AST::Transformer::GroupTransformer
turn a group containing or nodes into a union @!visibility private
Public Instance Methods
group(elements)
click to toggle source
@!visibility private
# File lib/mustermann/ast/transformer.rb, line 48 def group(elements) return t(elements.first) if elements.size == 1 start, stop = elements.first.start, elements.last.stop if elements.any? Node[:group].new(t(elements), start: start, stop: stop) end
split_payload()
click to toggle source
@!visibility private
# File lib/mustermann/ast/transformer.rb, line 55 def split_payload groups = [[]] payload.each { |e| e.is_a?(:or) ? groups << [] : groups.last << e } groups.map! end
translate()
click to toggle source
@!visibility private
# File lib/mustermann/ast/transformer.rb, line 34 def translate payload.flatten! if payload.is_a?(Array) return union if payload.any? { |e| e.is_a? :or } self.payload = t(payload) self end
union()
click to toggle source
@!visibility private
# File lib/mustermann/ast/transformer.rb, line 42 def union groups = split_payload.map { |g| group(g) } Node[:union].new(groups, start: node.start, stop: node.stop) end