class DatabaseCleaner::ActiveRecord::Transaction

Public Instance Methods

clean() click to toggle source
# File lib/database_cleaner/active_record/transaction.rb, line 29
def clean
  connection_class.connection_pool.connections.each do |connection|
    next unless connection.open_transactions > 0

    if connection.respond_to?(:rollback_transaction)
      connection.rollback_transaction
    else
      connection.rollback_db_transaction
    end

    # The below is for handling after_commit hooks.. see https://github.com/bmabey/database_cleaner/issues/99
    if connection.respond_to?(:rollback_transaction_records, true)
      connection.send(:rollback_transaction_records, true)
    end

    if connection_maintains_transaction_count?
      if connection.respond_to?(:decrement_open_transactions)
        connection.decrement_open_transactions
      else
        connection_class.__send__(:decrement_open_transactions)
      end
    end
  end
end
connection_maintains_transaction_count?() click to toggle source
# File lib/database_cleaner/active_record/transaction.rb, line 54
def connection_maintains_transaction_count?
  ActiveRecord::VERSION::MAJOR < 4
end
start() click to toggle source
# File lib/database_cleaner/active_record/transaction.rb, line 9
def start
  # Hack to make sure that the connection is properly setup for
  # the clean code.
  connection_class.connection.transaction{ }

  if connection_maintains_transaction_count?
    if connection_class.connection.respond_to?(:increment_open_transactions)
      connection_class.connection.increment_open_transactions
    else
      connection_class.__send__(:increment_open_transactions)
    end
  end
  if connection_class.connection.respond_to?(:begin_transaction)
    connection_class.connection.begin_transaction :joinable => false
  else
    connection_class.connection.begin_db_transaction
  end
end