Module: Sequel::TestAfterCommit

Defined in:
lib/sequel_test_after_commit/version.rb,
lib/sequel/extensions/test_after_commit.rb

Constant Summary collapse

VERSION =
'0.0.2'

Instance Method Summary collapse

Instance Method Details

#after_commit(opts = OPTS, &block) ⇒ Object

Raises:

  • (Error)


23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/sequel/extensions/test_after_commit.rb', line 23

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)
      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) ⇒ Object

Raises:

  • (Error)


38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sequel/extensions/test_after_commit.rb', line 38

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) ⇒ Object

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



52
# File 'lib/sequel/extensions/test_after_commit.rb', line 52

def after_transaction_commit(conn);   end

#after_transaction_rollback(conn) ⇒ Object



53
# File 'lib/sequel/extensions/test_after_commit.rb', line 53

def after_transaction_rollback(conn); end

#remove_transaction(conn, committed) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/sequel/extensions/test_after_commit.rb', line 3

def remove_transaction(conn, committed)
  level = savepoint_level(conn)

  if h = _trans(conn)
    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
  end

  super
end