Class: PseudoHiki::Utils::NodeCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/pseudohiki/utils.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&condition) ⇒ NodeCollector

Returns a new instance of NodeCollector.



17
18
19
20
# File 'lib/pseudohiki/utils.rb', line 17

def initialize(&condition)
  @nodes = []
  @condition = condition
end

Instance Attribute Details

#nodesObject (readonly)

Returns the value of attribute nodes.



9
10
11
# File 'lib/pseudohiki/utils.rb', line 9

def nodes
  @nodes
end

Class Method Details

.select(tree, &condition) ⇒ Object



11
12
13
14
15
# File 'lib/pseudohiki/utils.rb', line 11

def self.select(tree, &condition)
  collector = new(&condition)
  collector.visit(tree)
  collector.nodes
end

Instance Method Details

#visit(tree, memo = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/pseudohiki/utils.rb', line 22

def visit(tree, memo=nil)
  if @condition.call(tree)
    @nodes.push tree
  else
    tree.each do |node|
      node.accept(self, memo) if node.respond_to? :accept
    end
  end
end