Module: Filigree::Visitable
- Defined in:
- lib/filigree/visitor.rb
Overview
This module provides a default implementation of three common traversal patterns: pre-order, post-order, and in-order (level-order). The including class must implement the ‘children` function.
Instance Method Summary collapse
-
#visit(visitor, method = :preorder) ⇒ void
Visit this object with the provided visitor in pre-, post-, or in-order traversal.
Instance Method Details
#visit(visitor, method = :preorder) ⇒ void
This method returns an undefined value.
Visit this object with the provided visitor in pre-, post-, or in-order traversal.
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/filigree/visitor.rb', line 237 def visit(visitor, method = :preorder) case method when :preorder visitor.visit(self) children.flatten.compact.each { |child| child.visit(visitor, :preorder) } when :inorder nodes = [self] while node = nodes.shift nodes += node.children.flatten.compact visitor.visit(node) end when :postorder children.flatten.compact.each { |child| child.visit(visitor, :postorder) } visitor.visit(self) end end |