Class: EM::Synchrony::ActiveRecord::TransactionManager

Inherits:
ActiveRecord::ConnectionAdapters::TransactionManager
  • Object
show all
Defined in:
lib/em-synchrony/activerecord_4_2.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ TransactionManager

Returns a new instance of TransactionManager.



22
23
24
25
# File 'lib/em-synchrony/activerecord_4_2.rb', line 22

def initialize(*args)
  super
  @stack = Hash.new { |h, k| h[k] = [] }
end

Instance Method Details

#begin_transaction(options = {}) ⇒ Object

:nodoc:



35
36
37
38
39
40
41
42
43
44
# File 'lib/em-synchrony/activerecord_4_2.rb', line 35

def begin_transaction(options = {}) #:nodoc:
  transaction =
    if _current_stack.empty?
      ::ActiveRecord::ConnectionAdapters::RealTransaction.new(@connection, options)
    else
      ::ActiveRecord::ConnectionAdapters::SavepointTransaction.new(@connection, "active_record_#{Fiber.current.object_id}_#{open_transactions}", options)
    end
  _current_stack.push(transaction)
  transaction
end

#commit_transactionObject

:nodoc:



46
47
48
# File 'lib/em-synchrony/activerecord_4_2.rb', line 46

def commit_transaction #:nodoc:
  _current_stack.pop.commit
end

#current_transactionObject

:nodoc:



27
28
29
# File 'lib/em-synchrony/activerecord_4_2.rb', line 27

def current_transaction #:nodoc:
  _current_stack.last || NULL_TRANSACTION
end

#open_transactionsObject



31
32
33
# File 'lib/em-synchrony/activerecord_4_2.rb', line 31

def open_transactions
  _current_stack.size
end

#rollback_transactionObject

:nodoc:



50
51
52
# File 'lib/em-synchrony/activerecord_4_2.rb', line 50

def rollback_transaction #:nodoc:
  _current_stack.pop.rollback
end