module Sequel::TestAfterCommit

Constants

VERSION

Public Instance Methods

after_commit(opts=OPTS) { || ... } click to toggle source
# File lib/sequel/extensions/test_after_commit.rb, line 29
def after_commit(opts=OPTS, &block)
  raise Error, "must provide block to after_commit" unless block
  synchronize(opts[:server]) do |conn|
    if (h = _trans(conn)) && h[:in_after_commit].nil?
      raise Error, "cannot call after_commit in a prepared transaction" if h[:prepare]
      level = savepoint_level(conn)
      hooks = h[:after_commit] ||= {}
      hooks[level] ||= []
      hooks[level] << block
    else
      yield
    end
  end
end
after_rollback(opts=OPTS, &block) click to toggle source
# File lib/sequel/extensions/test_after_commit.rb, line 44
def after_rollback(opts=OPTS, &block)
  raise Error, "must provide block to after_rollback" unless block
  synchronize(opts[:server]) do |conn|
    if h = _trans(conn)
      raise Error, "cannot call after_rollback in a prepared transaction" if h[:prepare]
      level = savepoint_level(conn)
      hooks = h[:after_rollback] ||= {}
      hooks[level] ||= []
      hooks[level] << block
    end
  end
end
after_transaction_commit(conn) click to toggle source

The methods that usually trigger the callbacks become no-ops.

# File lib/sequel/extensions/test_after_commit.rb, line 58
def after_transaction_commit(conn);   end
after_transaction_rollback(conn) click to toggle source
# File lib/sequel/extensions/test_after_commit.rb, line 59
def after_transaction_rollback(conn); end
remove_transaction(conn, committed) click to toggle source
Calls superclass method
# File lib/sequel/extensions/test_after_commit.rb, line 3
def remove_transaction(conn, committed)
  level = savepoint_level(conn)

  if h = _trans(conn)
    begin
      h[:in_after_commit] = true

      if after_commit = h[:after_commit]
        if hooks = after_commit.delete(level)
          hooks.each(&:call) if committed
        end
      end

      if after_rollback = h[:after_rollback]
        if hooks = after_rollback.delete(level)
          hooks.each(&:call) unless committed
        end
      end
    ensure
      h.delete(:in_after_commit)
    end
  end
ensure
  super
end