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