Module: ActiveRecord::TestFixtures
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary
collapse
append_features, class_methods, extended, included, prepend_features, prepended
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, **kwargs, &block) ⇒ Object
264
265
266
267
268
269
270
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 264
def method_missing(name, *args, **kwargs, &block)
if fs_name = fixture_sets[name.to_s]
access_fixture(fs_name, *args, **kwargs, &block)
else
super
end
end
|
Instance Method Details
#after_teardown ⇒ Object
14
15
16
17
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 14
def after_teardown super
teardown_fixtures
end
|
#before_setup ⇒ Object
9
10
11
12
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 9
def before_setup setup_fixtures
super
end
|
#enlist_fixture_connections ⇒ Object
195
196
197
198
199
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 195
def enlist_fixture_connections
setup_shared_connection_pool
ActiveRecord::Base.connection_handler.connection_pool_list(:writing).map(&:connection)
end
|
#fixture_path ⇒ Object
102
103
104
105
106
107
108
109
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 102
def fixture_path
ActiveRecord.deprecator.warn(<<~WARNING)
TestFixtures#fixture_path is deprecated and will be removed in Rails 7.2. Use #fixture_paths instead.
If multiple fixture paths have been configured with #fixture_paths, then #fixture_path will just return
the first path.
WARNING
fixture_paths.first
end
|
#run_in_transaction? ⇒ Boolean
111
112
113
114
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 111
def run_in_transaction?
use_transactional_tests &&
!self.class.uses_transaction?(name)
end
|
#setup_fixtures(config = ActiveRecord::Base) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 116
def setup_fixtures(config = ActiveRecord::Base)
if pre_loaded_fixtures && !use_transactional_tests
raise RuntimeError, "pre_loaded_fixtures requires use_transactional_tests"
end
@fixture_cache = {}
@fixture_connections = []
@@already_loaded_fixtures ||= {}
@connection_subscriber = nil
@saved_pool_configs = Hash.new { |hash, key| hash[key] = {} }
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, _lazy: false
connection.pool.lock_thread = true if lock_threads
end
@connection_subscriber = ActiveSupport::Notifications.subscribe("!connection.active_record") do |_, _, _, _, payload|
connection_name = payload[:connection_name] if payload.key?(:connection_name)
shard = payload[:shard] if payload.key?(:shard)
if connection_name
begin
connection = ActiveRecord::Base.connection_handler.retrieve_connection(connection_name, shard: shard)
rescue ConnectionNotEstablished
connection = nil
end
if connection
setup_shared_connection_pool
if !@fixture_connections.include?(connection)
connection.begin_transaction joinable: false, _lazy: false
connection.pool.lock_thread = true if lock_threads
@fixture_connections << connection
end
end
end
end
else
ActiveRecord::FixtureSet.reset_cache
@@already_loaded_fixtures[self.class] = nil
@loaded_fixtures = load_fixtures(config)
end
instantiate_fixtures if use_instantiated_fixtures
end
|
#teardown_fixtures ⇒ Object
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# File 'activerecord/lib/active_record/test_fixtures.rb', line 178
def teardown_fixtures
if run_in_transaction?
ActiveSupport::Notifications.unsubscribe(@connection_subscriber) if @connection_subscriber
@fixture_connections.each do |connection|
connection.rollback_transaction if connection.transaction_open?
connection.pool.lock_thread = false
end
@fixture_connections.clear
teardown_shared_connection_pool
else
ActiveRecord::FixtureSet.reset_cache
end
ActiveRecord::Base.connection_handler.clear_active_connections!(:all)
end
|