activesupport 7.2.3 → 7.2.4

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: d12b3bc49972cf65396ee7cb16b370f76853dde525bf3d111e6da8a5936ab441
4
- data.tar.gz: a97522d2f10dc74dc7d3bc922eb37b3b6c369bd729e26a22e97d250602d6c544
3
+ metadata.gz: 00b56e0cccfa6661d29d9f1704ee5553874e194cca60cb2be1778adcb5aa1c83
4
+ data.tar.gz: 201046e3d5e25d6f61d82efb984c847414d8553dde0dafcd073a3208576782db
5
5
  SHA512:
6
- metadata.gz: 2a89e3f270073d83270087ad960f1236ee794fb833303b1e97121a1f52b20f07ca79d22c879b474d33d9180b2fbc90359619bd20886a8ab978dabcd7df3df4e2
7
- data.tar.gz: 0576fb7d4a4bef1d8e9e8a0bbce32f0fbb74ba626e7bbcacabcf50352aaf3c2f6567e4989debe83095164b1f9a16a31ea9c0a9afe55cd4327ffc645f5acbef2d
6
+ metadata.gz: 9796848b434671fac64d1510be706c6c6076faf126bd5c71c7f2559151006f0750cbe2f53e60526fb49e62bcce7b76598e76a11adefc5f62f4aa611293bbb86b
7
+ data.tar.gz: c906e9c1009d202c44dc4f4fe5f133ac694d88706586ae6f6fa302cbf07de62b29e355d5c36cc381a400bc6e167d9d1a2ae4f01b113436fe3eb67f60063aa236
data/CHANGELOG.md CHANGED
@@ -1,3 +1,49 @@
1
+ ## Rails 7.2.4 (September 24, 2026) ##
2
+
3
+ * Improve `number_to_delimited` performance when `delimiter_pattern` is not specified.
4
+
5
+ *Shinichi Maeshima*
6
+
7
+ * Silence Dalli 4.0+ warning when using `ActiveSupport::Cache::MemCacheStore`.
8
+
9
+ *zzak*
10
+
11
+ * Fix `ActiveSupport::Inflector.humanize` with international characters.
12
+
13
+ ```ruby
14
+ ActiveSupport::Inflector.humanize("áÉÍÓÚ") # => "Áéíóú"
15
+ ActiveSupport::Inflector.humanize("аБВГДЕ") # => "Абвгде"
16
+ ```
17
+
18
+ *Jose Luis Duran*
19
+
20
+
21
+ ## Rails 7.2.3.2 (July 29, 2026) ##
22
+
23
+ * No changes.
24
+
25
+
26
+ ## Rails 7.2.3.1 (March 23, 2026) ##
27
+
28
+ * Reject scientific notation in NumberConverter
29
+
30
+ [CVE-2026-33176]
31
+
32
+ *Jean Boussier*
33
+
34
+ * Fix `SafeBuffer#%` to preserve unsafe status
35
+
36
+ [CVE-2026-33170]
37
+
38
+ *Jean Boussier*
39
+
40
+ * Improve performance of NumberToDelimitedConverter
41
+
42
+ [CVE-2026-33169]
43
+
44
+ *Jean Boussier*
45
+
46
+
1
47
  ## Rails 7.2.3 (October 28, 2025) ##
2
48
 
3
49
  * Fix `Enumerable#sole` to return the full tuple instead of just the first element of the tuple.
@@ -90,6 +90,9 @@ module ActiveSupport
90
90
  # The value "compress: false" prevents duplicate compression within Dalli.
91
91
  @mem_cache_options[:compress] = false
92
92
  (OVERRIDDEN_OPTIONS - %i(compress)).each { |name| @mem_cache_options.delete(name) }
93
+ # Set the default serializer for Dalli to prevent warning about
94
+ # inheriting the default serializer.
95
+ @mem_cache_options[:serializer] = Marshal
93
96
  @data = self.class.build_mem_cache(*(addresses + [@mem_cache_options]))
94
97
  end
95
98
 
@@ -4,7 +4,7 @@
4
4
  require "json"
5
5
  require "bigdecimal"
6
6
  require "ipaddr"
7
- require "uri/generic"
7
+ require "uri"
8
8
  require "pathname"
9
9
  require "active_support/core_ext/big_decimal/conversions" # for #to_s
10
10
  require "active_support/core_ext/hash/except"
@@ -128,7 +128,9 @@ module ActiveSupport # :nodoc:
128
128
  escaped_args = Array(args).map { |arg| explicit_html_escape_interpolated_argument(arg) }
129
129
  end
130
130
 
131
- self.class.new(super(escaped_args))
131
+ new_safe_buffer = self.class.new(super(escaped_args))
132
+ new_safe_buffer.instance_variable_set(:@html_safe, @html_safe)
133
+ new_safe_buffer
132
134
  end
133
135
 
134
136
  attr_reader :html_safe
@@ -9,7 +9,7 @@ module ActiveSupport
9
9
  module VERSION
10
10
  MAJOR = 7
11
11
  MINOR = 2
12
- TINY = 3
12
+ TINY = 4
13
13
  PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
@@ -143,13 +143,13 @@ module ActiveSupport
143
143
  result.delete_suffix!(" id")
144
144
  end
145
145
 
146
- result.gsub!(/([a-z\d]+)/i) do |match|
146
+ result.gsub!(/([[[:alpha:]]\d]+)/i) do |match|
147
147
  match.downcase!
148
148
  inflections.acronyms[match] || match
149
149
  end
150
150
 
151
151
  if capitalize
152
- result.sub!(/\A\w/) do |match|
152
+ result.sub!(/\A[[:alpha:]]/) do |match|
153
153
  match.upcase!
154
154
  match
155
155
  end
