Class: Taskinator::Definition::Builder
- Inherits:
-
Object
- Object
- Taskinator::Definition::Builder
- Defined in:
- lib/taskinator/definition/builder.rb
Instance Attribute Summary collapse
-
#args ⇒ Object
readonly
Returns the value of attribute args.
-
#builder_options ⇒ Object
readonly
Returns the value of attribute builder_options.
-
#definition ⇒ Object
readonly
Returns the value of attribute definition.
-
#process ⇒ Object
readonly
Returns the value of attribute process.
Instance Method Summary collapse
-
#concurrent(complete_on = CompleteOn::Default, options = {}, &block) ⇒ Object
defines a sub process of tasks which are executed concurrently.
-
#for_each(method, options = {}, &block) ⇒ Object
(also: #transform)
dynamically defines tasks, using the given @iterator method the definition will be evaluated for each yielded item.
-
#initialize(process, definition, *args) ⇒ Builder
constructor
A new instance of Builder.
-
#job(job, options = {}) ⇒ Object
defines a task which executes the given @job which is expected to implement a perform method either as a class or instance method.
- #option?(key, &block) ⇒ Boolean
-
#sequential(options = {}, &block) ⇒ Object
defines a sub process of tasks which are executed sequentially.
-
#sub_process(definition, options = {}) ⇒ Object
defines a sub process task, for the given @definition the definition specified must have input compatible arguments to the current definition.
-
#task(method, options = {}) ⇒ Object
defines a task which executes the given @method.
Constructor Details
#initialize(process, definition, *args) ⇒ Builder
Returns a new instance of Builder.
10 11 12 13 14 15 16 |
# File 'lib/taskinator/definition/builder.rb', line 10 def initialize(process, definition, *args) @process = process @definition = definition = args.last.is_a?(Hash) ? args.pop : {} @args = args @executor = Taskinator::Executor.new(@definition) end |
Instance Attribute Details
#args ⇒ Object (readonly)
Returns the value of attribute args.
7 8 9 |
# File 'lib/taskinator/definition/builder.rb', line 7 def args @args end |
#builder_options ⇒ Object (readonly)
Returns the value of attribute builder_options.
8 9 10 |
# File 'lib/taskinator/definition/builder.rb', line 8 def end |
#definition ⇒ Object (readonly)
Returns the value of attribute definition.
6 7 8 |
# File 'lib/taskinator/definition/builder.rb', line 6 def definition @definition end |
#process ⇒ Object (readonly)
Returns the value of attribute process.
5 6 7 |
# File 'lib/taskinator/definition/builder.rb', line 5 def process @process end |
Instance Method Details
#concurrent(complete_on = CompleteOn::Default, options = {}, &block) ⇒ Object
defines a sub process of tasks which are executed concurrently
31 32 33 34 35 36 |
# File 'lib/taskinator/definition/builder.rb', line 31 def concurrent(complete_on=CompleteOn::Default, ={}, &block) raise ArgumentError, 'block' unless block_given? sub_process = Process.define_concurrent_process_for(@definition, complete_on, ) Builder.new(define_sub_process_task(@process, sub_process, ), @definition, *@args).instance_eval(&block) end |
#for_each(method, options = {}, &block) ⇒ Object Also known as: transform
dynamically defines tasks, using the given @iterator method the definition will be evaluated for each yielded item
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/taskinator/definition/builder.rb', line 40 def for_each(method, ={}, &block) raise ArgumentError, 'method' if method.nil? raise NoMethodError, method unless @executor.respond_to?(method) raise ArgumentError, 'block' unless block_given? # # `for_each` is an exception, since it invokes the definition # in order to yield elements to the builder, and any options passed # are included with the builder options # method_args = .any? ? [*@args, ] : @args @executor.send(method, *method_args) do |*args| Builder.new(@process, @definition, *args).instance_eval(&block) end end |
#job(job, options = {}) ⇒ Object
defines a task which executes the given @job which is expected to implement a perform method either as a class or instance method
68 69 70 71 72 73 |
# File 'lib/taskinator/definition/builder.rb', line 68 def job(job, ={}) raise ArgumentError, 'job' if job.nil? raise ArgumentError, 'job' unless job.methods.include?(:perform) || job.instance_methods.include?(:perform) define_job_task(@process, job, @args, ) end |
#option?(key, &block) ⇒ Boolean
18 19 20 |
# File 'lib/taskinator/definition/builder.rb', line 18 def option?(key, &block) yield if [key] end |
#sequential(options = {}, &block) ⇒ Object
defines a sub process of tasks which are executed sequentially
23 24 25 26 27 28 |
# File 'lib/taskinator/definition/builder.rb', line 23 def sequential(={}, &block) raise ArgumentError, 'block' unless block_given? sub_process = Process.define_sequential_process_for(@definition, ) Builder.new(define_sub_process_task(@process, sub_process, ), @definition, *@args).instance_eval(&block) end |
#sub_process(definition, options = {}) ⇒ Object
defines a sub process task, for the given @definition the definition specified must have input compatible arguments to the current definition
78 79 80 81 82 83 84 85 86 |
# File 'lib/taskinator/definition/builder.rb', line 78 def sub_process(definition, ={}) raise ArgumentError, 'definition' if definition.nil? raise ArgumentError, "#{definition.name} does not extend the #{Definition.name} module" unless definition.kind_of?(Definition) # TODO: decide whether the sub process to dynamically receive arguments sub_process = definition.create_sub_process(*@args, ()) Builder.new(define_sub_process_task(@process, sub_process, ), definition, *@args) end |
#task(method, options = {}) ⇒ Object
defines a task which executes the given @method
59 60 61 62 63 64 |
# File 'lib/taskinator/definition/builder.rb', line 59 def task(method, ={}) raise ArgumentError, 'method' if method.nil? raise NoMethodError, method unless @executor.respond_to?(method) define_step_task(@process, method, @args, ) end |