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 47
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 54
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 33
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 41
def union
  groups = split_payload.map { |g| group(g) }
  Node[:union].new(groups, start: node.start, stop: node.stop)
end