class Gammo::XPath::AST::Filter

@!visibility private

Attributes

expr[R]
predicates[R]

Public Class Methods

new(expr, predicates: []) click to toggle source
# File lib/gammo/xpath/ast/path.rb, line 10
def initialize(expr, predicates: [])
  @expr = expr
  @predicates = predicates
end

Public Instance Methods

evaluate(context) click to toggle source
# File lib/gammo/xpath/ast/path.rb, line 15
def evaluate(context)
  value = expr.evaluate(context).to_node_set_value(context)
  node_set = value.to_node_set(context)
  predicates.each do |predicate|
    new_node_set = NodeSet.new
    node_set.each do |node|
      context.node = node
      context.position += 1
      new_node_set << node if predicate.evaluate(context)
    end
    node_set.replace(new_node_set)
  end
  value
end