class Pallets::Graph

Attributes

nodes[R]

Public Class Methods

new() click to toggle source
# File lib/pallets/graph.rb, line 7
def initialize
  @nodes = {}
end

Public Instance Methods

add(node, dependencies) click to toggle source
# File lib/pallets/graph.rb, line 11
def add(node, dependencies)
  raise WorkflowError, "Task #{node} is already defined in this workflow. "\
                       "Use `task '#{node}', as: 'FooBar'` to define an "\
                       "alias and reuse task" if nodes.key?(node)

  nodes[node] = dependencies
end
each() { |node, parents(node)| ... } click to toggle source
# File lib/pallets/graph.rb, line 27
def each
  return enum_for(__method__) unless block_given?

  tsort_each do |node|
    yield(node, parents(node))
  end
end
empty?() click to toggle source
# File lib/pallets/graph.rb, line 23
def empty?
  nodes.empty?
end
parents(node) click to toggle source
# File lib/pallets/graph.rb, line 19
def parents(node)
  nodes[node]
end

Private Instance Methods

tsort_each_child(node, &block) click to toggle source
# File lib/pallets/graph.rb, line 43
def tsort_each_child(node, &block)
  nodes.fetch(node).each(&block)
rescue KeyError
  raise WorkflowError, "Task #{node} is marked as a dependency but not defined"
end
tsort_each_node(&block) click to toggle source
# File lib/pallets/graph.rb, line 39
def tsort_each_node(&block)
  nodes.each_key(&block)
end