class OTB::Queue
Attributes
jobs[RW]
jobs_parsed[RW]
Public Class Methods
new(string:nil)
click to toggle source
usign job:nil for stability & latter flexibity
Idea being you could also have string:nil then you could initialized with Job objects in the jobs: or you could initialized with String objects in the string:
# File lib/OTB/queue.rb, line 9 def initialize(string:nil) @jobs = string @jobs_parsed = OTB::Job.parse(@jobs) unless string.nil? end
Public Instance Methods
sort_sequence()
click to toggle source
# File lib/OTB/queue.rb, line 14 def sort_sequence case @jobs when '' '' when nil raise JobQueueError.no_input_error else check_self_dependency(@jobs_parsed) check_circular_dependency(@jobs_parsed) sort_jobs_to_sequence(@jobs_parsed) end end
Private Instance Methods
check_circular_dependency(jobs_parsed)
click to toggle source
# File lib/OTB/queue.rb, line 37 def check_circular_dependency(jobs_parsed) hash_jobs_with_depencecies = {} jobs_parsed.each_with_index do |job_dependency, index| [job_dependency].each do |job, dependency| if hash_jobs_with_depencecies.keys.include?(dependency) && hash_jobs_with_depencecies.values.include?(job) raise JobQueueError.circular_dependecy_error end hash_jobs_with_depencecies[job] = dependency unless dependency.empty? end end end
check_self_dependency(jobs_parsed)
click to toggle source
# File lib/OTB/queue.rb, line 29 def check_self_dependency(jobs_parsed) jobs_parsed.each do |job, dependency| if job == dependency raise JobQueueError.self_dependency_error end end end
sort_jobs_to_sequence(jobs_parsed)
click to toggle source
# File lib/OTB/queue.rb, line 50 def sort_jobs_to_sequence(jobs_parsed) sequence = [] jobs_parsed.each do |job, dependency| if dependency.empty? sequence << job unless sequence.include?(job) elsif sequence.include?(job) index = sequence.find_index(job) sequence.insert(index, dependency) else sequence << dependency unless sequence.include?(dependency) sequence << job unless sequence.include?(job) end end sequence.join(', ') end