Sha256: 64efc26e3f6b38fa2c079f9368f3158ce124d5ad38ddd111213a1b9d1a8a94ce
Contents?: true
Size: 962 Bytes
Versions: 4
Compression:
Stored size: 962 Bytes
Contents
require 'tsort' module Pallets class Graph include TSort def initialize @nodes = {} end 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 def parents(node) nodes[node] end def empty? nodes.empty? end def each return enum_for(__method__) unless block_given? tsort_each do |node| yield(node, parents(node)) end end private attr_reader :nodes def tsort_each_node(&block) nodes.each_key(&block) end 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 end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
pallets-0.11.0 | lib/pallets/graph.rb |
pallets-0.10.0 | lib/pallets/graph.rb |
pallets-0.9.0 | lib/pallets/graph.rb |
pallets-0.8.0 | lib/pallets/graph.rb |