Methods
Classes and Modules
Module ActiveRecord::TestFixtures::ClassMethods
Public Class methods
included(base)
     # File activerecord/lib/active_record/fixtures.rb, line 811
811:     def self.included(base)
812:       base.class_eval do
813:         setup :setup_fixtures
814:         teardown :teardown_fixtures
815: 
816:         superclass_delegating_accessor :fixture_path
817:         superclass_delegating_accessor :fixture_table_names
818:         superclass_delegating_accessor :fixture_class_names
819:         superclass_delegating_accessor :use_transactional_fixtures
820:         superclass_delegating_accessor :use_instantiated_fixtures   # true, false, or :no_instances
821:         superclass_delegating_accessor :pre_loaded_fixtures
822: 
823:         self.fixture_table_names = []
824:         self.use_transactional_fixtures = false
825:         self.use_instantiated_fixtures = true
826:         self.pre_loaded_fixtures = false
827: 
828:         self.fixture_class_names = {}
829:       end
830: 
831:       base.extend ClassMethods
832:     end
Public Instance methods
run_in_transaction?()
     # File activerecord/lib/active_record/fixtures.rb, line 909
909:     def run_in_transaction?
910:       use_transactional_fixtures &&
911:         !self.class.uses_transaction?(method_name)
912:     end
setup_fixtures()
     # File activerecord/lib/active_record/fixtures.rb, line 914
914:     def setup_fixtures
915:       return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
916: 
917:       if pre_loaded_fixtures && !use_transactional_fixtures
918:         raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'
919:       end
920: 
921:       @fixture_cache = {}
922:       @@already_loaded_fixtures ||= {}
923: 
924:       # Load fixtures once and begin transaction.
925:       if run_in_transaction?
926:         if @@already_loaded_fixtures[self.class]
927:           @loaded_fixtures = @@already_loaded_fixtures[self.class]
928:         else
929:           load_fixtures
930:           @@already_loaded_fixtures[self.class] = @loaded_fixtures
931:         end
932:         ActiveRecord::Base.connection.increment_open_transactions
933:         ActiveRecord::Base.connection.transaction_joinable = false
934:         ActiveRecord::Base.connection.begin_db_transaction
935:       # Load fixtures for every test.
936:       else
937:         Fixtures.reset_cache
938:         @@already_loaded_fixtures[self.class] = nil
939:         load_fixtures
940:       end
941: 
942:       # Instantiate fixtures for every test if requested.
943:       instantiate_fixtures if use_instantiated_fixtures
944:     end
teardown_fixtures()
     # File activerecord/lib/active_record/fixtures.rb, line 946
946:     def teardown_fixtures
947:       return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
948: 
949:       unless run_in_transaction?
950:         Fixtures.reset_cache
951:       end
952: 
953:       # Rollback changes if a transaction is active.
954:       if run_in_transaction? && ActiveRecord::Base.connection.open_transactions != 0
955:         ActiveRecord::Base.connection.rollback_db_transaction
956:         ActiveRecord::Base.connection.decrement_open_transactions
957:       end
958:       ActiveRecord::Base.clear_active_connections!
959:     end