class ScopedSearch::QueryLanguage::AST::OperatorNode

AST class for representing operators in the query. An operator node has an operator and operands that are represented as AST child nodes. Usually, operator nodes have one or two children. For logical operators, a distinct subclass exists to implement some tree simplification rules.

Attributes

children[R]
operator[R]

Public Instance Methods

[](child_nr) click to toggle source

Returns a child node by index, starting with 0.

# File lib/scoped_search/query_language/ast.rb, line 111
def [](child_nr)
  children[child_nr]
end
eql?(node) click to toggle source
# File lib/scoped_search/query_language/ast.rb, line 83
def eql?(node) # :nodoc
  node.kind_of?(OperatorNode) && node.operator == operator && node.children.eql?(children)
end
infix?() click to toggle source

Returns true if this is an infix operator

# File lib/scoped_search/query_language/ast.rb, line 101
def infix?
  children.length > 1
end
lhs() click to toggle source

Return the left-hand side (LHS) operand for this operator.

# File lib/scoped_search/query_language/ast.rb, line 88
def lhs
  raise ScopedSearch::Exception, "Operator does not have a LHS" if prefix?
  raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2
  children[0]
end
prefix?() click to toggle source

Returns true if this is a prefix operator

# File lib/scoped_search/query_language/ast.rb, line 106
def prefix?
  children.length == 1
end
rhs() click to toggle source

Return the right-hand side (RHS) operand for this operator.

# File lib/scoped_search/query_language/ast.rb, line 95
def rhs
  raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2
  children.length == 1 ? children[0] : children[1]
end
simplify() click to toggle source

Tree simplicication: returns itself after simpifying its children

# File lib/scoped_search/query_language/ast.rb, line 73
def simplify
  @children = children.map { |c| c.simplify }
  return self
end
to_a() click to toggle source

Return an array representation for the node

# File lib/scoped_search/query_language/ast.rb, line 79
def to_a
  [@operator] + @children.map { |c| c.to_a }
end

Public Class Methods

new(operator, children) click to toggle source
# File lib/scoped_search/query_language/ast.rb, line 67
def initialize(operator, children) # :nodoc
  @operator = operator
  @children = children
end