class Deptree::Visitor

Public Class Methods

each(roots, &block) click to toggle source
# File lib/deptree/visitor.rb, line 5
def self.each(roots, &block)
  new(roots).visit(&block)
end
new(roots) click to toggle source
# File lib/deptree/visitor.rb, line 9
def initialize(roots)
  @roots = roots
end

Public Instance Methods

visit(&block) click to toggle source
# File lib/deptree/visitor.rb, line 13
def visit(&block)
  sorted.each(&block)
end

Private Instance Methods

nodes() click to toggle source
# File lib/deptree/visitor.rb, line 23
def nodes
  queue = @roots.dup
  nodes = Set.new

  while (node = queue.shift) do
    unless nodes.include?(node)
      nodes.add(node)
      node.prerequisites.each { |child| queue.push(child) }
    end
  end

  nodes
end
sorted() click to toggle source
# File lib/deptree/visitor.rb, line 19
def sorted
  Kahn.new(nodes).topsort
end