activerecord 7.0.7.2 → 7.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a02c1d1e0be726645c320bdfdf87f283848dd9d33fa603bb6756605b1ae26769
4
- data.tar.gz: e79a3bf970f5f6011181500548b8fe0d3ca7fba9127ef97e8e685bcae97cd3ce
3
+ metadata.gz: e993cf4751bc4f76be3f2a5aebe08051098416f154777a46e6056e6db5d7fe22
4
+ data.tar.gz: fbe2892c8c8a7a14a41ae50f2a44615f045441538329980b7edddd5a66dee912
5
5
  SHA512:
6
- metadata.gz: 3b260365a7dd7faf83081b19c6934d20e985f329262daa67b59404146d367fddb0bdd868402b517779f5d8703e3ba8c91f34c391e50c89b52e645d0ee003ab58
7
- data.tar.gz: 96d6785da071ebfbf4b6fab4b3cf1989a8bba4843b7dd879a25a89a20ea2062252a8414a4aaa3dd5de725af72b01dd828e1013e9b0fa0aaf5bd2d079fc07d6a3
6
+ metadata.gz: 12e8c4a4c66a576c3abac30a03fbea7cd9830d259681daafddf93506a88ac6887375b8b6bbe3dd1c71faabfbd169d4f015e46e770db326300993a925eca00b20
7
+ data.tar.gz: fd42f935a2b4edc536aa8bfe10e9368fda646b54374f6c336fee3b248ab77323fd7495a4c10c9dfef0173850cc0f5a604ff7417e5b2ecc2332b946ecb6d0f0db
data/CHANGELOG.md CHANGED
@@ -1,3 +1,62 @@
1
+ ## Rails 7.0.8 (September 09, 2023) ##
2
+
3
+ * Fix `change_column` not setting `precision: 6` on `datetime` columns when
4
+ using 7.0+ Migrations and SQLite.
5
+
6
+ *Hartley McGuire*
7
+
8
+ * Fix unscope is not working in specific case
9
+
10
+ Before:
11
+ ```ruby
12
+ Post.where(id: 1...3).unscope(where: :id).to_sql # "SELECT `posts`.* FROM `posts` WHERE `posts`.`id` >= 1 AND `posts`.`id` < 3"
13
+
14
+ ```
15
+
16
+ After:
17
+ ```ruby
18
+ Post.where(id: 1...3).unscope(where: :id).to_sql # "SELECT `posts`.* FROM `posts`"
19
+ ```
20
+
21
+ Fixes #48094.
22
+
23
+ *Kazuya Hatanaka*
24
+
25
+ * Fix associations to a STI model including a `class_name` parameter
26
+
27
+ ```ruby
28
+ class Product < ApplicationRecord
29
+ has_many :requests, as: :requestable, class_name: "ProductRequest", dependent: :destroy
30
+ end
31
+
32
+ # STI tables
33
+ class Request < ApplicationRecord
34
+ belongs_to :requestable, polymorphic: true
35
+
36
+ validate :request_type, presence: true
37
+ end
38
+
39
+ class ProductRequest < Request
40
+ belongs_to :user
41
+ end
42
+ ```
43
+
44
+ Accessing such association would lead to:
45
+
46
+ ```
47
+ table_metadata.rb:22:in `has_column?': undefined method `key?' for nil:NilClass (NoMethodError)
48
+ ```
49
+
50
+ *Romain Filinto*
51
+
52
+ * Fix `change_table` setting datetime precision for 6.1 Migrations
53
+
54
+ *Hartley McGuire*
55
+
56
+ * Fix change_column setting datetime precision for 6.1 Migrations
57
+
58
+ *Hartley McGuire*
59
+
1
60
  ## Rails 7.0.7.2 (August 22, 2023) ##
2
61
 
3
62
  * No changes.
@@ -79,7 +79,7 @@ module ActiveRecord
79
79
  def reset
80
80
  super
81
81
  @target = []
82
- @replaced_or_added_targets = Set.new
82
+ @replaced_or_added_targets = Set.new.compare_by_identity
83
83
  @association_ids = nil
84
84
  end
85
85
 
@@ -1102,6 +1102,11 @@ module ActiveRecord
1102
1102
  super
1103
1103
  end
1104
1104
 
1105
+ def pretty_print(pp) # :nodoc:
1106
+ load_target if find_from_target?
1107
+ super
1108
+ end
1109
+
1105
1110
  delegate_methods = [
1106
1111
  QueryMethods,
1107
1112
  SpawnMethods,
@@ -20,7 +20,7 @@ module ActiveRecord
20
20
  end
21
21
 
22
22
  READ_QUERY = ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
23
- :desc, :describe, :set, :show, :use
23
+ :desc, :describe, :set, :show, :use, :kill
24
24
  ) # :nodoc:
25
25
  private_constant :READ_QUERY
26
26
 
@@ -4,6 +4,12 @@ module ActiveRecord
4
4
  module ConnectionAdapters
5
5
  module SQLite3
6
6
  class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
7
+ def change_column(column_name, type, **options)
8
+ name = column_name.to_s
9
+ @columns_hash[name] = nil
10
+ column(name, type, **options)
11
+ end
12
+
7
13
  def references(*args, **options)
8
14
  super(*args, type: :integer, **options)
9
15
  end
@@ -287,10 +287,7 @@ module ActiveRecord
287
287
 
288
288
  def change_column(table_name, column_name, type, **options) # :nodoc:
289
289
  alter_table(table_name) do |definition|
290
- definition[column_name].instance_eval do
291
- self.type = aliased_types(type.to_s, type)
292
- self.options.merge!(options)
293
- end
290
+ definition.change_column(column_name, type, **options)
294
291
  end
295
292
  end
296
293
 
@@ -9,8 +9,8 @@ module ActiveRecord
9
9
  module VERSION
10
10
  MAJOR = 7
11
11
  MINOR = 0
12
- TINY = 7
13
- PRE = "2"
12
+ TINY = 8
13
+ PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -56,12 +56,13 @@ module ActiveRecord
56
56
  super
57
57
  end
58
58
 
59
- def create_table(table_name, **options)
60
- if block_given?
61
- super { |t| yield compatible_table_definition(t) }
62
- else
63
- super
59
+ def change_column(table_name, column_name, type, **options)
60
+ if type == :datetime
61
+ options[:precision] ||= nil
64
62
  end
63
+
64
+ type = PostgreSQLCompat.compatible_timestamp_type(type, connection)
65
+ super
65
66
  end
66
67
 
67
68
  module TableDefinition
@@ -70,6 +71,11 @@ module ActiveRecord
70
71
  super
71
72
  end
72
73
 
74
+ def change(name, type, index: nil, **options)
75
+ options[:precision] ||= nil
76
+ super
77
+ end
78
+
73
79
  def column(name, type, index: nil, **options)
74
80
  options[:precision] ||= nil
75
81
  super
@@ -81,7 +87,7 @@ module ActiveRecord
81
87
  class << t
82
88
  prepend TableDefinition
83
89
  end
84
- t
90
+ super
85
91
  end
86
92
  end
87
93
 
@@ -105,30 +111,6 @@ module ActiveRecord
105
111
  end
106
112
  end
107
113
 
108
- def create_table(table_name, **options)
109
- if block_given?
110
- super { |t| yield compatible_table_definition(t) }
111
- else
112
- super
113
- end
114
- end
115
-
116
- def change_table(table_name, **options)
117
- if block_given?
118
- super { |t| yield compatible_table_definition(t) }
119
- else
120
- super
121
- end
122
- end
123
-
124
- def create_join_table(table_1, table_2, **options)
125
- if block_given?
126
- super { |t| yield compatible_table_definition(t) }
127
- else
128
- super
129
- end
130
- end
131
-
132
114
  def add_reference(table_name, ref_name, **options)
133
115
  if connection.adapter_name == "SQLite"
134
116
  options[:type] = :integer
@@ -182,30 +164,6 @@ module ActiveRecord
182
164
  end
183
165
  end
184
166
 
185
- def create_table(table_name, **options)
186
- if block_given?
187
- super { |t| yield compatible_table_definition(t) }
188
- else
189
- super
190
- end
191
- end
192
-
193
- def change_table(table_name, **options)
194
- if block_given?
195
- super { |t| yield compatible_table_definition(t) }
196
- else
197
- super
198
- end
199
- end
200
-
201
- def create_join_table(table_1, table_2, **options)
202
- if block_given?
203
- super { |t| yield compatible_table_definition(t) }
204
- else
205
- super
206
- end
207
- end
208
-
209
167
  def add_timestamps(table_name, **options)
210
168
  options[:precision] ||= nil
211
169
  super
@@ -551,6 +551,41 @@ module ActiveRecord
551
551
 
552
552
  # This must be defined before the inherited hook, below
553
553
  class Current < Migration # :nodoc:
554
+ def create_table(table_name, **options)
555
+ if block_given?
556
+ super { |t| yield compatible_table_definition(t) }
557
+ else
558
+ super
559
+ end
560
+ end
561
+
562
+ def change_table(table_name, **options)
563
+ if block_given?
564
+ super { |t| yield compatible_table_definition(t) }
565
+ else
566
+ super
567
+ end
568
+ end
569
+
570
+ def create_join_table(table_1, table_2, **options)
571
+ if block_given?
572
+ super { |t| yield compatible_table_definition(t) }
573
+ else
574
+ super
575
+ end
576
+ end
577
+
578
+ def drop_table(table_name, **options)
579
+ if block_given?
580
+ super { |t| yield compatible_table_definition(t) }
581
+ else
582
+ super
583
+ end
584
+ end
585
+
586
+ def compatible_table_definition(t)
587
+ t
588
+ end
554
589
  end
555
590
 
556
591
  def self.inherited(subclass) # :nodoc:
@@ -916,9 +951,7 @@ module ActiveRecord
916
951
  end
917
952
 
918
953
  def method_missing(method, *arguments, &block)
919
- arg_list = arguments.map(&:inspect) * ", "
920
-
921
- say_with_time "#{method}(#{arg_list})" do
954
+ say_with_time "#{method}(#{format_arguments(arguments)})" do
922
955
  unless connection.respond_to? :revert
923
956
  unless arguments.empty? || [:execute, :enable_extension, :disable_extension].include?(method)
924
957
  arguments[0] = proper_table_name(arguments.first, table_name_options)
@@ -1026,6 +1059,22 @@ module ActiveRecord
1026
1059
  end
1027
1060
  end
1028
1061
 
1062
+ def format_arguments(arguments)
1063
+ arg_list = arguments[0...-1].map(&:inspect)
1064
+ last_arg = arguments.last
1065
+ if last_arg.is_a?(Hash)
1066
+ last_arg = last_arg.reject { |k, _v| internal_option?(k) }
1067
+ arg_list << last_arg.inspect unless last_arg.empty?
1068
+ else
1069
+ arg_list << last_arg.inspect
1070
+ end
1071
+ arg_list.join(", ")
1072
+ end
1073
+
1074
+ def internal_option?(option_name)
1075
+ option_name.start_with?("_")
1076
+ end
1077
+
1029
1078
  def command_recorder
1030
1079
  CommandRecorder.new(connection)
1031
1080
  end
@@ -19,7 +19,7 @@ module ActiveRecord
19
19
  end
20
20
 
21
21
  def has_column?(column_name)
22
- klass&.columns_hash.key?(column_name)
22
+ klass&.columns_hash&.key?(column_name)
23
23
  end
24
24
 
25
25
  def associated_with?(table_name)
@@ -18,6 +18,10 @@ module Arel # :nodoc: all
18
18
  children[1]
19
19
  end
20
20
 
21
+ def fetch_attribute(&block)
22
+ children.any? && children.all? { |child| child.fetch_attribute(&block) }
23
+ end
24
+
21
25
  def hash
22
26
  children.hash
23
27
  end
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.0.7.2
4
+ version: 7.0.8
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: 2023-08-22 00:00:00.000000000 Z
11
+ date: 2023-09-09 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.0.7.2
19
+ version: 7.0.8
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.0.7.2
26
+ version: 7.0.8
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.0.7.2
33
+ version: 7.0.8
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.0.7.2
40
+ version: 7.0.8
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.
@@ -434,10 +434,10 @@ licenses:
434
434
  - MIT
435
435
  metadata:
436
436
  bug_tracker_uri: https://github.com/rails/rails/issues
437
- changelog_uri: https://github.com/rails/rails/blob/v7.0.7.2/activerecord/CHANGELOG.md
438
- documentation_uri: https://api.rubyonrails.org/v7.0.7.2/
437
+ changelog_uri: https://github.com/rails/rails/blob/v7.0.8/activerecord/CHANGELOG.md
438
+ documentation_uri: https://api.rubyonrails.org/v7.0.8/
439
439
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
440
- source_code_uri: https://github.com/rails/rails/tree/v7.0.7.2/activerecord
440
+ source_code_uri: https://github.com/rails/rails/tree/v7.0.8/activerecord
441
441
  rubygems_mfa_required: 'true'
442
442
  post_install_message:
443
443
  rdoc_options:
@@ -456,7 +456,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
456
456
  - !ruby/object:Gem::Version
457
457
  version: '0'
458
458
  requirements: []
459
- rubygems_version: 3.3.3
459
+ rubygems_version: 3.4.18
460
460
  signing_key:
461
461
  specification_version: 4
462
462
  summary: Object-relational mapper framework (part of Rails).