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



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