| Module | ActiveRecord::TestFixtures |
| In: |
vendor/rails/activerecord/lib/active_record/fixtures.rb
|
# File vendor/rails/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
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 908
908: def run_in_transaction?
909: use_transactional_fixtures &&
910: !self.class.uses_transaction?(method_name)
911: end
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 913
913: def setup_fixtures
914: return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
915:
916: if pre_loaded_fixtures && !use_transactional_fixtures
917: raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'
918: end
919:
920: @fixture_cache = {}
921: @@already_loaded_fixtures ||= {}
922:
923: # Load fixtures once and begin transaction.
924: if run_in_transaction?
925: if @@already_loaded_fixtures[self.class]
926: @loaded_fixtures = @@already_loaded_fixtures[self.class]
927: else
928: load_fixtures
929: @@already_loaded_fixtures[self.class] = @loaded_fixtures
930: end
931: ActiveRecord::Base.connection.increment_open_transactions
932: ActiveRecord::Base.connection.transaction_joinable = false
933: ActiveRecord::Base.connection.begin_db_transaction
934: # Load fixtures for every test.
935: else
936: Fixtures.reset_cache
937: @@already_loaded_fixtures[self.class] = nil
938: load_fixtures
939: end
940:
941: # Instantiate fixtures for every test if requested.
942: instantiate_fixtures if use_instantiated_fixtures
943: end
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 945
945: def teardown_fixtures
946: return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
947:
948: unless run_in_transaction?
949: Fixtures.reset_cache
950: end
951:
952: # Rollback changes if a transaction is active.
953: if run_in_transaction? && ActiveRecord::Base.connection.open_transactions != 0
954: ActiveRecord::Base.connection.rollback_db_transaction
955: ActiveRecord::Base.connection.decrement_open_transactions
956: end
957: ActiveRecord::Base.clear_active_connections!
958: end