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

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.

Parameters:

  • visitor (Visitor)

    Visitor to call

  • method (:preorder, :inorder, :postorder) (defaults to: :preorder)

    How to visit



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/filigree/visitor.rb', line 175

def visit(visitor, method = :preorder)
	case method
	when :preorder
		visitor.(self)
		children.compact.each { |child| child.visit(visitor, :preorder) }
	
	when :inorder
		nodes = [self]
	
		while node = nodes.shift
			nodes += node.children.compact
			visitor.(node)
		end
	
	when :postorder
		children.compact.each { |child| child.visit(visitor, :postorder) }
		visitor.(self)
	end
end