Methods
Classes and Modules
Module ActiveRecord::TestFixtures::ClassMethodsPublic Class methods
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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