123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::TestFixtures

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: activerecord/lib/active_record/fixtures.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

DSL Calls

included

[ GitHub ]


835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
# File 'activerecord/lib/active_record/fixtures.rb', line 835

included do
  class_attribute :fixture_path, :instance_writer => false
  class_attribute :fixture_table_names
  class_attribute :fixture_class_names
  class_attribute :use_transactional_fixtures
  class_attribute :use_instantiated_fixtures # true, false, or :no_instances
  class_attribute :pre_loaded_fixtures
  class_attribute :config

  self.fixture_table_names = []
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures = false
  self.pre_loaded_fixtures = false
  self.config = ActiveRecord::Base

  self.fixture_class_names = Hash.new do |h, fixture_set_name|
    h[fixture_set_name] = ActiveRecord::FixtureSet.default_fixture_model_name(fixture_set_name, self.config)
  end
end

Instance Attribute Details

#run_in_transaction?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 922

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

Instance Method Details

#after_teardown

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 830

def after_teardown
  super
  teardown_fixtures
end

#before_setup

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 825

def before_setup
  setup_fixtures
  super
end

#enlist_fixture_connections

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 973

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

#setup_fixtures(config = ActiveRecord::Base)

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 927

def setup_fixtures(config = ActiveRecord::Base)
  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(config)
      @@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(config)
  end

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

#teardown_fixtures

[ GitHub ]

  
# File 'activerecord/lib/active_record/fixtures.rb', line 959

def teardown_fixtures
  # 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