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.4'

Instance Method Summary collapse

Instance Method Details

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

Raises:

  • (Error)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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) ⇒ Object

Raises:

  • (Error)


44
45
46
47
48
49
50
51
52
53
54
55
# 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) ⇒ Object

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



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

def after_transaction_commit(conn);   end

#after_transaction_rollback(conn) ⇒ Object



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

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
22
23
24
25
26
27
# 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