class Bricolage::JobNet::Parser

Constants

DEPEND_PATTERN
START_PATTERN

Public Class Methods

new(jobnet_ref) click to toggle source
# File lib/bricolage/jobnet.rb, line 295
def initialize(jobnet_ref)
  @jobnet_ref = jobnet_ref
end

Public Instance Methods

parse_stream(io) click to toggle source
# File lib/bricolage/jobnet.rb, line 299
def parse_stream(io)
  net = JobNet.new(@jobnet_ref, Location.for_io(io))
  foreach_edge(io) do |src, dest|
    net.add_edge src, dest
  end
  net
end

Private Instance Methods

foreach_edge(f) { |src, dest| ... } click to toggle source
# File lib/bricolage/jobnet.rb, line 314
def foreach_edge(f)
  default_src = nil
  f.each do |line|
    text = line.sub(/\#.*/, '').strip
    next if text.empty?
    loc = Location.for_io(f)

    if m = DEPEND_PATTERN.match(text)
      src = (m[1] ? ref(m[1], loc) : default_src) or
          raise ParameterError, "syntax error at #{loc}: '->' must follow any job"
      dest = ref(m[2], loc)
      yield src, dest
      default_src = dest

    elsif m = START_PATTERN.match(text)
      dest = ref(m[1], loc)
      yield @jobnet_ref.start_ref, dest
      default_src = dest

    else
      raise ParameterError, "syntax error at #{loc}: #{line.strip.inspect}"
    end
  end
end
ref(ref_str, location) click to toggle source
# File lib/bricolage/jobnet.rb, line 339
def ref(ref_str, location)
  Ref.parse(ref_str, @jobnet_ref.subsystem, location)
end