module TestProf::BeforeAll::Adapters::ActiveRecord
def all_connections
def all_connections @all_connections ||= if ::ActiveRecord::Base.respond_to? :connects_to ::ActiveRecord::Base.connection_handler.connection_pool_list(*POOL_ARGS).filter_map { |pool| begin pool.connection rescue *pool_connection_errors => error log_pool_connection_error(pool, error) nil end } else Array.wrap(::ActiveRecord::Base.connection) end end
def begin_transaction
def begin_transaction ::ActiveRecord::Base.connection_handler.connection_pool_list(:writing).each do |pool| pool.pin_connection!(true) end end
def begin_transaction
def begin_transaction @all_connections = nil all_connections.each do |connection| connection.begin_transaction(joinable: false) end end
def log_pool_connection_error(pool, error)
def log_pool_connection_error(pool, error) warn "Could not connect to pool #{pool.connection_class.name}. #{error.class}: #{error.message}" end
def pool_connection_errors
def pool_connection_errors @pool_connection_errors ||= [] end
def rollback_transaction
def rollback_transaction ::ActiveRecord::Base.connection_handler.connection_pool_list(:writing).each do |pool| pool.unpin_connection! end end
def rollback_transaction
def rollback_transaction all_connections.each do |connection| if connection.open_transactions.zero? warn "!!! before_all transaction has been already rollbacked and " \ "could work incorrectly" next end connection.rollback_transaction end end
def setup_fixtures(test_object)
def setup_fixtures(test_object) test_object.instance_eval do @@already_loaded_fixtures ||= {} @fixture_cache ||= {} config = ::ActiveRecord::Base if @@already_loaded_fixtures[self.class] @loaded_fixtures = @@already_loaded_fixtures[self.class] else @loaded_fixtures = load_fixtures(config) @@already_loaded_fixtures[self.class] = @loaded_fixtures end end end