class Bricolage::JobDAG
Public Class Methods
build(jobnets)
click to toggle source
# File lib/bricolage/jobnet.rb, line 95 def JobDAG.build(jobnets) graph = new jobnets.each do |net| graph.merge! net end graph.fix graph end
new()
click to toggle source
# File lib/bricolage/jobnet.rb, line 104 def initialize @deps = Hash.new { Array.new } # {JobRef => [JobRef]} (dest->srcs) end
Public Instance Methods
fix()
click to toggle source
# File lib/bricolage/jobnet.rb, line 122 def fix @deps.freeze check_cycle check_orphan end
merge!(net)
click to toggle source
# File lib/bricolage/jobnet.rb, line 116 def merge!(net) net.each_dependencies do |ref, deps| @deps[ref] |= deps end end
sequential_jobs()
click to toggle source
# File lib/bricolage/jobnet.rb, line 128 def sequential_jobs tsort.reject {|ref| ref.dummy? } end
to_hash()
click to toggle source
# File lib/bricolage/jobnet.rb, line 108 def to_hash h = {} @deps.each do |dest, srcs| h[dest.to_s] = srcs.map(&:to_s) end h end
tsort_each_child(ref, &block)
click to toggle source
# File lib/bricolage/jobnet.rb, line 138 def tsort_each_child(ref, &block) @deps.fetch(ref).each(&block) end
tsort_each_node(&block)
click to toggle source
# File lib/bricolage/jobnet.rb, line 134 def tsort_each_node(&block) @deps.each_key(&block) end
Private Instance Methods
check_cycle()
click to toggle source
# File lib/bricolage/jobnet.rb, line 144 def check_cycle each_strongly_connected_component do |refs| unless refs.size == 1 cycle = (refs + [refs.first]).reverse.join(' -> ') raise ParameterError, "found cycle in the jobnet: #{cycle}" end end end
check_orphan()
click to toggle source
# File lib/bricolage/jobnet.rb, line 153 def check_orphan orphan_nodes.each do |ref| raise ParameterError, "found orphan job in the jobnet: #{ref.location}: #{ref}" end end
orphan_nodes()
click to toggle source
# File lib/bricolage/jobnet.rb, line 159 def orphan_nodes @deps.to_a.select {|ref, deps| deps.empty? and not ref.dummy? }.map {|ref, *| ref } end