class Course::Operation
Public Class Methods
call(*input, &block)
click to toggle source
# File lib/course/operation.rb, line 6 def call(*input, &block) new.call(*input, &block) end
inherited(child)
click to toggle source
# File lib/course/operation.rb, line 18 def inherited(child) child.instance_variable_set('@steps', @steps.clone) end
step(name = nil, **options, &block)
click to toggle source
# File lib/course/operation.rb, line 10 def step(name = nil, **options, &block) steps << Course::Step.new(name, block, **options) end
steps()
click to toggle source
# File lib/course/operation.rb, line 14 def steps @steps ||= [] end
Public Instance Methods
call(*input) { |result| ... }
click to toggle source
# File lib/course/operation.rb, line 23 def call(*input, &block) execute_steps(*input, &block) return yield result if block_given? result end
result()
click to toggle source
# File lib/course/operation.rb, line 29 def result Course::Result.new(output: @output, failure: @failure) end
Private Instance Methods
execute(next_input, step)
click to toggle source
# File lib/course/operation.rb, line 45 def execute(next_input, step) if step.method? execute_step(method(step.target), *next_input) elsif step.block? execute_step(step.block, *next_input) else execute_operation(step.target, *next_input) end end
execute_operation(klass, *input)
click to toggle source
# File lib/course/operation.rb, line 63 def execute_operation(klass, *input) klass.call(*input) do |res| res.on_success do |output| return output end res.on_fail do |err| raise FailureError, err end end end
execute_step(next_step, *input)
click to toggle source
# File lib/course/operation.rb, line 55 def execute_step(next_step, *input) if input.is_a?(Array) && (next_step.arity == input.count || next_step.arity == -1) next_step.call(*input) else next_step.call(input) end end
execute_steps(*input)
click to toggle source
# File lib/course/operation.rb, line 39 def execute_steps(*input) @output = self.class.steps.inject(input, &method(:execute)) rescue FailureError => e @failure = e.failure end
fail(type, data = nil)
click to toggle source
# File lib/course/operation.rb, line 35 def fail(type, data = nil) raise FailureError, Failure.new(type, data) end