Module: OutsideTransaction::Connection

Defined in:
lib/outside_transaction.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



20
21
22
23
24
25
26
27
# File 'lib/outside_transaction.rb', line 20

def self.included(base)
  unless base.method_defined? :commit_db_transaction_without_outside_transaction
    base.alias_method_chain :commit_db_transaction, :outside_transaction
  end
  unless base.method_defined? :transaction_without_outside_transaction
    base.alias_method_chain :transaction, :outside_transaction
  end
end

Instance Method Details

#commit_db_transaction_with_outside_transactionObject



39
40
41
42
43
44
45
46
47
48
# File 'lib/outside_transaction.rb', line 39

def commit_db_transaction_with_outside_transaction
  outside_transaction_actions = @outside_transaction
  @outside_transaction = nil
  commit_db_transaction_without_outside_transaction
  if outside_transaction_actions
    outside_transaction_actions.each do |block|
      block.call
    end
  end
end

#outside_transaction(&block) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/outside_transaction.rb', line 29

def outside_transaction(&block)
  if block_given?
    if open_transactions == 0 || !::OutsideTransaction.enabled?
      block.call
    else
      (@outside_transaction ||= []) << block
    end
  end
end

#transaction_with_outside_transaction(*args, &block) ⇒ Object



50
51
52
53
54
# File 'lib/outside_transaction.rb', line 50

def transaction_with_outside_transaction(*args, &block)
  transaction_without_outside_transaction(*args, &block)
ensure
  @outside_transaction = nil if open_transactions == 0
end