module Grably::Core::TaskExtensions::Jobs

# Jobs @see Grably::Core::Job

Public Instance Methods

execute_job_with_args(args, job_class, meth) click to toggle source
# File lib/grably/core/task/jobs.rb, line 16
def execute_job_with_args(args, job_class, meth)
  working_dir = job_dir(task_dir, meth.to_s)
  FileUtils.mkdir_p(working_dir)
  job_class.new.run(self, working_dir, *args)
end
job_dir(base_dir, job_name) click to toggle source

Create working directory for instantiated job inside task directory @param [String] base_dir task working directory @param [String] job_name Grably::Job call name @return [String] job working directory

# File lib/grably/core/task/jobs.rb, line 26
def job_dir(base_dir, job_name)
  # All this flow is working under assumption that all task jobs called
  # in same order. We store counter for each job in Task instance and
  # it updated throug all task live time. Each time task instance is
  # recreated we use frech (zero) counter
  counter = (jobs[job_name] || -1) + 1
  jobs[job_name] = counter
  name = [job_name, counter.to_s.rjust(3, '0')].join('-')
  File.join(base_dir, name)
end
jobs() click to toggle source
# File lib/grably/core/task/jobs.rb, line 37
def jobs
  @jobs ||= {}
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/grably/core/task/jobs.rb, line 7
def method_missing(meth, *args, &block)
  job_class = find_job_class(meth.to_s)
  if job_class
    execute_job_with_args(args, job_class, meth)
  else
    super
  end
end
respond_to_missing?(meth, include_private = false) click to toggle source
Calls superclass method
# File lib/grably/core/task/jobs.rb, line 41
def respond_to_missing?(meth, include_private = false)
  find_job_class(meth) || super
end

Private Instance Methods

find_job_class(name) click to toggle source
# File lib/grably/core/task/jobs.rb, line 47
def find_job_class(name)
  n = name.to_sym
  all_classes = Grably::Job.jobs.flat_map do |c|
    ObjectSpace.each_object(Class).select { |klass| klass <= c }
  end

  all_classes.find { |c| c.job_call_name == n }
end