Class: OtbJobQueue::JobsSequencer

Inherits:
Object
  • Object
show all
Defined in:
lib/otb_job_queue/jobs_sequencer.rb

Overview

Sequences jobs order based on their dependencies

Defined Under Namespace

Classes: CircularDependencyError, SelfDependencyError

Instance Method Summary collapse

Constructor Details

#initialize(parser) ⇒ JobsSequencer

Creates a new instance of the JobsSequencer with a parser as a param

Parameters:

  • parser


11
12
13
# File 'lib/otb_job_queue/jobs_sequencer.rb', line 11

def initialize(parser)
  @parser = parser
end

Instance Method Details

#call(jobs_input) ⇒ String

Parses an input of jobs into a string or raises Errors

Examples:

sequencer = OtbJobQueue::JobsSequencer.new(OtbJobQueue::JobsParser)
sequencer.call("a => ") #=> "a"
sequencer.call("a => b\nb => c\nc => ") #=> 'cba'

Returns:

  • (String)

    correct sequence of jobs



22
23
24
25
26
27
28
# File 'lib/otb_job_queue/jobs_sequencer.rb', line 22

def call(jobs_input)
  jobs_to_sequence = @parser.call(jobs_input)
  check_self_dependecies(jobs_to_sequence)
  jobs_to_sequence.tsort.join
rescue TSort::Cyclic => error
  raise CircularDependencyError, "Jobs can't have circular dependencies: #{error.message}"
end