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



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/filigree/visitor.rb', line 203

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