module Cooperator

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/cooperator.rb, line 122
def self.included(base)
  base.include ClassMethods
end
new(context = Context.new) click to toggle source
# File lib/cooperator.rb, line 86
def initialize(context = Context.new)
  @_context = if context.is_a? Context
                context
              else
                Context.new context
              end
end
prepended(base) click to toggle source
# File lib/cooperator.rb, line 118
def self.prepended(base)
  base.extend ClassMethods
end

Public Instance Methods

commit(properties = {}) click to toggle source
# File lib/cooperator.rb, line 112
def commit(properties = {})
  properties.each do |key, value|
    context[key] = value
  end
end
context() click to toggle source
# File lib/cooperator.rb, line 82
def context
  @_context
end
cooperate(*actions) click to toggle source
# File lib/cooperator.rb, line 94
def cooperate(*actions)
  done = []

  actions.each do |action|
    action.perform context

    break if context.failure?

    done << action
  end

  if context.failure?
    done.reverse.each do |action|
      action.rollback context
    end
  end
end

Private Instance Methods

failure!(messages = {}) click to toggle source
# File lib/cooperator.rb, line 137
def failure!(messages = {})
  context.failure! messages
  throw :_finish
end
failure?() click to toggle source
# File lib/cooperator.rb, line 142
def failure?
  context.failure?
end
include?(property) click to toggle source
# File lib/cooperator.rb, line 146
def include?(property)
  context.include?(property)
end
success!() click to toggle source
# File lib/cooperator.rb, line 128
def success!
  context.success!
  throw :_finish
end
success?() click to toggle source
# File lib/cooperator.rb, line 133
def success?
  context.success?
end