class MSFLVisitors::Visitor

Attributes

clauses[RW]
current_clause[RW]
mode[RW]

Public Class Methods

new() click to toggle source
# File lib/msfl_visitors/visitor.rb, line 29
def initialize
  self.mode = :term # or :aggregations
  self.clauses = Array.new

end

Public Instance Methods

get_visitor() click to toggle source
# File lib/msfl_visitors/visitor.rb, line 51
def get_visitor
  case mode
    when :term
      TermFilterVisitor.new(self)
    when :es_term
      ESTermFilterVisitor.new(self)
    else
      AggregationsVisitor.new(self)
  end
end
in_aggregation_mode() { || ... } click to toggle source
# File lib/msfl_visitors/visitor.rb, line 62
def in_aggregation_mode
  self.mode = :aggregations
  result = yield if block_given?
  self.mode = :term
  result
end
visit(node) click to toggle source
# File lib/msfl_visitors/visitor.rb, line 35
def visit(node)
  if mode == :es_term
    get_visitor.visit(node)
  else
    case node
      when Nodes::Partial
        in_aggregation_mode do
          clauses.concat get_visitor.visit(node)
          ""
        end
      else
        get_visitor.visit(node)
    end
  end
end
visit_tree(root) click to toggle source
# File lib/msfl_visitors/visitor.rb, line 69
def visit_tree(root)
  [{clause: root.accept(self)}].concat(clauses).reject { |c| c[:clause] == "" }
end