class Burner::JobSet
This class understands how jobs fit together as a cohesive unit. It does not know how to use them, but it knows how to group them together in a logical manner following some simple rules, such as:
- Jobs in a set should have unique names (unless the name is blank) - Subsets of jobs can be extracted, by name, in constant time.
Public Class Methods
new(jobs = [])
click to toggle source
# File lib/burner/job_set.rb, line 22 def initialize(jobs = []) @jobs = Jobs.array(jobs).freeze assert_unique_job_names end
Public Instance Methods
jobs(names = nil)
click to toggle source
# File lib/burner/job_set.rb, line 28 def jobs(names = nil) return @jobs unless names Array(names).map do |name| job = named_jobs_by_name[name.to_s] raise JobNotFoundError, "#{name} was not declared as a job" unless job job end end
Private Instance Methods
assert_unique_job_names()
click to toggle source
# File lib/burner/job_set.rb, line 50 def assert_unique_job_names unique_job_names = Set.new named_jobs.each do |job| if unique_job_names.include?(job.name) raise DuplicateJobNameError, "job with name: #{job.name} already declared" end unique_job_names << job.name end nil end
named_jobs()
click to toggle source
# File lib/burner/job_set.rb, line 46 def named_jobs @named_jobs ||= @jobs.reject { |job| job.name == '' } end
named_jobs_by_name()
click to toggle source
# File lib/burner/job_set.rb, line 42 def named_jobs_by_name @named_jobs_by_name ||= named_jobs.each_with_object({}) { |job, memo| memo[job.name] = job } end