Top Level Namespace

Defined Under Namespace

Modules: Transflow

Instance Method Summary collapse

Instance Method Details

#Transflow(options = {}, &block) ⇒ Object

Define a business transaction flow.

A business transaction flow is a simple composition of callable objects that receive an input and produce an output. Steps are registered in the same order they are defined within the DSL and that’s also the order of execution.

Initial input is sent to the first step, its output is sent to the second step and so on.

Every step can become a publisher, which means you can broadcast results from any step and subscribe event listeners to individual steps. This gives you a flexible way of responding to successful or failed execution of individual steps.

Examples:

container = { do_one: some_obj, do_two: some_obj }

my_business_flow = Transflow(container: container) do
  step(:one, with: :do_one) { step(:two, with: :do_two }
end

my_business_flow[some_input]

# with events

my_business_flow = Transflow(container: container) do
  step(:one, with: :do_one) { step(:two, with: :do_two, publish: true) }
end

class Listener
  def self.do_two_success(*args)
    puts ":do_two totally worked and produced: #{args.inspect}!"
  end
end

my_business_flow.subscribe(do_two: Listener)

my_business_flow[some_input]


46
47
48
# File 'lib/transflow.rb', line 46

def Transflow(options = {}, &block)
  Transflow::FlowDSL.new(options, &block).call
end