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