activerecord 6.1.0 → 6.1.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +305 -17
- data/README.rdoc +1 -1
- data/lib/active_record/aggregations.rb +4 -4
- data/lib/active_record/association_relation.rb +10 -0
- data/lib/active_record/associations/association.rb +13 -7
- data/lib/active_record/associations/association_scope.rb +7 -5
- data/lib/active_record/associations/belongs_to_association.rb +8 -5
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +7 -2
- data/lib/active_record/associations/builder/association.rb +23 -2
- data/lib/active_record/associations/builder/belongs_to.rb +2 -2
- data/lib/active_record/associations/has_many_association.rb +1 -1
- data/lib/active_record/associations/join_dependency/join_association.rb +8 -7
- data/lib/active_record/associations/join_dependency.rb +1 -1
- data/lib/active_record/associations.rb +6 -2
- data/lib/active_record/attributes.rb +1 -1
- data/lib/active_record/coders/yaml_column.rb +11 -1
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +4 -4
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +4 -0
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +7 -1
- data/lib/active_record/connection_adapters/abstract/transaction.rb +14 -3
- data/lib/active_record/connection_adapters/abstract_adapter.rb +10 -11
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +6 -2
- data/lib/active_record/connection_adapters/mysql/quoting.rb +17 -2
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +4 -1
- data/lib/active_record/connection_adapters/pool_config.rb +13 -3
- data/lib/active_record/connection_adapters/pool_manager.rb +5 -1
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +2 -8
- data/lib/active_record/connection_adapters/schema_cache.rb +9 -1
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +0 -2
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/active_record/connection_adapters.rb +2 -0
- data/lib/active_record/connection_handling.rb +20 -12
- data/lib/active_record/core.rb +58 -29
- data/lib/active_record/database_configurations/url_config.rb +1 -1
- data/lib/active_record/enum.rb +52 -34
- data/lib/active_record/fixtures.rb +5 -2
- data/lib/active_record/gem_version.rb +1 -1
- data/lib/active_record/insert_all.rb +5 -1
- data/lib/active_record/locking/optimistic.rb +14 -4
- data/lib/active_record/log_subscriber.rb +3 -2
- data/lib/active_record/migration/compatibility.rb +2 -1
- data/lib/active_record/migration.rb +1 -1
- data/lib/active_record/model_schema.rb +4 -4
- data/lib/active_record/railties/console_sandbox.rb +2 -4
- data/lib/active_record/railties/databases.rake +16 -9
- data/lib/active_record/reflection.rb +1 -1
- data/lib/active_record/relation/calculations.rb +6 -2
- data/lib/active_record/relation/finder_methods.rb +1 -1
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +3 -3
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +9 -5
- data/lib/active_record/relation/predicate_builder.rb +5 -6
- data/lib/active_record/relation/query_methods.rb +9 -6
- data/lib/active_record/relation/where_clause.rb +17 -14
- data/lib/active_record/relation.rb +10 -17
- data/lib/active_record/scoping/default.rb +1 -3
- data/lib/active_record/signed_id.rb +1 -1
- data/lib/active_record/statement_cache.rb +2 -2
- data/lib/active_record/table_metadata.rb +6 -3
- data/lib/active_record/tasks/database_tasks.rb +1 -0
- data/lib/active_record/test_fixtures.rb +42 -1
- data/lib/active_record/transactions.rb +4 -2
- data/lib/active_record/validations/numericality.rb +1 -1
- data/lib/arel/collectors/bind.rb +2 -2
- data/lib/arel/collectors/composite.rb +3 -3
- data/lib/arel/collectors/sql_string.rb +1 -1
- data/lib/arel/collectors/substitute_binds.rb +1 -1
- data/lib/arel/nodes/homogeneous_in.rb +4 -0
- data/lib/arel/predications.rb +2 -2
- data/lib/arel/visitors/to_sql.rb +1 -1
- metadata +10 -10
@@ -1081,12 +1081,15 @@ module ActiveRecord
|
|
1081
1081
|
when String, Array
|
1082
1082
|
parts = [klass.sanitize_sql(rest.empty? ? opts : [opts, *rest])]
|
1083
1083
|
when Hash
|
1084
|
-
opts = opts.
|
1084
|
+
opts = opts.transform_keys do |key|
|
1085
|
+
key = key.to_s
|
1086
|
+
klass.attribute_aliases[key] || key
|
1087
|
+
end
|
1085
1088
|
references = PredicateBuilder.references(opts)
|
1086
1089
|
self.references_values |= references unless references.empty?
|
1087
1090
|
|
1088
1091
|
parts = predicate_builder.build_from_hash(opts) do |table_name|
|
1089
|
-
|
1092
|
+
lookup_table_klass_from_join_dependencies(table_name)
|
1090
1093
|
end
|
1091
1094
|
when Arel::Nodes::Node
|
1092
1095
|
parts = [opts]
|
@@ -1099,9 +1102,9 @@ module ActiveRecord
|
|
1099
1102
|
alias :build_having_clause :build_where_clause
|
1100
1103
|
|
1101
1104
|
private
|
1102
|
-
def
|
1105
|
+
def lookup_table_klass_from_join_dependencies(table_name)
|
1103
1106
|
each_join_dependencies do |join|
|
1104
|
-
return join.
|
1107
|
+
return join.base_klass if table_name == join.table_name
|
1105
1108
|
end
|
1106
1109
|
nil
|
1107
1110
|
end
|
@@ -1130,7 +1133,7 @@ module ActiveRecord
|
|
1130
1133
|
raise ImmutableRelation if defined?(@arel) && @arel
|
1131
1134
|
end
|
1132
1135
|
|
1133
|
-
def build_arel(aliases)
|
1136
|
+
def build_arel(aliases = nil)
|
1134
1137
|
arel = Arel::SelectManager.new(table)
|
1135
1138
|
|
1136
1139
|
build_joins(arel.join_sources, aliases)
|
@@ -1312,7 +1315,7 @@ module ActiveRecord
|
|
1312
1315
|
elsif field.match?(/\A\w+\.\w+\z/)
|
1313
1316
|
table, column = field.split(".")
|
1314
1317
|
predicate_builder.resolve_arel_attribute(table, column) do
|
1315
|
-
|
1318
|
+
lookup_table_klass_from_join_dependencies(table)
|
1316
1319
|
end
|
1317
1320
|
else
|
1318
1321
|
yield field
|
@@ -58,8 +58,8 @@ module ActiveRecord
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def to_h(table_name = nil)
|
62
|
-
equalities(predicates).each_with_object({}) do |node, hash|
|
61
|
+
def to_h(table_name = nil, equality_only: false)
|
62
|
+
equalities(predicates, equality_only).each_with_object({}) do |node, hash|
|
63
63
|
next if table_name&.!= node.left.relation.name
|
64
64
|
name = node.left.name.to_s
|
65
65
|
value = extract_node_value(node.right)
|
@@ -103,28 +103,31 @@ module ActiveRecord
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def extract_attributes
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
110
|
-
attrs << attr if attr
|
111
|
-
end
|
106
|
+
attrs = []
|
107
|
+
each_attributes { |attr, _| attrs << attr }
|
108
|
+
attrs
|
112
109
|
end
|
113
110
|
|
114
111
|
protected
|
115
112
|
attr_reader :predicates
|
116
113
|
|
117
114
|
def referenced_columns
|
118
|
-
|
115
|
+
hash = {}
|
116
|
+
each_attributes { |attr, node| hash[attr] = node }
|
117
|
+
hash
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
def each_attributes
|
122
|
+
predicates.each do |node|
|
119
123
|
attr = extract_attribute(node) || begin
|
120
124
|
node.left if equality_node?(node) && node.left.is_a?(Arel::Predications)
|
121
125
|
end
|
122
126
|
|
123
|
-
|
127
|
+
yield attr, node if attr
|
124
128
|
end
|
125
129
|
end
|
126
130
|
|
127
|
-
private
|
128
131
|
def extract_attribute(node)
|
129
132
|
attr_node = nil
|
130
133
|
Arel.fetch_attribute(node) do |attr|
|
@@ -134,14 +137,14 @@ module ActiveRecord
|
|
134
137
|
attr_node
|
135
138
|
end
|
136
139
|
|
137
|
-
def equalities(predicates)
|
140
|
+
def equalities(predicates, equality_only)
|
138
141
|
equalities = []
|
139
142
|
|
140
143
|
predicates.each do |node|
|
141
|
-
if equality_node?(node)
|
144
|
+
if equality_only ? Arel::Nodes::Equality === node : equality_node?(node)
|
142
145
|
equalities << node
|
143
146
|
elsif node.is_a?(Arel::Nodes::And)
|
144
|
-
equalities.concat equalities(node.children)
|
147
|
+
equalities.concat equalities(node.children, equality_only)
|
145
148
|
end
|
146
149
|
end
|
147
150
|
|
@@ -440,13 +440,11 @@ module ActiveRecord
|
|
440
440
|
def update_all(updates)
|
441
441
|
raise ArgumentError, "Empty list of attributes to change" if updates.blank?
|
442
442
|
|
443
|
-
|
444
|
-
|
445
|
-
return relation.update_all(updates)
|
446
|
-
end
|
443
|
+
arel = eager_loading? ? apply_join_dependency.arel : build_arel
|
444
|
+
arel.source.left = table
|
447
445
|
|
448
446
|
stmt = Arel::UpdateManager.new
|
449
|
-
stmt.table(arel.
|
447
|
+
stmt.table(arel.source)
|
450
448
|
stmt.key = table[primary_key]
|
451
449
|
stmt.take(arel.limit)
|
452
450
|
stmt.offset(arel.offset)
|
@@ -465,7 +463,7 @@ module ActiveRecord
|
|
465
463
|
stmt.set Arel.sql(klass.sanitize_sql_for_assignment(updates, table.name))
|
466
464
|
end
|
467
465
|
|
468
|
-
|
466
|
+
klass.connection.update(stmt, "#{klass} Update All").tap { reset }
|
469
467
|
end
|
470
468
|
|
471
469
|
def update(id = :all, attributes) # :nodoc:
|
@@ -582,23 +580,18 @@ module ActiveRecord
|
|
582
580
|
raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
|
583
581
|
end
|
584
582
|
|
585
|
-
|
586
|
-
|
587
|
-
return relation.delete_all
|
588
|
-
end
|
583
|
+
arel = eager_loading? ? apply_join_dependency.arel : build_arel
|
584
|
+
arel.source.left = table
|
589
585
|
|
590
586
|
stmt = Arel::DeleteManager.new
|
591
|
-
stmt.from(arel.
|
587
|
+
stmt.from(arel.source)
|
592
588
|
stmt.key = table[primary_key]
|
593
589
|
stmt.take(arel.limit)
|
594
590
|
stmt.offset(arel.offset)
|
595
591
|
stmt.order(*arel.orders)
|
596
592
|
stmt.wheres = arel.constraints
|
597
593
|
|
598
|
-
|
599
|
-
|
600
|
-
reset
|
601
|
-
affected
|
594
|
+
klass.connection.delete(stmt, "#{klass} Destroy").tap { reset }
|
602
595
|
end
|
603
596
|
|
604
597
|
# Finds and destroys all records matching the specified conditions.
|
@@ -652,6 +645,7 @@ module ActiveRecord
|
|
652
645
|
@delegate_to_klass = false
|
653
646
|
@to_sql = @arel = @loaded = @should_eager_load = nil
|
654
647
|
@offsets = @take = nil
|
648
|
+
@cache_keys = nil
|
655
649
|
@records = [].freeze
|
656
650
|
self
|
657
651
|
end
|
@@ -683,8 +677,7 @@ module ActiveRecord
|
|
683
677
|
end
|
684
678
|
|
685
679
|
def scope_for_create
|
686
|
-
hash =
|
687
|
-
hash.delete(klass.inheritance_column) if klass.finder_needs_type_condition?
|
680
|
+
hash = where_clause.to_h(klass.table_name, equality_only: true)
|
688
681
|
create_with_value.each { |k, v| hash[k.to_s] = v } unless create_with_value.empty?
|
689
682
|
hash
|
690
683
|
end
|
@@ -109,9 +109,7 @@ module ActiveRecord
|
|
109
109
|
if default_scope_override
|
110
110
|
# The user has defined their own default scope method, so call that
|
111
111
|
evaluate_default_scope do
|
112
|
-
|
113
|
-
relation.merge!(scope)
|
114
|
-
end
|
112
|
+
relation.scoping { default_scope }
|
115
113
|
end
|
116
114
|
elsif default_scopes.any?
|
117
115
|
evaluate_default_scope do
|
@@ -20,7 +20,7 @@ module ActiveRecord
|
|
20
20
|
# a certain time period.
|
21
21
|
#
|
22
22
|
# You set the time period that the signed id is valid for during generation, using the instance method
|
23
|
-
#
|
23
|
+
# <tt>signed_id(expires_in: 15.minutes)</tt>. If the time has elapsed before a signed find is attempted,
|
24
24
|
# the signed id will no longer be valid, and nil is returned.
|
25
25
|
#
|
26
26
|
# It's possible to further restrict the use of a signed id with a purpose. This helps when you have a
|
@@ -80,8 +80,8 @@ module ActiveRecord
|
|
80
80
|
self
|
81
81
|
end
|
82
82
|
|
83
|
-
def add_binds(binds)
|
84
|
-
@binds.concat binds
|
83
|
+
def add_binds(binds, proc_for_binds = nil)
|
84
|
+
@binds.concat proc_for_binds ? binds.map(&proc_for_binds) : binds
|
85
85
|
binds.size.times do |i|
|
86
86
|
@parts << ", " unless i == 0
|
87
87
|
@parts << Substitute.new
|
@@ -33,10 +33,13 @@ module ActiveRecord
|
|
33
33
|
return self
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
if reflection
|
37
|
+
association_klass = reflection.klass unless reflection.polymorphic?
|
38
|
+
elsif block_given?
|
39
|
+
association_klass = yield table_name
|
40
|
+
end
|
37
41
|
|
38
|
-
if
|
39
|
-
association_klass = reflection.klass
|
42
|
+
if association_klass
|
40
43
|
arel_table = association_klass.arel_table
|
41
44
|
arel_table = arel_table.alias(table_name) if arel_table.name != table_name
|
42
45
|
TableMetadata.new(association_klass, arel_table, reflection)
|
@@ -111,6 +111,8 @@ module ActiveRecord
|
|
111
111
|
@fixture_connections = []
|
112
112
|
@@already_loaded_fixtures ||= {}
|
113
113
|
@connection_subscriber = nil
|
114
|
+
@legacy_saved_pool_configs = Hash.new { |hash, key| hash[key] = {} }
|
115
|
+
@saved_pool_configs = Hash.new { |hash, key| hash[key] = {} }
|
114
116
|
|
115
117
|
# Load fixtures once and begin transaction.
|
116
118
|
if run_in_transaction?
|
@@ -169,6 +171,7 @@ module ActiveRecord
|
|
169
171
|
connection.pool.lock_thread = false
|
170
172
|
end
|
171
173
|
@fixture_connections.clear
|
174
|
+
teardown_shared_connection_pool
|
172
175
|
else
|
173
176
|
ActiveRecord::FixtureSet.reset_cache
|
174
177
|
end
|
@@ -200,8 +203,13 @@ module ActiveRecord
|
|
200
203
|
return unless writing_pool_manager
|
201
204
|
|
202
205
|
pool_manager = handler.send(:owner_to_pool_manager)[name]
|
206
|
+
@legacy_saved_pool_configs[handler][name] ||= {}
|
203
207
|
pool_manager.shard_names.each do |shard_name|
|
204
208
|
writing_pool_config = writing_pool_manager.get_pool_config(nil, shard_name)
|
209
|
+
pool_config = pool_manager.get_pool_config(nil, shard_name)
|
210
|
+
next if pool_config == writing_pool_config
|
211
|
+
|
212
|
+
@legacy_saved_pool_configs[handler][name][shard_name] = pool_config
|
205
213
|
pool_manager.set_pool_config(nil, shard_name, writing_pool_config)
|
206
214
|
end
|
207
215
|
end
|
@@ -214,8 +222,12 @@ module ActiveRecord
|
|
214
222
|
pool_manager = handler.send(:owner_to_pool_manager)[name]
|
215
223
|
pool_manager.shard_names.each do |shard_name|
|
216
224
|
writing_pool_config = pool_manager.get_pool_config(ActiveRecord::Base.writing_role, shard_name)
|
225
|
+
@saved_pool_configs[name][shard_name] ||= {}
|
217
226
|
pool_manager.role_names.each do |role|
|
218
|
-
next unless pool_manager.get_pool_config(role, shard_name)
|
227
|
+
next unless pool_config = pool_manager.get_pool_config(role, shard_name)
|
228
|
+
next if pool_config == writing_pool_config
|
229
|
+
|
230
|
+
@saved_pool_configs[name][shard_name][role] = pool_config
|
219
231
|
pool_manager.set_pool_config(role, shard_name, writing_pool_config)
|
220
232
|
end
|
221
233
|
end
|
@@ -223,6 +235,35 @@ module ActiveRecord
|
|
223
235
|
end
|
224
236
|
end
|
225
237
|
|
238
|
+
def teardown_shared_connection_pool
|
239
|
+
if ActiveRecord::Base.legacy_connection_handling
|
240
|
+
@legacy_saved_pool_configs.each_pair do |handler, names|
|
241
|
+
names.each_pair do |name, shards|
|
242
|
+
shards.each_pair do |shard_name, pool_config|
|
243
|
+
pool_manager = handler.send(:owner_to_pool_manager)[name]
|
244
|
+
pool_manager.set_pool_config(nil, shard_name, pool_config)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
else
|
249
|
+
handler = ActiveRecord::Base.connection_handler
|
250
|
+
|
251
|
+
@saved_pool_configs.each_pair do |name, shards|
|
252
|
+
pool_manager = handler.send(:owner_to_pool_manager)[name]
|
253
|
+
shards.each_pair do |shard_name, roles|
|
254
|
+
roles.each_pair do |role, pool_config|
|
255
|
+
next unless pool_manager.get_pool_config(role, shard_name)
|
256
|
+
|
257
|
+
pool_manager.set_pool_config(role, shard_name, pool_config)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
@legacy_saved_pool_configs.clear
|
264
|
+
@saved_pool_configs.clear
|
265
|
+
end
|
266
|
+
|
226
267
|
def load_fixtures(config)
|
227
268
|
ActiveRecord::FixtureSet.create_fixtures(fixture_path, fixture_table_names, fixture_class_names, config).index_by(&:name)
|
228
269
|
end
|
@@ -271,8 +271,10 @@ module ActiveRecord
|
|
271
271
|
if options[:on]
|
272
272
|
fire_on = Array(options[:on])
|
273
273
|
assert_valid_transaction_action(fire_on)
|
274
|
-
options[:if] =
|
275
|
-
|
274
|
+
options[:if] = [
|
275
|
+
-> { transaction_include_any_action?(fire_on) },
|
276
|
+
*options[:if]
|
277
|
+
]
|
276
278
|
end
|
277
279
|
end
|
278
280
|
|
@@ -4,7 +4,7 @@ module ActiveRecord
|
|
4
4
|
module Validations
|
5
5
|
class NumericalityValidator < ActiveModel::Validations::NumericalityValidator # :nodoc:
|
6
6
|
def validate_each(record, attribute, value, precision: nil, scale: nil)
|
7
|
-
precision = [column_precision_for(record, attribute) ||
|
7
|
+
precision = [column_precision_for(record, attribute) || Float::DIG, Float::DIG].min
|
8
8
|
scale = column_scale_for(record, attribute)
|
9
9
|
super(record, attribute, value, precision: precision, scale: scale)
|
10
10
|
end
|
data/lib/arel/collectors/bind.rb
CHANGED
@@ -22,9 +22,9 @@ module Arel # :nodoc: all
|
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
25
|
-
def add_binds(binds, &block)
|
26
|
-
left.add_binds(binds, &block)
|
27
|
-
right.add_binds(binds, &block)
|
25
|
+
def add_binds(binds, proc_for_binds = nil, &block)
|
26
|
+
left.add_binds(binds, proc_for_binds, &block)
|
27
|
+
right.add_binds(binds, proc_for_binds, &block)
|
28
28
|
self
|
29
29
|
end
|
30
30
|
|
data/lib/arel/predications.rb
CHANGED
@@ -207,11 +207,11 @@ module Arel # :nodoc: all
|
|
207
207
|
end
|
208
208
|
|
209
209
|
def contains(other)
|
210
|
-
Arel::Nodes::Contains.new
|
210
|
+
Arel::Nodes::Contains.new self, quoted_node(other)
|
211
211
|
end
|
212
212
|
|
213
213
|
def overlaps(other)
|
214
|
-
Arel::Nodes::Overlaps.new
|
214
|
+
Arel::Nodes::Overlaps.new self, quoted_node(other)
|
215
215
|
end
|
216
216
|
|
217
217
|
def quoted_array(others)
|
data/lib/arel/visitors/to_sql.rb
CHANGED
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: 6.1.
|
4
|
+
version: 6.1.4
|
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: 2021-06-24 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: 6.1.
|
19
|
+
version: 6.1.4
|
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: 6.1.
|
26
|
+
version: 6.1.4
|
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: 6.1.
|
33
|
+
version: 6.1.4
|
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: 6.1.
|
40
|
+
version: 6.1.4
|
41
41
|
description: Databases on Rails. Build a persistent domain model by mapping database
|
42
42
|
tables to Ruby classes. Strong conventions for associations, validations, aggregations,
|
43
43
|
migrations, and testing come baked-in.
|
@@ -390,10 +390,10 @@ licenses:
|
|
390
390
|
- MIT
|
391
391
|
metadata:
|
392
392
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
393
|
-
changelog_uri: https://github.com/rails/rails/blob/v6.1.
|
394
|
-
documentation_uri: https://api.rubyonrails.org/v6.1.
|
393
|
+
changelog_uri: https://github.com/rails/rails/blob/v6.1.4/activerecord/CHANGELOG.md
|
394
|
+
documentation_uri: https://api.rubyonrails.org/v6.1.4/
|
395
395
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
396
|
-
source_code_uri: https://github.com/rails/rails/tree/v6.1.
|
396
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.1.4/activerecord
|
397
397
|
post_install_message:
|
398
398
|
rdoc_options:
|
399
399
|
- "--main"
|
@@ -411,7 +411,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
411
|
- !ruby/object:Gem::Version
|
412
412
|
version: '0'
|
413
413
|
requirements: []
|
414
|
-
rubygems_version: 3.1.
|
414
|
+
rubygems_version: 3.1.2
|
415
415
|
signing_key:
|
416
416
|
specification_version: 4
|
417
417
|
summary: Object-relational mapper framework (part of Rails).
|