Class: Bricolage::JobNet

Inherits:
Object
  • Object
show all
Defined in:
lib/bricolage/jobnet.rb,
lib/bricolage/jobnet.rb

Overview

reopen as namespace

Defined Under Namespace

Classes: FileLoader, JobNetRef, JobRef, Location, Parser, Ref

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ref, location) ⇒ JobNet

Returns a new instance of JobNet.



143
144
145
146
147
148
# File 'lib/bricolage/jobnet.rb', line 143

def initialize(ref, location)
  @ref = ref
  @location = location
  @flow = {}   # Ref => [Ref] (src->dest)
  @deps = {}   # Ref => [Ref] (dest->src)
end

Instance Attribute Details

#refObject (readonly)

Returns the value of attribute ref.



154
155
156
# File 'lib/bricolage/jobnet.rb', line 154

def ref
  @ref
end

Class Method Details

.load(path, ref = JobNetRef.for_path(path)) ⇒ Object



135
136
137
138
139
140
141
# File 'lib/bricolage/jobnet.rb', line 135

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

Instance Method Details

#add_edge(src, dest) ⇒ Object



168
169
170
171
# File 'lib/bricolage/jobnet.rb', line 168

def add_edge(src, dest)
  (@flow[src] ||= []).push dest
  (@deps[dest] ||= []).push src
end

#each_dependenciesObject



216
217
218
219
220
221
222
# File 'lib/bricolage/jobnet.rb', line 216

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

#endObject



160
161
162
# File 'lib/bricolage/jobnet.rb', line 160

def end
  @ref.end_ref
end

#fixObject

Adds dummy dependencies (@start and @end) to fix up all jobs into one DAG beginning with @start and ending with @end



199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/bricolage/jobnet.rb', line 199

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

#inspectObject



150
151
152
# File 'lib/bricolage/jobnet.rb', line 150

def inspect
  "\#<#{self.class} #{ref}>"
end

#nameObject



164
165
166
# File 'lib/bricolage/jobnet.rb', line 164

def name
  @ref.to_s
end

#net_refsObject



193
194
195
# File 'lib/bricolage/jobnet.rb', line 193

def net_refs
  @deps.keys.select {|ref| ref.net? }
end

#refsObject



189
190
191
# File 'lib/bricolage/jobnet.rb', line 189

def refs
  @flow.keys | @flow.values.flatten
end

#startObject



156
157
158
# File 'lib/bricolage/jobnet.rb', line 156

def start
  @ref.start_ref
end

#to_deps_hashObject



181
182
183
184
185
186
187
# File 'lib/bricolage/jobnet.rb', line 181

def to_deps_hash
  h = {}
  @deps.each do |dest, srcs|
    h[dest.to_s] = srcs.map(&:to_s)
  end
  h
end

#to_hashObject



173
174
175
176
177
178
179
# File 'lib/bricolage/jobnet.rb', line 173

def to_hash
  h = {}
  @flow.each do |src, dests|
    h[src.to_s] = dests.map(&:to_s)
  end
  h
end