activerecord 7.1.1 → 7.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +177 -0
- data/README.rdoc +1 -0
- data/lib/active_record/associations/association.rb +2 -1
- data/lib/active_record/associations/preloader/association.rb +4 -1
- data/lib/active_record/associations.rb +15 -15
- data/lib/active_record/attribute_methods/before_type_cast.rb +1 -1
- data/lib/active_record/attribute_methods/dirty.rb +13 -9
- data/lib/active_record/attribute_methods.rb +1 -1
- data/lib/active_record/callbacks.rb +2 -2
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +11 -8
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +4 -2
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -1
- data/lib/active_record/connection_adapters/abstract_adapter.rb +13 -4
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +3 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +4 -1
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +3 -2
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +12 -5
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +32 -33
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +10 -3
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +1 -0
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +9 -1
- data/lib/active_record/connection_handling.rb +1 -1
- data/lib/active_record/core.rb +41 -7
- data/lib/active_record/delegated_type.rb +1 -1
- data/lib/active_record/encryption/encryptable_record.rb +7 -1
- data/lib/active_record/encryption/encrypted_attribute_type.rb +4 -0
- data/lib/active_record/encryption/extended_deterministic_queries.rb +0 -15
- data/lib/active_record/enum.rb +6 -9
- data/lib/active_record/errors.rb +5 -4
- data/lib/active_record/fixtures.rb +16 -0
- data/lib/active_record/future_result.rb +1 -0
- data/lib/active_record/gem_version.rb +1 -1
- data/lib/active_record/insert_all.rb +3 -3
- data/lib/active_record/internal_metadata.rb +1 -1
- data/lib/active_record/middleware/database_selector.rb +1 -1
- data/lib/active_record/migration/compatibility.rb +8 -0
- data/lib/active_record/migration/pending_migration_connection.rb +21 -0
- data/lib/active_record/migration.rb +9 -5
- data/lib/active_record/model_schema.rb +5 -5
- data/lib/active_record/nested_attributes.rb +3 -3
- data/lib/active_record/normalization.rb +8 -0
- data/lib/active_record/persistence.rb +4 -3
- data/lib/active_record/promise.rb +1 -1
- data/lib/active_record/railties/controller_runtime.rb +2 -1
- data/lib/active_record/railties/databases.rake +5 -5
- data/lib/active_record/reflection.rb +13 -1
- data/lib/active_record/relation/calculations.rb +28 -1
- data/lib/active_record/relation/delegation.rb +1 -1
- data/lib/active_record/relation.rb +18 -3
- data/lib/active_record/runtime_registry.rb +15 -1
- data/lib/active_record/schema_migration.rb +1 -1
- data/lib/active_record/secure_token.rb +1 -1
- data/lib/active_record/tasks/database_tasks.rb +5 -5
- data/lib/arel/nodes/homogeneous_in.rb +1 -1
- metadata +10 -9
@@ -284,8 +284,10 @@ module ActiveRecord
|
|
284
284
|
|
285
285
|
# Computes the table name, (re)sets it internally, and returns it.
|
286
286
|
def reset_table_name # :nodoc:
|
287
|
-
self.table_name = if
|
288
|
-
|
287
|
+
self.table_name = if self == Base
|
288
|
+
nil
|
289
|
+
elsif abstract_class?
|
290
|
+
superclass.table_name
|
289
291
|
elsif superclass.abstract_class?
|
290
292
|
superclass.table_name || compute_table_name
|
291
293
|
else
|
@@ -467,7 +469,7 @@ module ActiveRecord
|
|
467
469
|
end
|
468
470
|
|
469
471
|
# Returns the column object for the named attribute.
|
470
|
-
# Returns an
|
472
|
+
# Returns an ActiveRecord::ConnectionAdapters::NullColumn if the
|
471
473
|
# named attribute does not exist.
|
472
474
|
#
|
473
475
|
# class Person < ActiveRecord::Base
|
@@ -627,8 +629,6 @@ module ActiveRecord
|
|
627
629
|
)
|
628
630
|
alias_attribute :id_value, :id if name == "id"
|
629
631
|
end
|
630
|
-
|
631
|
-
super
|
632
632
|
end
|
633
633
|
|
634
634
|
# Guesses the table name, but does not decorate it with prefix and suffix information.
|
@@ -307,7 +307,7 @@ module ActiveRecord
|
|
307
307
|
# [:allow_destroy]
|
308
308
|
# If true, destroys any members from the attributes hash with a
|
309
309
|
# <tt>_destroy</tt> key and a value that evaluates to +true+
|
310
|
-
# (e.g. 1, '1', true, or 'true'). This option is
|
310
|
+
# (e.g. 1, '1', true, or 'true'). This option is false by default.
|
311
311
|
# [:reject_if]
|
312
312
|
# Allows you to specify a Proc or a Symbol pointing to a method
|
313
313
|
# that checks whether a record should be built for a certain attribute
|
@@ -332,11 +332,11 @@ module ActiveRecord
|
|
332
332
|
# nested attributes are going to be used when an associated record already
|
333
333
|
# exists. In general, an existing record may either be updated with the
|
334
334
|
# new set of attribute values or be replaced by a wholly new record
|
335
|
-
# containing those values. By default the +:update_only+ option is
|
335
|
+
# containing those values. By default the +:update_only+ option is false
|
336
336
|
# and the nested attributes are used to update the existing record only
|
337
337
|
# if they include the record's <tt>:id</tt> value. Otherwise a new
|
338
338
|
# record will be instantiated and used to replace the existing one.
|
339
|
-
# However if the +:update_only+ option is
|
339
|
+
# However if the +:update_only+ option is true, the nested attributes
|
340
340
|
# are used to update the record's attributes always, regardless of
|
341
341
|
# whether the <tt>:id</tt> is present. The option is ignored for collection
|
342
342
|
# associations.
|
@@ -49,6 +49,14 @@ module ActiveRecord # :nodoc:
|
|
49
49
|
# By default, the normalization will not be applied to +nil+ values. This
|
50
50
|
# behavior can be changed with the +:apply_to_nil+ option.
|
51
51
|
#
|
52
|
+
# Be aware that if your app was created before Rails 7.1, and your app
|
53
|
+
# marshals instances of the targeted model (for example, when caching),
|
54
|
+
# then you should set ActiveRecord.marshalling_format_version to +7.1+ or
|
55
|
+
# higher via either <tt>config.load_defaults 7.1</tt> or
|
56
|
+
# <tt>config.active_record.marshalling_format_version = 7.1</tt>.
|
57
|
+
# Otherwise, +Marshal+ may attempt to serialize the normalization +Proc+
|
58
|
+
# and raise +TypeError+.
|
59
|
+
#
|
52
60
|
# ==== Options
|
53
61
|
#
|
54
62
|
# * +:with+ - Any callable object that accepts the attribute's value as
|
@@ -115,7 +115,7 @@ module ActiveRecord
|
|
115
115
|
# ==== Options
|
116
116
|
#
|
117
117
|
# [:returning]
|
118
|
-
# (PostgreSQL only) An array of attributes to return for all successfully
|
118
|
+
# (PostgreSQL and SQLite3 only) An array of attributes to return for all successfully
|
119
119
|
# inserted records, which by default is the primary key.
|
120
120
|
# Pass <tt>returning: %w[ id name ]</tt> for both id and name
|
121
121
|
# or <tt>returning: false</tt> to omit the underlying <tt>RETURNING</tt> SQL
|
@@ -205,7 +205,7 @@ module ActiveRecord
|
|
205
205
|
# ==== Options
|
206
206
|
#
|
207
207
|
# [:returning]
|
208
|
-
# (PostgreSQL only) An array of attributes to return for all successfully
|
208
|
+
# (PostgreSQL and SQLite3 only) An array of attributes to return for all successfully
|
209
209
|
# inserted records, which by default is the primary key.
|
210
210
|
# Pass <tt>returning: %w[ id name ]</tt> for both id and name
|
211
211
|
# or <tt>returning: false</tt> to omit the underlying <tt>RETURNING</tt> SQL
|
@@ -271,7 +271,7 @@ module ActiveRecord
|
|
271
271
|
# ==== Options
|
272
272
|
#
|
273
273
|
# [:returning]
|
274
|
-
# (PostgreSQL only) An array of attributes to return for all successfully
|
274
|
+
# (PostgreSQL and SQLite3 only) An array of attributes to return for all successfully
|
275
275
|
# inserted records, which by default is the primary key.
|
276
276
|
# Pass <tt>returning: %w[ id name ]</tt> for both id and name
|
277
277
|
# or <tt>returning: false</tt> to omit the underlying <tt>RETURNING</tt> SQL
|
@@ -1076,6 +1076,7 @@ module ActiveRecord
|
|
1076
1076
|
end
|
1077
1077
|
|
1078
1078
|
@association_cache = fresh_object.instance_variable_get(:@association_cache)
|
1079
|
+
@association_cache.each_value { |association| association.owner = self }
|
1079
1080
|
@attributes = fresh_object.instance_variable_get(:@attributes)
|
1080
1081
|
@new_record = false
|
1081
1082
|
@previously_new_record = false
|
@@ -31,7 +31,7 @@ module ActiveRecord
|
|
31
31
|
# Returns a new +ActiveRecord::Promise+ that will apply the passed block
|
32
32
|
# when the value is accessed:
|
33
33
|
#
|
34
|
-
# Post.
|
34
|
+
# Post.async_pick(:title).then { |title| title.upcase }.value
|
35
35
|
# # => "POST TITLE"
|
36
36
|
def then(&block)
|
37
37
|
Promise.new(@future_result, @block ? @block >> block : block)
|
@@ -37,9 +37,10 @@ module ActiveRecord
|
|
37
37
|
db_rt_before_render = ActiveRecord::RuntimeRegistry.reset
|
38
38
|
self.db_runtime = (db_runtime || 0) + db_rt_before_render
|
39
39
|
runtime = super
|
40
|
+
queries_rt = ActiveRecord::RuntimeRegistry.sql_runtime - ActiveRecord::RuntimeRegistry.async_sql_runtime
|
40
41
|
db_rt_after_render = ActiveRecord::RuntimeRegistry.reset
|
41
42
|
self.db_runtime += db_rt_after_render
|
42
|
-
runtime -
|
43
|
+
runtime - queries_rt
|
43
44
|
else
|
44
45
|
super
|
45
46
|
end
|
@@ -195,7 +195,7 @@ db_namespace = namespace :db do
|
|
195
195
|
|
196
196
|
namespace :up do
|
197
197
|
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
198
|
-
desc
|
198
|
+
desc "Run the \"up\" on #{name} database for a given migration VERSION."
|
199
199
|
task name => :load_config do
|
200
200
|
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
201
201
|
|
@@ -204,7 +204,7 @@ db_namespace = namespace :db do
|
|
204
204
|
conn.migration_context.run(:up, ActiveRecord::Tasks::DatabaseTasks.target_version)
|
205
205
|
end
|
206
206
|
|
207
|
-
db_namespace["_dump"].invoke
|
207
|
+
db_namespace["_dump:#{name}"].invoke
|
208
208
|
end
|
209
209
|
end
|
210
210
|
end
|
@@ -226,7 +226,7 @@ db_namespace = namespace :db do
|
|
226
226
|
|
227
227
|
namespace :down do
|
228
228
|
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
229
|
-
desc
|
229
|
+
desc "Run the \"down\" on #{name} database for a given migration VERSION."
|
230
230
|
task name => :load_config do
|
231
231
|
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
232
232
|
|
@@ -235,7 +235,7 @@ db_namespace = namespace :db do
|
|
235
235
|
conn.migration_context.run(:down, ActiveRecord::Tasks::DatabaseTasks.target_version)
|
236
236
|
end
|
237
237
|
|
238
|
-
db_namespace["_dump"].invoke
|
238
|
+
db_namespace["_dump:#{name}"].invoke
|
239
239
|
end
|
240
240
|
end
|
241
241
|
end
|
@@ -269,7 +269,7 @@ db_namespace = namespace :db do
|
|
269
269
|
conn.migration_context.rollback(step)
|
270
270
|
end
|
271
271
|
|
272
|
-
db_namespace["_dump"].invoke
|
272
|
+
db_namespace["_dump:#{name}"].invoke
|
273
273
|
end
|
274
274
|
end
|
275
275
|
end
|
@@ -382,6 +382,7 @@ module ActiveRecord
|
|
382
382
|
@klass = options[:anonymous_class]
|
383
383
|
@plural_name = active_record.pluralize_table_names ?
|
384
384
|
name.to_s.pluralize : name.to_s
|
385
|
+
validate_reflection!
|
385
386
|
end
|
386
387
|
|
387
388
|
def autosave=(autosave)
|
@@ -433,6 +434,17 @@ module ActiveRecord
|
|
433
434
|
def derive_class_name
|
434
435
|
name.to_s.camelize
|
435
436
|
end
|
437
|
+
|
438
|
+
def validate_reflection!
|
439
|
+
return unless options[:foreign_key].is_a?(Array)
|
440
|
+
|
441
|
+
message = <<~MSG.squish
|
442
|
+
Passing #{options[:foreign_key]} array to :foreign_key option
|
443
|
+
on the #{active_record}##{name} association is not supported.
|
444
|
+
Use the query_constraints: #{options[:foreign_key]} option instead to represent a composite foreign key.
|
445
|
+
MSG
|
446
|
+
raise ArgumentError, message
|
447
|
+
end
|
436
448
|
end
|
437
449
|
|
438
450
|
# Holds all the metadata about an aggregation as it was specified in the
|
@@ -858,7 +870,7 @@ module ActiveRecord
|
|
858
870
|
def association_primary_key(klass = nil)
|
859
871
|
if primary_key = options[:primary_key]
|
860
872
|
@association_primary_key ||= -primary_key.to_s
|
861
|
-
elsif
|
873
|
+
elsif (klass || self.klass).has_query_constraints? || options[:query_constraints]
|
862
874
|
(klass || self.klass).composite_query_constraints_list
|
863
875
|
elsif (klass || self.klass).composite_primary_key?
|
864
876
|
# If klass has composite primary key of shape [:<tenant_key>, :id], infer primary_key as :id
|
@@ -81,6 +81,16 @@ module ActiveRecord
|
|
81
81
|
#
|
82
82
|
# Note: not all valid {Relation#select}[rdoc-ref:QueryMethods#select] expressions are valid #count expressions. The specifics differ
|
83
83
|
# between databases. In invalid cases, an error from the database is thrown.
|
84
|
+
#
|
85
|
+
# When given a block, loads all records in the relation, if the relation
|
86
|
+
# hasn't been loaded yet. Calls the block with each record in the relation.
|
87
|
+
# Returns the number of records for which the block returns a truthy value.
|
88
|
+
#
|
89
|
+
# Person.count { |person| person.age > 21 }
|
90
|
+
# # => counts the number of people older that 21
|
91
|
+
#
|
92
|
+
# Note: If there are a lot of records in the relation, loading all records
|
93
|
+
# could result in performance issues.
|
84
94
|
def count(column_name = nil)
|
85
95
|
if block_given?
|
86
96
|
unless column_name.nil?
|
@@ -148,6 +158,17 @@ module ActiveRecord
|
|
148
158
|
# #calculate for examples with options.
|
149
159
|
#
|
150
160
|
# Person.sum(:age) # => 4562
|
161
|
+
#
|
162
|
+
# When given a block, loads all records in the relation, if the relation
|
163
|
+
# hasn't been loaded yet. Calls the block with each record in the relation.
|
164
|
+
# Returns the sum of +initial_value_or_column+ and the block return
|
165
|
+
# values:
|
166
|
+
#
|
167
|
+
# Person.sum { |person| person.age } # => 4562
|
168
|
+
# Person.sum(1000) { |person| person.age } # => 5562
|
169
|
+
#
|
170
|
+
# Note: If there are a lot of records in the relation, loading all records
|
171
|
+
# could result in performance issues.
|
151
172
|
def sum(initial_value_or_column = 0, &block)
|
152
173
|
if block_given?
|
153
174
|
map(&block).sum(initial_value_or_column)
|
@@ -260,7 +281,13 @@ module ActiveRecord
|
|
260
281
|
#
|
261
282
|
# See also #ids.
|
262
283
|
def pluck(*column_names)
|
263
|
-
|
284
|
+
if @none
|
285
|
+
if @async
|
286
|
+
return Promise::Complete.new([])
|
287
|
+
else
|
288
|
+
return []
|
289
|
+
end
|
290
|
+
end
|
264
291
|
|
265
292
|
if loaded? && all_attributes?(column_names)
|
266
293
|
result = records.pluck(*column_names)
|
@@ -102,7 +102,7 @@ module ActiveRecord
|
|
102
102
|
:to_sentence, :to_fs, :to_formatted_s, :as_json,
|
103
103
|
:shuffle, :split, :slice, :index, :rindex, to: :records
|
104
104
|
|
105
|
-
delegate :primary_key, :connection, to: :klass
|
105
|
+
delegate :primary_key, :connection, :transaction, to: :klass
|
106
106
|
|
107
107
|
module ClassSpecificRelation # :nodoc:
|
108
108
|
extend ActiveSupport::Concern
|
@@ -164,8 +164,8 @@ module ActiveRecord
|
|
164
164
|
#
|
165
165
|
# If creation failed because of a unique constraint, this method will
|
166
166
|
# assume it encountered a race condition and will try finding the record
|
167
|
-
# once more If somehow the second find still find
|
168
|
-
# concurrent DELETE happened, it will then raise an
|
167
|
+
# once more. If somehow the second find still does not find a record
|
168
|
+
# because a concurrent DELETE happened, it will then raise an
|
169
169
|
# ActiveRecord::RecordNotFound exception.
|
170
170
|
#
|
171
171
|
# Please note <b>this method is not atomic</b>, it runs first a SELECT,
|
@@ -291,6 +291,11 @@ module ActiveRecord
|
|
291
291
|
end
|
292
292
|
|
293
293
|
# Returns true if there are no records.
|
294
|
+
#
|
295
|
+
# When a pattern argument is given, this method checks whether elements in
|
296
|
+
# the Enumerable match the pattern via the case-equality operator (<tt>===</tt>).
|
297
|
+
#
|
298
|
+
# posts.none?(Comment) # => true or false
|
294
299
|
def none?(*args)
|
295
300
|
return true if @none
|
296
301
|
|
@@ -299,6 +304,11 @@ module ActiveRecord
|
|
299
304
|
end
|
300
305
|
|
301
306
|
# Returns true if there are any records.
|
307
|
+
#
|
308
|
+
# When a pattern argument is given, this method checks whether elements in
|
309
|
+
# the Enumerable match the pattern via the case-equality operator (<tt>===</tt>).
|
310
|
+
#
|
311
|
+
# posts.any?(Post) # => true or false
|
302
312
|
def any?(*args)
|
303
313
|
return false if @none
|
304
314
|
|
@@ -307,6 +317,11 @@ module ActiveRecord
|
|
307
317
|
end
|
308
318
|
|
309
319
|
# Returns true if there is exactly one record.
|
320
|
+
#
|
321
|
+
# When a pattern argument is given, this method checks whether elements in
|
322
|
+
# the Enumerable match the pattern via the case-equality operator (<tt>===</tt>).
|
323
|
+
#
|
324
|
+
# posts.one?(Post) # => true or false
|
310
325
|
def one?(*args)
|
311
326
|
return false if @none
|
312
327
|
|
@@ -960,7 +975,7 @@ module ActiveRecord
|
|
960
975
|
def exec_main_query(async: false)
|
961
976
|
if @none
|
962
977
|
if async
|
963
|
-
return
|
978
|
+
return FutureResult::Complete.new([])
|
964
979
|
else
|
965
980
|
return []
|
966
981
|
end
|
@@ -17,13 +17,27 @@ module ActiveRecord
|
|
17
17
|
ActiveSupport::IsolatedExecutionState[:active_record_sql_runtime] = runtime
|
18
18
|
end
|
19
19
|
|
20
|
+
def async_sql_runtime
|
21
|
+
ActiveSupport::IsolatedExecutionState[:active_record_async_sql_runtime] ||= 0.0
|
22
|
+
end
|
23
|
+
|
24
|
+
def async_sql_runtime=(runtime)
|
25
|
+
ActiveSupport::IsolatedExecutionState[:active_record_async_sql_runtime] = runtime
|
26
|
+
end
|
27
|
+
|
20
28
|
def reset
|
21
29
|
rt, self.sql_runtime = sql_runtime, 0.0
|
30
|
+
self.async_sql_runtime = 0.0
|
22
31
|
rt
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
26
35
|
|
27
36
|
ActiveSupport::Notifications.monotonic_subscribe("sql.active_record") do |name, start, finish, id, payload|
|
28
|
-
|
37
|
+
runtime = (finish - start) * 1_000.0
|
38
|
+
|
39
|
+
if payload[:async]
|
40
|
+
ActiveRecord::RuntimeRegistry.async_sql_runtime += (runtime - payload[:lock_wait])
|
41
|
+
end
|
42
|
+
ActiveRecord::RuntimeRegistry.sql_runtime += runtime
|
29
43
|
end
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
# number is inserted in to the schema migrations table so it doesn't need
|
7
7
|
# to be executed the next time.
|
8
8
|
class SchemaMigration # :nodoc:
|
9
|
-
class NullSchemaMigration
|
9
|
+
class NullSchemaMigration # :nodoc:
|
10
10
|
end
|
11
11
|
|
12
12
|
attr_reader :connection, :arel_table
|
@@ -53,7 +53,7 @@ module ActiveRecord
|
|
53
53
|
define_method("regenerate_#{attribute}") { update! attribute => self.class.generate_unique_secure_token(length: length) }
|
54
54
|
set_callback on, on == :initialize ? :after : :before do
|
55
55
|
if new_record? && !query_attribute(attribute)
|
56
|
-
|
56
|
+
send("#{attribute}=", self.class.generate_unique_secure_token(length: length))
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -125,11 +125,11 @@ module ActiveRecord
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def create_all
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
128
|
+
each_local_configuration do |db_config|
|
129
|
+
with_temporary_connection(db_config) do
|
130
|
+
create(db_config)
|
131
|
+
end
|
132
|
+
end
|
133
133
|
end
|
134
134
|
|
135
135
|
def setup_initial_database_yaml # :nodoc:
|
@@ -48,7 +48,7 @@ module Arel # :nodoc: all
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def proc_for_binds
|
51
|
-
-> value { ActiveModel::Attribute.with_cast_value(attribute.name, value,
|
51
|
+
-> value { ActiveModel::Attribute.with_cast_value(attribute.name, value, ActiveModel::Type.default_value) }
|
52
52
|
end
|
53
53
|
|
54
54
|
def fetch_attribute(&block)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.
|
4
|
+
version: 7.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.1.
|
19
|
+
version: 7.1.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.1.
|
26
|
+
version: 7.1.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 7.1.
|
33
|
+
version: 7.1.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 7.1.
|
40
|
+
version: 7.1.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: timeout
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -279,6 +279,7 @@ files:
|
|
279
279
|
- lib/active_record/migration/default_strategy.rb
|
280
280
|
- lib/active_record/migration/execution_strategy.rb
|
281
281
|
- lib/active_record/migration/join_table.rb
|
282
|
+
- lib/active_record/migration/pending_migration_connection.rb
|
282
283
|
- lib/active_record/model_schema.rb
|
283
284
|
- lib/active_record/nested_attributes.rb
|
284
285
|
- lib/active_record/no_touching.rb
|
@@ -469,10 +470,10 @@ licenses:
|
|
469
470
|
- MIT
|
470
471
|
metadata:
|
471
472
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
472
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.1.
|
473
|
-
documentation_uri: https://api.rubyonrails.org/v7.1.
|
473
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.1.3/activerecord/CHANGELOG.md
|
474
|
+
documentation_uri: https://api.rubyonrails.org/v7.1.3/
|
474
475
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
475
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.1.
|
476
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.1.3/activerecord
|
476
477
|
rubygems_mfa_required: 'true'
|
477
478
|
post_install_message:
|
478
479
|
rdoc_options:
|