class Rockflow::Flow

Attributes

payload[RW]
steps[RW]

Public Class Methods

new(payload = {}) click to toggle source
# File lib/rockflow/flow.rb, line 6
def initialize(payload = {})
  @steps = []
  @payload = payload
  setup
end

Public Instance Methods

concert() click to toggle source

Returns true or false depending if the flow raised any errors or violated any conditions. @return [TrueClass, FalseClass] returns true if no exception is raised else false.

# File lib/rockflow/flow.rb, line 21
def concert
  execute_steps.inject(true) do |result, elem|
    result && !elem.errors.any?
  end
end
concert!() click to toggle source

Returns all steps if successfull. If any error is raised inside the step it is raised. @return [Array] array of all defined steps in the flow.

# File lib/rockflow/flow.rb, line 29
def concert!
  execute_steps
  @steps.map do |step|
    step.errors
  end.flatten.each do |error|
    raise error
  end
end
execute_steps() click to toggle source
# File lib/rockflow/flow.rb, line 51
def execute_steps
  while !steps_finished?
    break if next_free_steps.blank?
    ::Parallel.each(next_free_steps, threads_or_processes.to_sym => Rockflow.configuration.thread_or_processes) do |step|
      begin
        step.execute_pre_conditions
        step.it_up unless step.failed?
        step.execute_post_conditions
        step.finish! unless step.failed?
      rescue => e
        step.fail!
        step.errors << e
        raise Parallel::Break, e.message
      end
    end
  end
  @steps
end
next_free_steps() click to toggle source
# File lib/rockflow/flow.rb, line 38
def next_free_steps
  @steps.select do |step|
    step.after_dependencies_finished? && !step.finished? && !step.failed?
  end
end
rock(klazz, opts = {}) click to toggle source
# File lib/rockflow/flow.rb, line 15
def rock(klazz, opts = {})
  @steps << klazz.new(self, opts)
end
setup() click to toggle source
# File lib/rockflow/flow.rb, line 12
def setup
end
steps_finished?() click to toggle source
# File lib/rockflow/flow.rb, line 44
def steps_finished?
  @steps.inject(true) do |result, elem|
    result = result && (elem.finished? || elem.failed?)
    result
  end
end

Private Instance Methods

threads_or_processes() click to toggle source
# File lib/rockflow/flow.rb, line 72
def threads_or_processes
  if Rockflow.configuration.use_threads
    :in_threads
  else
    :in_processes
  end
end