class Tzu::Step

Constants

DOUBLE_MUTATOR

Attributes

klass[R]
single_mutator[R]
splat_mutator[R]

Public Class Methods

new(klass) click to toggle source
# File lib/tzu/step.rb, line 8
def initialize(klass)
  @klass = klass
  @invoke_method = :run
end

Public Instance Methods

as(name) click to toggle source
# File lib/tzu/step.rb, line 38
def as(name)
  @name = name
end
invoke_with(method) click to toggle source
# File lib/tzu/step.rb, line 42
def invoke_with(method)
  @invoke_method = method
end
name() click to toggle source
# File lib/tzu/step.rb, line 23
def name
  return @name if @name && @name.is_a?(Symbol)
  @klass.to_s.split('::').last.symbolize
end
receives(&block) click to toggle source
# File lib/tzu/step.rb, line 28
def receives(&block)
  double_mutator_error if splat?
  @single_mutator = block
end
receives_many(&block) click to toggle source
# File lib/tzu/step.rb, line 33
def receives_many(&block)
  double_mutator_error if @single_mutator.present?
  @splat_mutator = block
end
run(*params, prior_results) click to toggle source
# File lib/tzu/step.rb, line 13
def run(*params, prior_results)
  # Forward parameters as splat if no mutators are defined
  return @klass.send(@invoke_method, *params) if mutator.nil?

  command_params = process(*params, prior_results)

  return @klass.send(@invoke_method, command_params) unless splat?
  @klass.send(@invoke_method, *command_params)
end

Private Instance Methods

double_mutator_error() click to toggle source
# File lib/tzu/step.rb, line 48
def double_mutator_error
  raise Tzu::InvalidSequence.new(DOUBLE_MUTATOR)
end
mutator() click to toggle source
# File lib/tzu/step.rb, line 52
def mutator
  @single_mutator || @splat_mutator
end
process(*params, prior_results) click to toggle source
# File lib/tzu/step.rb, line 60
def process(*params, prior_results)
  instance_exec(*params, prior_results, &mutator)
end
splat?() click to toggle source
# File lib/tzu/step.rb, line 56
def splat?
  @splat_mutator.present?
end