@@ -20,7 +20,7 @@ module ActiveSupport
20
20
  # ActiveSupport::JSON.decode("{\"team\":\"rails\",\"players\":\"36\"}")
21
21
  # # => {"team" => "rails", "players" => "36"}
22
22
  def decode(json)
23
- data = ::JSON.parse(json, quirks_mode: true)
23
+ data = ::JSON.parse(json)
24
24
 
25
25
  if ActiveSupport.parse_json_times
26
26
  convert_dates_from(data)
@@ -107,7 +107,7 @@ module ActiveSupport
107
107
 
108
108
  # Encode a "jsonified" Ruby data structure using the JSON gem
109
109
  def stringify(jsonified)
110
- ::JSON.generate(jsonified, quirks_mode: true, max_nesting: false)
110
+ ::JSON.generate(jsonified)
111
111
  end
112
112
  end
113
113
 
@@ -4,7 +4,7 @@ require "bigdecimal"
4
4
  require "date"
5
5
  require "ipaddr"
6
6
  require "pathname"
7
- require "uri/generic"
7
+ require "uri"
8
8
  require "msgpack/bigint"
9
9
  require "active_support/hash_with_indifferent_access"
10
10
  require "active_support/time"
@@ -180,7 +180,7 @@ module ActiveSupport
180
180
  when Float, Rational
181
181
  number.to_d(0)
182
182
  when String
183
- BigDecimal(number, exception: false)
183
+ BigDecimal(number, exception: false) unless number.to_s.match?(/[de]/i)
184
184
  else
185
185
  number.to_d rescue nil
186
186
  end
@@ -7,8 +7,6 @@ module ActiveSupport
7
7
  class NumberToDelimitedConverter < NumberConverter # :nodoc:
8
8
  self.validate_float = true
9
9
 
10
- DEFAULT_DELIMITER_REGEX = /(\d)(?=(\d\d\d)+(?!\d))/
11
-
12
10
  def convert
13
11
  parts.join(options[:separator])
14
12
  end
@@ -16,14 +14,29 @@ module ActiveSupport
16
14
  private
17
15
  def parts
18
16
  left, right = number.to_s.split(".")
19
- left.gsub!(delimiter_pattern) do |digit_to_delimit|
20
- "#{digit_to_delimit}#{options[:delimiter]}"
17
+ if delimiter_pattern
18
+ left.gsub!(delimiter_pattern) do |digit_to_delimit|
19
+ "#{digit_to_delimit}#{options[:delimiter]}"
20
+ end
21
+ else
22
+ left_parts = []
23
+ offset = left.size % 3
24
+ if offset > 0
25
+ left_parts << left[0, offset]
26
+ end
27
+
28
+ (left.size / 3).times do |i|
29
+ left_parts << left[offset + (i * 3), 3]
30
+ end
31
+
32
+ left = left_parts.join(options[:delimiter])
21
33
  end
34
+
22
35
  [left, right].compact
23
36
  end
24
37
 
25
38
  def delimiter_pattern
26
- options.fetch(:delimiter_pattern, DEFAULT_DELIMITER_REGEX)
39
+ options[:delimiter_pattern]
27
40
  end
28
41
  end
29
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activesupport
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.3
4
+ version: 7.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -76,6 +76,9 @@ dependencies:
76
76
  - - ">="
77
77
  - !ruby/object:Gem::Version
78
78
  version: 2.2.5
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: '3'
79
82
  type: :runtime
80
83
  prerelease: false
81
84
  version_requirements: !ruby/object:Gem::Requirement
@@ -83,6 +86,9 @@ dependencies:
83
86
  - - ">="
84
87
  - !ruby/object:Gem::Version
85
88
  version: 2.2.5
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '3'
86
92
  - !ruby/object:Gem::Dependency
87
93
  name: minitest
88
94
  requirement: !ruby/object:Gem::Requirement
@@ -90,6 +96,9 @@ dependencies:
90
96
  - - ">="
91
97
  - !ruby/object:Gem::Version
92
98
  version: '5.1'
99
+ - - "<"
100
+ - !ruby/object:Gem::Version
101
+ version: '6'
93
102
  type: :runtime
94
103
  prerelease: false
95
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -97,6 +106,9 @@ dependencies:
97
106
  - - ">="
98
107
  - !ruby/object:Gem::Version
99
108
  version: '5.1'
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: '6'
100
112
  - !ruby/object:Gem::Dependency
101
113
  name: base64
102
114
  requirement: !ruby/object:Gem::Requirement
@@ -479,10 +491,10 @@ licenses:
479
491
  - MIT
480
492
  metadata:
481
493
  bug_tracker_uri: https://github.com/rails/rails/issues
482
- changelog_uri: https://github.com/rails/rails/blob/v7.2.3/activesupport/CHANGELOG.md
483
- documentation_uri: https://api.rubyonrails.org/v7.2.3/
494
+ changelog_uri: https://github.com/rails/rails/blob/v7.2.4/activesupport/CHANGELOG.md
495
+ documentation_uri: https://api.rubyonrails.org/v7.2.4/
484
496
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
485
- source_code_uri: https://github.com/rails/rails/tree/v7.2.3/activesupport
497
+ source_code_uri: https://github.com/rails/rails/tree/v7.2.4/activesupport
486
498
  rubygems_mfa_required: 'true'
487
499
  rdoc_options:
488
500
  - "--encoding"
@@ -500,7 +512,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
500
512
  - !ruby/object:Gem::Version
501
513
  version: '0'
502
514
  requirements: []
503
- rubygems_version: 3.6.9
515
+ rubygems_version: 4.0.20
504
516
  specification_version: 4
505
517
  summary: A toolkit of support libraries and Ruby core extensions extracted from the
506
518
  Rails framework.