Module: ActiveRecord::TestFixtures

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record/fixtures.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#after_teardownObject



716
717
718
719
# File 'lib/active_record/fixtures.rb', line 716

def after_teardown
  super
  teardown_fixtures
end

#before_setupObject



711
712
713
714
# File 'lib/active_record/fixtures.rb', line 711

def before_setup
  setup_fixtures
  super
end

#enlist_fixture_connectionsObject



893
894
895
# File 'lib/active_record/fixtures.rb', line 893

def enlist_fixture_connections
  ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection)
end

#run_in_transaction?Boolean

Returns:

  • (Boolean)


838
839
840
841
# File 'lib/active_record/fixtures.rb', line 838

def run_in_transaction?
  use_transactional_fixtures &&
    !self.class.uses_transaction?(method_name)
end

#setup_fixturesObject



843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
# File 'lib/active_record/fixtures.rb', line 843

def setup_fixtures
  return if ActiveRecord::Base.configurations.blank?

  if pre_loaded_fixtures && !use_transactional_fixtures
    raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'
  end

  @fixture_cache = {}
  @fixture_connections = []
  @@already_loaded_fixtures ||= {}

  # Load fixtures once and begin transaction.
  if run_in_transaction?
    if @@already_loaded_fixtures[self.class]
      @loaded_fixtures = @@already_loaded_fixtures[self.class]
    else
      @loaded_fixtures = load_fixtures
      @@already_loaded_fixtures[self.class] = @loaded_fixtures
    end
    @fixture_connections = enlist_fixture_connections
    @fixture_connections.each do |connection|
      connection.begin_transaction joinable: false
    end
  # Load fixtures for every test.
  else
    ActiveRecord::FixtureSet.reset_cache
    @@already_loaded_fixtures[self.class] = nil
    @loaded_fixtures = load_fixtures
  end

  # Instantiate fixtures for every test if requested.
  instantiate_fixtures if use_instantiated_fixtures
end

#teardown_fixturesObject



877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
# File 'lib/active_record/fixtures.rb', line 877

def teardown_fixtures
  return if ActiveRecord::Base.configurations.blank?

  # Rollback changes if a transaction is active.
  if run_in_transaction?
    @fixture_connections.each do |connection|
      connection.rollback_transaction if connection.transaction_open?
    end
    @fixture_connections.clear
  else
    ActiveRecord::FixtureSet.reset_cache
  end

  ActiveRecord::Base.clear_active_connections!
end