class Rockflow::Step

Attributes

conditions[RW]
errors[RW]
flow[RW]
params[RW]
status[RW]

Public Class Methods

new(flow, opts = {}) click to toggle source
# File lib/rockflow/step.rb, line 5
def initialize(flow, opts = {})
  @flow = flow
  @after_dependencies = []
  @errors = []
  @params = opts[:params]
  @status = :not_started
  @conditions = opts[:conditions]
  add_after_dependencies(opts[:after])
end

Public Instance Methods

add_after_dependencies(deps = []) click to toggle source
# File lib/rockflow/step.rb, line 42
def add_after_dependencies(deps = [])
  [deps].flatten.each do |dep|
    @after_dependencies << dep
  end
end
add_payload(key, value) click to toggle source
# File lib/rockflow/step.rb, line 38
def add_payload(key, value)
  @flow.payload[key] = value
end
after_dependencies_finished?() click to toggle source
# File lib/rockflow/step.rb, line 48
def after_dependencies_finished?
  @after_dependencies.inject(true) do |result, elem|
    dependent_steps_running = !(@flow.steps.select do |step|
      step.class == elem && !step.finished?
    end.any?)
    result = result && dependent_steps_running
    result
  end
end
execute_post_conditions() click to toggle source
# File lib/rockflow/step.rb, line 72
def execute_post_conditions
  select_conditions(:post).each do |cond|
    exec_condition(cond, ::Rockflow::Errors::PostCondition)
  end
end
execute_pre_conditions() click to toggle source
# File lib/rockflow/step.rb, line 66
def execute_pre_conditions
  select_conditions(:pre).each do |cond|
    exec_condition(cond, ::Rockflow::Errors::PreCondition)
  end
end
fail!() click to toggle source
# File lib/rockflow/step.rb, line 30
def fail!
  @status = :failed
end
failed?() click to toggle source
# File lib/rockflow/step.rb, line 34
def failed?
  @status == :failed
end
finish!() click to toggle source
# File lib/rockflow/step.rb, line 22
def finish!
  @status = :finished
end
finished?() click to toggle source
# File lib/rockflow/step.rb, line 26
def finished?
  @status == :finished
end
it_up() click to toggle source
# File lib/rockflow/step.rb, line 15
def it_up
end
payload() click to toggle source
# File lib/rockflow/step.rb, line 18
def payload
  @flow.payload
end
select_conditions(pre_or_post) click to toggle source
# File lib/rockflow/step.rb, line 58
def select_conditions(pre_or_post)
  conditions.select do |cond|
    cond[pre_or_post.to_sym]
  end.map do |cond|
    cond[pre_or_post.to_sym]
  end rescue []
end

Private Instance Methods

exec_block_or_symbol(block_or_symbol, error) { || ... } click to toggle source
# File lib/rockflow/step.rb, line 86
def exec_block_or_symbol(block_or_symbol, error)
  if block_or_symbol.is_a? Proc
    yield
  elsif block_or_symbol.is_a? Symbol
    exec_method(block_or_symbol, error)
  end
end
exec_condition(block_or_symbol, error) click to toggle source
# File lib/rockflow/step.rb, line 80
def exec_condition(block_or_symbol, error)
  exec_block_or_symbol(block_or_symbol, error) do
    exec_condition_block(block_or_symbol, error)
  end
end
exec_condition_block(block, error) click to toggle source
# File lib/rockflow/step.rb, line 94
def exec_condition_block(block, error)
  unless block.call
    fail_execution(error)
  end
end
exec_method(method, error) click to toggle source
# File lib/rockflow/step.rb, line 100
def exec_method(method, error)
  unless self.step.send(method.to_sym)
    fail_execution(error)
  end
end
fail_execution(error) click to toggle source
# File lib/rockflow/step.rb, line 106
def fail_execution(error)
  self.fail!
  @errors << error.new(self)
end