Class: Twig::NodeTraverser

Inherits:
Object
  • Object
show all
Defined in:
lib/twig/node_traverser.rb

Instance Method Summary collapse

Constructor Details

#initialize(env, visitors = []) ⇒ NodeTraverser

Returns a new instance of NodeTraverser.



5
6
7
8
9
10
# File 'lib/twig/node_traverser.rb', line 5

def initialize(env, visitors = [])
  @env = env
  @visitors = {}

  visitors.each { |visitor| add_visitor(visitor) }
end

Instance Method Details

#add_visitor(visitor) ⇒ Object

Parameters:



13
14
15
16
# File 'lib/twig/node_traverser.rb', line 13

def add_visitor(visitor)
  @visitors[visitor.priority] ||= []
  @visitors[visitor.priority] << visitor
end

#traverse(node) ⇒ Object

Traverses a node and calls the registered visitors.

Parameters:



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/twig/node_traverser.rb', line 20

def traverse(node)
  @visitors = @visitors.sort.to_h

  @visitors.each_value do |visitors|
    visitors.each do |visitor|
      node = traverse_for_visitor(visitor, node)
    end
  end

  node
end