class OtbJobQueue::JobsSequencer
Sequences jobs order based on their dependencies
Public Class Methods
new(parser)
click to toggle source
Creates a new instance of the JobsSequencer
with a parser as a param @param parser
# File lib/otb_job_queue/jobs_sequencer.rb, line 11 def initialize(parser) @parser = parser end
Public Instance Methods
call(jobs_input)
click to toggle source
Parses an input of jobs into a string or raises Errors @api public @return [String] correct sequence of jobs @example
sequencer = OtbJobQueue::JobsSequencer.new(OtbJobQueue::JobsParser) sequencer.call("a => ") #=> "a" sequencer.call("a => b\nb => c\nc => ") #=> 'cba'
# 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
Private Instance Methods
check_self_dependecies(jobs_to_sequence)
click to toggle source
Verifies if the jobs_to_sequence has self dependencies @api private @param [Hash] jobs to sequence hash @return [SelfDependencyError, void]
# File lib/otb_job_queue/jobs_sequencer.rb, line 36 def check_self_dependecies(jobs_to_sequence) jobs_to_sequence.each do |job, dependency| if job == dependency.first raise SelfDependencyError, "Jobs can't depend on themselves: #{job} => #{dependency.first}" end end end