class Tumugi::TaskDefinition

Attributes

id[R]
opts[R]

Public Class Methods

define(id, opts={}, &block) click to toggle source
# File lib/tumugi/task_definition.rb, line 13
def self.define(id, opts={}, &block)
  td = Tumugi::TaskDefinition.new(id, opts)
  td.instance_eval(&block) if block_given?
  Tumugi.workflow.add_task(id, td)
  td
end
new(id, opts={}) click to toggle source
# File lib/tumugi/task_definition.rb, line 22
def initialize(id, opts={})
  @id = id
  @opts = { type: Tumugi::Task }.merge(opts)
  @params = {}
  @param_defaults = {}
  define_parent_parameter_methods
end

Public Instance Methods

event_block(task, event) click to toggle source
# File lib/tumugi/task_definition.rb, line 96
def event_block(task, event)
  callback = instance_variable_get("@on_#{event}")
  task.instance_eval(&callback)
end
instance() click to toggle source
# File lib/tumugi/task_definition.rb, line 30
def instance
  @task ||= create_task
end
output(outputs=[], &block) click to toggle source
# File lib/tumugi/task_definition.rb, line 60
def output(outputs=[], &block)
  @outputs ||= (block || outputs)
end
output_eval(task) click to toggle source
# File lib/tumugi/task_definition.rb, line 76
def output_eval(task)
  @out ||= @outputs.is_a?(Proc) ? task.instance_eval(&@outputs) : @outputs
end
param(name, opts={}) click to toggle source
# File lib/tumugi/task_definition.rb, line 34
def param(name, opts={})
  define_parameter_method(name)
  @params[name] = opts
end
param_auto_bind_enabled(v) click to toggle source
# File lib/tumugi/task_definition.rb, line 52
def param_auto_bind_enabled(v)
  @param_auto_bind_enabled = v
end
param_set(name, value=nil, &block) click to toggle source
# File lib/tumugi/task_definition.rb, line 47
def param_set(name, value=nil, &block)
  Tumugi::Logger.instance.warn("'param_set' is deprecated and will be removed in a future release. Use 'set' instead.")
  set(name, value, &block)
end
parent_task_class() click to toggle source
# File lib/tumugi/task_definition.rb, line 84
def parent_task_class
  if @opts[:type].is_a?(Class)
    @opts[:type]
  else
    Tumugi::Plugin.lookup_task(@opts[:type])
  end
end
required_tasks() click to toggle source
# File lib/tumugi/task_definition.rb, line 80
def required_tasks
  @required_tasks
end
requires(tasks) click to toggle source
# File lib/tumugi/task_definition.rb, line 56
def requires(tasks)
  @required_tasks = tasks
end
run(&block) click to toggle source
# File lib/tumugi/task_definition.rb, line 64
def run(&block)
  @run = block
end
run_block(task) click to toggle source
# File lib/tumugi/task_definition.rb, line 92
def run_block(task)
  task.instance_eval(&@run)
end
set(name, value=nil, &block) click to toggle source
# File lib/tumugi/task_definition.rb, line 39
def set(name, value=nil, &block)
  if block_given?
    @param_defaults[name] = block
  else
    @param_defaults[name] = value
  end
end

Private Instance Methods

create_task() click to toggle source
# File lib/tumugi/task_definition.rb, line 103
def create_task
  task = define_task.new
  raise "Invalid type: '#{@opts[:type]}'" unless task.is_a?(Tumugi::Task)
  task.id = @id
  task
end
define_event_callback_methods(task_class) click to toggle source
# File lib/tumugi/task_definition.rb, line 156
def define_event_callback_methods(task_class)
  td = self
  Event.all.each do |event|
    if instance_variable_get("@on_#{event}")
      task_class.class_eval do
        define_method(:"on_#{event}") do
          td.event_block(self, event)
        end
      end
    end
  end
end
define_output_method(task_class) click to toggle source
# File lib/tumugi/task_definition.rb, line 138
def define_output_method(task_class)
  td = self
  task_class.class_eval do
    define_method(:output) do
      td.output_eval(self)
    end
  end unless @outputs.nil?
end
define_parameter_method(name) click to toggle source
# File lib/tumugi/task_definition.rb, line 181
def define_parameter_method(name)
  instance_eval("def self.#{name}(value=nil, &block); set(:#{name}, value, &block); end")
end
define_parent_parameter_methods() click to toggle source
# File lib/tumugi/task_definition.rb, line 185
def define_parent_parameter_methods
  proxy = parent_task_class.merged_parameter_proxy
  proxy.params.each do |name, _|
    define_parameter_method(name)
  end
end
define_requires_method(task_class) click to toggle source
# File lib/tumugi/task_definition.rb, line 120
def define_requires_method(task_class)
  td = self
  task_class.class_eval do
    define_method(:requires) do
      reqs = td.required_tasks
      if reqs.nil?
        []
      elsif reqs.is_a?(Array)
        reqs.map { |t| Tumugi.workflow.find_task(t) }
      elsif reqs.is_a?(Hash)
        Hash[reqs.map { |k, t| [k, Tumugi.workflow.find_task(t)] }]
      else
        Tumugi.workflow.find_task(reqs)
      end
    end
  end
end
define_run_method(task_class) click to toggle source
# File lib/tumugi/task_definition.rb, line 147
def define_run_method(task_class)
  td = self
  task_class.class_eval do
    define_method(:run) do
      td.run_block(self)
    end
  end unless @run.nil?
end
define_task() click to toggle source
# File lib/tumugi/task_definition.rb, line 110
def define_task
  task_class = Class.new(parent_task_class)
  define_requires_method(task_class)
  define_output_method(task_class)
  define_run_method(task_class)
  define_event_callback_methods(task_class)
  setup_params(task_class)
  task_class
end
setup_params(task_class) click to toggle source
# File lib/tumugi/task_definition.rb, line 169
def setup_params(task_class)
  @params.each do |name, opts|
    task_class.param(name, opts)
  end
  @param_defaults.each do |name, value|
    task_class.set(name, value)
  end
  unless @param_auto_bind_enabled.nil?
    task_class.param_auto_bind_enabled(@param_auto_bind_enabled)
  end
end