class Bricolage::JobNet
Attributes
ref[R]
Public Class Methods
load(path, ref = JobNetRef.for_path(path))
click to toggle source
# File lib/bricolage/jobnet.rb, line 165 def JobNet.load(path, ref = JobNetRef.for_path(path)) File.open(path) {|f| Parser.new(ref).parse_stream(f) } rescue SystemCallError => err raise ParameterError, "could not load jobnet: #{path} (#{err.message})" end
load_multiple_jobs(pathes, ref = JobNetRef.for_job_path(pathes.first))
click to toggle source
# File lib/bricolage/jobnet.rb, line 177 def JobNet.load_multiple_jobs(pathes, ref = JobNetRef.for_job_path(pathes.first)) jobnet_script = StringIO.new prev = nil pathes.each do |path| jobnet_script.print '-> ' if prev case path.extname when '.job' r = JobRef.for_path(path) jobnet_script.puts r.to_s when '.jobnet' r = JobNetRef.for_job_path(path) jobnet_script.puts r.to_s else raise ParameterError, "is not a job nor a jobnet: #{path}" end prev = r end jobnet_script.rewind Parser.new(ref).parse_stream(jobnet_script) end
load_single_job(path, ref = JobNetRef.for_job_path(path))
click to toggle source
# File lib/bricolage/jobnet.rb, line 173 def JobNet.load_single_job(path, ref = JobNetRef.for_job_path(path)) load_multiple_jobs([path], ref) end
new(ref, location)
click to toggle source
# File lib/bricolage/jobnet.rb, line 198 def initialize(ref, location) @ref = ref @location = location @flow = {} # Ref => [Ref] (src->dest) @deps = {} # Ref => [Ref] (dest->src) end
Public Instance Methods
add_edge(src, dest)
click to toggle source
# File lib/bricolage/jobnet.rb, line 223 def add_edge(src, dest) (@flow[src] ||= []).push dest (@deps[dest] ||= []).push src end
each_dependencies() { |dest, srcs| ... }
click to toggle source
# File lib/bricolage/jobnet.rb, line 271 def each_dependencies @deps.each do |ref, deps| dest = (ref.net? ? ref.start : ref) srcs = deps.map {|r| r.net? ? r.end : r } yield dest, srcs end end
end()
click to toggle source
# File lib/bricolage/jobnet.rb, line 215 def end @ref.end_ref end
fix()
click to toggle source
Adds dummy dependencies (@start and @end) to fix up all jobs into one DAG beginning with @start and ending with @end
# File lib/bricolage/jobnet.rb, line 254 def fix refs.each do |ref| next if ref.dummy? unless @deps[ref] (@flow[self.start] ||= []).push ref @deps[ref] = [self.start] end unless @flow[ref] (@flow[ref] ||= []).push self.end (@deps[self.end] ||= []).push ref end end @deps[self.start] ||= [] @flow.freeze @deps.freeze end
inspect()
click to toggle source
# File lib/bricolage/jobnet.rb, line 205 def inspect "\#<#{self.class} #{ref}>" end
name()
click to toggle source
# File lib/bricolage/jobnet.rb, line 219 def name @ref.to_s end
net_refs()
click to toggle source
# File lib/bricolage/jobnet.rb, line 248 def net_refs @deps.keys.select {|ref| ref.net? } end
refs()
click to toggle source
# File lib/bricolage/jobnet.rb, line 244 def refs @flow.keys | @flow.values.flatten end
start()
click to toggle source
# File lib/bricolage/jobnet.rb, line 211 def start @ref.start_ref end
to_deps_hash()
click to toggle source
# File lib/bricolage/jobnet.rb, line 236 def to_deps_hash h = {} @deps.each do |dest, srcs| h[dest.to_s] = srcs.map(&:to_s) end h end
to_hash()
click to toggle source
# File lib/bricolage/jobnet.rb, line 228 def to_hash h = {} @flow.each do |src, dests| h[src.to_s] = dests.map(&:to_s) end h end