module Aggro::Saga

Public: Mixin to turn a PORO into an Aggro saga.

Public Instance Methods

bindings() click to toggle source
# File lib/aggro/saga.rb, line 15
def bindings
  @runner.bindings
end
default_filters() click to toggle source
# File lib/aggro/saga.rb, line 19
def default_filters
  { correlation_id: correlation_id }
end
saga_id() click to toggle source
# File lib/aggro/saga.rb, line 23
def saga_id
  @saga_id ||= SecureRandom.uuid
end
start() click to toggle source
# File lib/aggro/saga.rb, line 27
def start
  fail 'Saga is not valid' unless valid?

  promise = SagaStatus.new(saga_id)

  message = Message::StartSaga.new Aggro.local_node.id, saga_id, to_details
  response = primary_node.client.post message

  if response.is_a? Message::OK
    promise
  else
    fail 'Saga could not be started'
  end
end

Private Instance Methods

handler_for_step(step_name) click to toggle source
# File lib/aggro/saga.rb, line 71
def handler_for_step(step_name)
  steps[step_name]
end
handles_step?(step_name) click to toggle source
# File lib/aggro/saga.rb, line 75
def handles_step?(step_name)
  steps.key? step_name
end
initial(step_name = nil) click to toggle source
# File lib/aggro/saga.rb, line 79
def initial(step_name = nil)
  step_name ? @initial = step_name : @initial
end
primary_node() click to toggle source
# File lib/aggro/saga.rb, line 44
def primary_node
  @primary_node ||= Locator.new(saga_id).primary_node
end
reject(reason = nil) click to toggle source
# File lib/aggro/saga.rb, line 52
def reject(reason = nil)
  fail 'Runner not set' unless @runner

  @runner.reject reason
end
resolve(value = nil) click to toggle source
# File lib/aggro/saga.rb, line 58
def resolve(value = nil)
  fail 'Runner not set' unless @runner

  @runner.resolve value
end
step(step_name, &block) click to toggle source
# File lib/aggro/saga.rb, line 83
def step(step_name, &block)
  steps[step_name] = block
end
steps() click to toggle source
# File lib/aggro/saga.rb, line 89
def steps
  Aggro.step_handlers[name]
end
to_details() click to toggle source
# File lib/aggro/saga.rb, line 48
def to_details
  { name: model_name.name, args: serialized_attributes }
end
transition(step_name, *args) click to toggle source
# File lib/aggro/saga.rb, line 64
def transition(step_name, *args)
  fail 'Runner not set' unless @runner

  @runner.transition step_name, *args
end