Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-activesupport-8.0 for
openSUSE:Factory checked in at 2026-07-07 21:05:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activesupport-8.0 (Old)
and /work/SRC/openSUSE:Factory/.rubygem-activesupport-8.0.new.1982 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-activesupport-8.0"
Tue Jul 7 21:05:07 2026 rev:6 rq:1364226 version:8.0.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/rubygem-activesupport-8.0/rubygem-activesupport-8.0.changes
2025-10-10 17:13:46.816431190 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-activesupport-8.0.new.1982/rubygem-activesupport-8.0.changes
2026-07-07 21:07:51.339951519 +0200
@@ -1,0 +2,6 @@
+Tue Jul 7 09:06:56 UTC 2026 - Aleksei Burlakov <[email protected]>
+
+- Update to version 8.0.5:
+
https://rubyonrails.org/2026/3/24/Rails-Versions-8-0-5-and-8-1-3-have-been-released
+
+-------------------------------------------------------------------
Old:
----
activesupport-8.0.3.gem
New:
----
activesupport-8.0.5.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-activesupport-8.0.spec ++++++
--- /var/tmp/diff_new_pack.QsZAAh/_old 2026-07-07 21:07:51.911971288 +0200
+++ /var/tmp/diff_new_pack.QsZAAh/_new 2026-07-07 21:07:51.915971427 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-activesupport-8.0
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
#
Name: rubygem-activesupport-8.0
-Version: 8.0.3
+Version: 8.0.5
Release: 0
%define mod_name activesupport
%define mod_full_name %{mod_name}-%{version}
++++++ activesupport-8.0.3.gem -> activesupport-8.0.5.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 1980-01-02 01:00:00.000000000 +0100
+++ new/CHANGELOG.md 1980-01-02 01:00:00.000000000 +0100
@@ -1,3 +1,84 @@
+## Rails 8.0.5 (March 24, 2026) ##
+
+* Fix inflections to better handle overlapping acronyms.
+
+ ```ruby
+ ActiveSupport::Inflector.inflections(:en) do |inflect|
+ inflect.acronym "USD"
+ inflect.acronym "USDC"
+ end
+
+ "USDC".underscore # => "usdc"
+ ```
+
+ *Said Kaldybaev*
+
+* Silence Dalli 4.0+ warning when using
`ActiveSupport::Cache::MemCacheStore`.
+
+ *zzak*
+
+* Make `delegate` and `delegate_missing_to` work in BasicObject subclasses.
+
+ *Rafael Mendonça França*
+
+* Fix `ActiveSupport::Inflector.humanize` with international characters.
+
+ ```ruby
+ ActiveSupport::Inflector.humanize("áÉÍÓÚ") # => "Áéíóú"
+ ActiveSupport::Inflector.humanize("аБВГДЕ") # => "Абвгде"
+ ```
+
+ *Jose Luis Duran*
+
+
+## Rails 8.0.4.1 (March 23, 2026) ##
+
+* Reject scientific notation in NumberConverter
+
+ [CVE-2026-33176]
+
+ *Jean Boussier*
+
+* Fix `SafeBuffer#%` to preserve unsafe status
+
+ [CVE-2026-33170]
+
+ *Jean Boussier*
+
+* Improve performance of NumberToDelimitedConverter
+
+ [CVE-2026-33169]
+
+ *Jean Boussier*
+
+
+## Rails 8.0.4 (October 28, 2025) ##
+
+* Fix `Enumerable#sole` to return the full tuple instead of just the first
element of the tuple.
+
+ *Olivier Bellone*
+
+* Fix parallel tests hanging when worker processes die abruptly.
+
+ Previously, if a worker process was killed (e.g., OOM killed, `kill -9`)
during parallel
+ test execution, the test suite would hang forever waiting for the dead
worker.
+
+ *Joshua Young*
+
+* Fix `NameError` when `class_attribute` is defined on instance singleton
classes.
+
+ Previously, calling `class_attribute` on an instance's singleton class
would raise
+ a `NameError` when accessing the attribute through the instance.
+
+ ```ruby
+ object = MyClass.new
+ object.singleton_class.class_attribute :foo, default: "bar"
+ object.foo # previously raised NameError, now returns "bar"
+ ```
+
+ *Joshua Young*
+
+
## Rails 8.0.3 (September 22, 2025) ##
* `ActiveSupport::FileUpdateChecker` does not depend on `Time.now` to
prevent unnecessary reloads with time travel test helpers
@@ -32,11 +113,31 @@
```ruby
>> {a: 1, b: 2}.with_indifferent_access.transform_keys!(&:succ)
- => {"c" => 1, "d" => 2}
+ => {"b" => 1, "c" => 2}
```
*Jason T Johnson*, *Jean Boussier*
+ **Note on overwrite precedence:**
+
+ This fix also changed the overwrite precedence when distinct keys are
transformed into the same key.
+ The later key now overwrites the earlier one (matching standard Ruby
`Hash` behavior).
+ Previously, the earlier key's value was preserved.
+
+ Before:
+
+ ```ruby
+ >> {XY: 1, xy: 2}.with_indifferent_access.transform_keys!(&:downcase)
+ => {"xy"=>1}
+ ```
+
+ After:
+
+ ```ruby
+ >> {XY: 1, xy: 2}.with_indifferent_access.transform_keys!(&:downcase)
+ => {"xy"=>2}
+ ```
+
* Fix `ActiveSupport::Cache::MemCacheStore#read_multi` to handle network
errors.
This method specifically wasn't handling network errors like other
codepaths.
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/cache/mem_cache_store.rb
new/lib/active_support/cache/mem_cache_store.rb
--- old/lib/active_support/cache/mem_cache_store.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/cache/mem_cache_store.rb 1980-01-02
01:00:00.000000000 +0100
@@ -60,7 +60,7 @@
pool_options = retrieve_pool_options(options)
if pool_options
- ConnectionPool.new(pool_options) { Dalli::Client.new(addresses,
options.merge(threadsafe: false)) }
+ ConnectionPool.new(**pool_options) { Dalli::Client.new(addresses,
options.merge(threadsafe: false)) }
else
Dalli::Client.new(addresses, options)
end
@@ -90,6 +90,9 @@
# The value "compress: false" prevents duplicate compression within
Dalli.
@mem_cache_options[:compress] = false
(OVERRIDDEN_OPTIONS - %i(compress)).each { |name|
@mem_cache_options.delete(name) }
+ # Set the default serializer for Dalli to prevent warning about
+ # inheriting the default serializer.
+ @mem_cache_options[:serializer] = Marshal
@data = self.class.build_mem_cache(*(addresses + [@mem_cache_options]))
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/cache/redis_cache_store.rb
new/lib/active_support/cache/redis_cache_store.rb
--- old/lib/active_support/cache/redis_cache_store.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/cache/redis_cache_store.rb 1980-01-02
01:00:00.000000000 +0100
@@ -150,7 +150,7 @@
universal_options = redis_options.extract!(*UNIVERSAL_OPTIONS)
if pool_options = self.class.send(:retrieve_pool_options,
redis_options)
- @redis = ::ConnectionPool.new(pool_options) {
self.class.build_redis(**redis_options) }
+ @redis = ::ConnectionPool.new(**pool_options) {
self.class.build_redis(**redis_options) }
else
@redis = self.class.build_redis(**redis_options)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/core_ext/class/attribute.rb
new/lib/active_support/core_ext/class/attribute.rb
--- old/lib/active_support/core_ext/class/attribute.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/core_ext/class/attribute.rb 1980-01-02
01:00:00.000000000 +0100
@@ -96,14 +96,16 @@
namespaced_name = :"__class_attr_#{name}"
::ActiveSupport::ClassAttribute.redefine(self, name, namespaced_name,
default)
- delegators = [
- "def #{name}; #{namespaced_name}; end",
- "def #{name}=(value); self.#{namespaced_name} = value; end",
- ]
+ class_methods << "def #{name}; #{namespaced_name}; end"
+ class_methods << "def #{name}=(value); self.#{namespaced_name} = value;
end"
- class_methods.concat(delegators)
if singleton_class?
- methods.concat(delegators)
+ methods << <<~RUBY if instance_reader
+ silence_redefinition_of_method(:#{name})
+ def #{name}
+ self.singleton_class.#{name}
+ end
+ RUBY
else
methods << <<~RUBY if instance_reader
silence_redefinition_of_method def #{name}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/core_ext/enumerable.rb
new/lib/active_support/core_ext/enumerable.rb
--- old/lib/active_support/core_ext/enumerable.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/core_ext/enumerable.rb 1980-01-02
01:00:00.000000000 +0100
@@ -212,12 +212,12 @@
result = nil
found = false
- each do |element|
+ each do |*element|
if found
raise SoleItemExpectedError, "multiple items found"
end
- result = element
+ result = element.size == 1 ? element[0] : element
found = true
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/core_ext/object/json.rb
new/lib/active_support/core_ext/object/json.rb
--- old/lib/active_support/core_ext/object/json.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/core_ext/object/json.rb 1980-01-02
01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
require "json"
require "bigdecimal"
require "ipaddr"
-require "uri/generic"
+require "uri"
require "pathname"
require "active_support/core_ext/big_decimal/conversions" # for #to_s
require "active_support/core_ext/hash/except"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/core_ext/string/inflections.rb
new/lib/active_support/core_ext/string/inflections.rb
--- old/lib/active_support/core_ext/string/inflections.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/core_ext/string/inflections.rb 1980-01-02
01:00:00.000000000 +0100
@@ -248,7 +248,7 @@
# optional parameter +capitalize+ to false.
# By default, this parameter is true.
#
- # The trailing '_id' can be kept and capitalized by setting the
+ # The trailing '_id' can be kept by setting the
# optional parameter +keep_id_suffix+ to true.
# By default, this parameter is false.
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/core_ext/string/output_safety.rb
new/lib/active_support/core_ext/string/output_safety.rb
--- old/lib/active_support/core_ext/string/output_safety.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/core_ext/string/output_safety.rb 1980-01-02
01:00:00.000000000 +0100
@@ -128,7 +128,9 @@
escaped_args = Array(args).map { |arg|
explicit_html_escape_interpolated_argument(arg) }
end
- self.class.new(super(escaped_args))
+ new_safe_buffer = self.class.new(super(escaped_args))
+ new_safe_buffer.instance_variable_set(:@html_safe, @html_safe)
+ new_safe_buffer
end
attr_reader :html_safe
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/delegation.rb
new/lib/active_support/delegation.rb
--- old/lib/active_support/delegation.rb 1980-01-02 01:00:00.000000000
+0100
+++ new/lib/active_support/delegation.rb 1980-01-02 01:00:00.000000000
+0100
@@ -134,11 +134,11 @@
"def #{method_name}(#{definition})" <<
" _ = #{receiver}" <<
" _.#{method}(#{definition})" <<
- "rescue NoMethodError => e" <<
+ "rescue ::NoMethodError => e" <<
" if _.nil? && e.name == :#{method}" <<
- " raise
::ActiveSupport::DelegationError.nil_target(:#{method_name}, :'#{receiver}')" <<
+ " ::Kernel.raise
::ActiveSupport::DelegationError.nil_target(:#{method_name}, :'#{receiver}')" <<
" else" <<
- " raise" <<
+ " ::Kernel.raise" <<
" end" <<
"end"
end
@@ -151,49 +151,32 @@
target = target.to_s
target = "self.#{target}" if RESERVED_METHOD_NAMES.include?(target) ||
target == "__target"
- if allow_nil
- owner.module_eval <<~RUBY, __FILE__, __LINE__ + 1
- def respond_to_missing?(name, include_private = false)
- # It may look like an oversight, but we deliberately do not pass
- # +include_private+, because they do not get delegated.
-
- return false if name == :marshal_dump || name == :_dump
- #{target}.respond_to?(name) || super
- end
-
- def method_missing(method, ...)
- __target = #{target}
- if __target.nil? && !nil.respond_to?(method)
- nil
- elsif __target.respond_to?(method)
- __target.public_send(method, ...)
- else
- super
- end
- end
- RUBY
+ nil_behavior = if allow_nil
+ "nil"
else
- owner.module_eval <<~RUBY, __FILE__, __LINE__ + 1
- def respond_to_missing?(name, include_private = false)
- # It may look like an oversight, but we deliberately do not pass
- # +include_private+, because they do not get delegated.
+ "::Kernel.raise ::ActiveSupport::DelegationError.nil_target(method,
:'#{target}')"
+ end
- return false if name == :marshal_dump || name == :_dump
- #{target}.respond_to?(name) || super
- end
+ owner.module_eval <<~RUBY, __FILE__, __LINE__ + 1
+ def respond_to_missing?(name, include_private = false)
+ # It may look like an oversight, but we deliberately do not pass
+ # +include_private+, because they do not get delegated.
+
+ return false if name == :marshal_dump || name == :_dump
+ #{target}.respond_to?(name) || super
+ end
- def method_missing(method, ...)
- __target = #{target}
- if __target.nil? && !nil.respond_to?(method)
- raise ::ActiveSupport::DelegationError.nil_target(method,
:'#{target}')
- elsif __target.respond_to?(method)
- __target.public_send(method, ...)
- else
- super
- end
+ def method_missing(method, ...)
+ __target = #{target}
+ if __target.nil? && !nil.respond_to?(method)
+ #{nil_behavior}
+ elsif __target.respond_to?(method)
+ __target.public_send(method, ...)
+ else
+ super
end
- RUBY
- end
+ end
+ RUBY
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/gem_version.rb
new/lib/active_support/gem_version.rb
--- old/lib/active_support/gem_version.rb 1980-01-02 01:00:00.000000000
+0100
+++ new/lib/active_support/gem_version.rb 1980-01-02 01:00:00.000000000
+0100
@@ -9,7 +9,7 @@
module VERSION
MAJOR = 8
MINOR = 0
- TINY = 3
+ TINY = 5
PRE = nil
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/inflector/inflections.rb
new/lib/active_support/inflector/inflections.rb
--- old/lib/active_support/inflector/inflections.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/inflector/inflections.rb 1980-01-02
01:00:00.000000000 +0100
@@ -248,7 +248,8 @@
private
def define_acronym_regex_patterns
- @acronym_regex = @acronyms.empty? ? /(?=a)b/ :
/#{@acronyms.values.join("|")}/
+ sorted_acronyms = @acronyms.empty? ? [] : @acronyms.values.sort_by {
|a| -a.length }
+ @acronym_regex = sorted_acronyms.empty? ? /(?=a)b/ :
/#{sorted_acronyms.join("|")}/
@acronyms_camelize_regex = /^(?:#{@acronym_regex}(?=\b|[A-Z_])|\w)/
@acronyms_underscore_regex =
/(?:(?<=([A-Za-z\d]))|\b)(#{@acronym_regex})(?=\b|[^a-z])/
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/inflector/methods.rb
new/lib/active_support/inflector/methods.rb
--- old/lib/active_support/inflector/methods.rb 1980-01-02 01:00:00.000000000
+0100
+++ new/lib/active_support/inflector/methods.rb 1980-01-02 01:00:00.000000000
+0100
@@ -119,7 +119,7 @@
# The capitalization of the first word can be turned off by setting the
# +:capitalize+ option to false (default is true).
#
- # The trailing '_id' can be kept and capitalized by setting the
+ # The trailing '_id' can be kept by setting the
# optional parameter +keep_id_suffix+ to true (default is false).
#
# humanize('employee_salary') # => "Employee salary"
@@ -143,13 +143,13 @@
result.delete_suffix!(" id")
end
- result.gsub!(/([a-z\d]+)/i) do |match|
+ result.gsub!(/([[[:alpha:]]\d]+)/i) do |match|
match.downcase!
inflections.acronyms[match] || match
end
if capitalize
- result.sub!(/\A\w/) do |match|
+ result.sub!(/\A[[:alpha:]]/) do |match|
match.upcase!
match
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/isolated_execution_state.rb
new/lib/active_support/isolated_execution_state.rb
--- old/lib/active_support/isolated_execution_state.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/isolated_execution_state.rb 1980-01-02
01:00:00.000000000 +0100
@@ -56,11 +56,13 @@
scope.current
end
- def share_with(other)
+ def share_with(other, except: [])
# Action Controller streaming spawns a new thread and copy thread
locals.
# We do the same here for backward compatibility, but this is very
much a hack
# and streaming should be rethought.
- context.active_support_execution_state =
other.active_support_execution_state.dup
+ state = other.active_support_execution_state.dup
+ Array(except).each { |key| state.delete(key) }
+ context.active_support_execution_state = state
end
private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/message_pack/extensions.rb
new/lib/active_support/message_pack/extensions.rb
--- old/lib/active_support/message_pack/extensions.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/message_pack/extensions.rb 1980-01-02
01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
require "date"
require "ipaddr"
require "pathname"
-require "uri/generic"
+require "uri"
require "msgpack/bigint"
require "active_support/hash_with_indifferent_access"
require "active_support/time"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/notifications/instrumenter.rb
new/lib/active_support/notifications/instrumenter.rb
--- old/lib/active_support/notifications/instrumenter.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/notifications/instrumenter.rb 1980-01-02
01:00:00.000000000 +0100
@@ -164,7 +164,7 @@
@cpu_time_finish - @cpu_time_start
end
- # Returns the idle time time (in milliseconds) passed between the call to
+ # Returns the idle time (in milliseconds) passed between the call to
# #start! and the call to #finish!.
def idle_time
diff = duration - cpu_time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/number_helper/number_converter.rb
new/lib/active_support/number_helper/number_converter.rb
--- old/lib/active_support/number_helper/number_converter.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/number_helper/number_converter.rb 1980-01-02
01:00:00.000000000 +0100
@@ -180,7 +180,7 @@
when Float, Rational
number.to_d(0)
when String
- BigDecimal(number, exception: false)
+ BigDecimal(number, exception: false) unless
number.to_s.match?(/[de]/i)
else
number.to_d rescue nil
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/active_support/number_helper/number_to_delimited_converter.rb
new/lib/active_support/number_helper/number_to_delimited_converter.rb
--- old/lib/active_support/number_helper/number_to_delimited_converter.rb
1980-01-02 01:00:00.000000000 +0100
+++ new/lib/active_support/number_helper/number_to_delimited_converter.rb
1980-01-02 01:00:00.000000000 +0100
@@ -16,9 +16,24 @@
private
def parts
left, right = number.to_s.split(".")
- left.gsub!(delimiter_pattern) do |digit_to_delimit|
- "#{digit_to_delimit}#{options[:delimiter]}"
+ if delimiter_pattern
+ left.gsub!(delimiter_pattern) do |digit_to_delimit|
+ "#{digit_to_delimit}#{options[:delimiter]}"
+ end
+ else
+ left_parts = []
+ offset = left.size % 3
+ if offset > 0
+ left_parts << left[0, offset]
+ end
+
+ (left.size / 3).times do |i|
+ left_parts << left[offset + (i * 3), 3]
+ end
+
+ left = left_parts.join(options[:delimiter])
end
+
[left, right].compact
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/test_case.rb
new/lib/active_support/test_case.rb
--- old/lib/active_support/test_case.rb 1980-01-02 01:00:00.000000000 +0100
+++ new/lib/active_support/test_case.rb 1980-01-02 01:00:00.000000000 +0100
@@ -45,6 +45,12 @@
ActiveSupport.test_order ||= :random
end
+ if Minitest.respond_to? :run_order # MT6 API change
+ def run_order # :nodoc:
+ test_order
+ end
+ end
+
# Parallelizes the test suite.
#
# Takes a +workers+ argument that controls how many times the process
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/testing/assertions.rb
new/lib/active_support/testing/assertions.rb
--- old/lib/active_support/testing/assertions.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/testing/assertions.rb 1980-01-02
01:00:00.000000000 +0100
@@ -120,7 +120,8 @@
actual = exp.call
rich_message = -> do
code_string = code.respond_to?(:call) ?
_callable_to_source_string(code) : code
- error = "`#{code_string}` didn't change by #{diff}, but by
#{actual - before_value}"
+ error = "`#{code_string}` didn't change by #{diff}, but by
#{actual - before_value}."
+ error = "#{error}\n#{diff before_value + diff, actual}" if
Minitest::VERSION > "6"
error = "#{message}.\n#{error}" if message
error
end
@@ -212,7 +213,7 @@
rich_message = -> do
code_string = expression.respond_to?(:call) ?
_callable_to_source_string(expression) : expression
error = "`#{code_string}` didn't change"
- error = "#{error}. It was already #{to.inspect}" if before == to
+ error = "#{error}. It was already #{to.inspect}." if before == to
error = "#{message}.\n#{error}" if message
error
end
@@ -268,8 +269,9 @@
rich_message = -> do
code_string = expression.respond_to?(:call) ?
_callable_to_source_string(expression) : expression
- error = "`#{code_string}` changed"
+ error = "`#{code_string}` changed."
error = "#{message}.\n#{error}" if message
+ error = "#{error}\n#{diff before, after}" if Minitest::VERSION > "6"
error
end
@@ -318,6 +320,9 @@
lines[0] = lines[0].byteslice(location[1]...)
source = lines.join.strip
+ # Strip stabby lambda from Ruby 4.1+
+ source = source.sub(/^->\s*/, "")
+
# We ignore procs defined with do/end as they are likely
multi-line anyway.
if source.start_with?("{")
source.delete_suffix!("}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/testing/autorun.rb
new/lib/active_support/testing/autorun.rb
--- old/lib/active_support/testing/autorun.rb 1980-01-02 01:00:00.000000000
+0100
+++ new/lib/active_support/testing/autorun.rb 1980-01-02 01:00:00.000000000
+0100
@@ -2,4 +2,9 @@
require "minitest"
+# This respond_to check handles tests running sub-processes in an
+# unbundled environment, which triggers MT5 usage. This conditional may
+# be removable after the version bump, though it currently safeguards
+# against issues in environments with multiple versions installed.
+Minitest.load :rails if Minitest.respond_to? :load
Minitest.autorun
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/testing/parallelization/server.rb
new/lib/active_support/testing/parallelization/server.rb
--- old/lib/active_support/testing/parallelization/server.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/testing/parallelization/server.rb 1980-01-02
01:00:00.000000000 +0100
@@ -14,6 +14,7 @@
def initialize
@queue = Queue.new
@active_workers = Concurrent::Map.new
+ @worker_pids = Concurrent::Map.new
@in_flight = Concurrent::Map.new
end
@@ -40,12 +41,24 @@
end
end
- def start_worker(worker_id)
+ def start_worker(worker_id, worker_pid)
@active_workers[worker_id] = true
+ @worker_pids[worker_id] = worker_pid
end
- def stop_worker(worker_id)
+ def stop_worker(worker_id, worker_pid)
@active_workers.delete(worker_id)
+ @worker_pids.delete(worker_id)
+ end
+
+ def remove_dead_workers(dead_pids)
+ dead_pids.each do |dead_pid|
+ worker_id = @worker_pids.key(dead_pid)
+ if worker_id
+ @active_workers.delete(worker_id)
+ @worker_pids.delete(worker_id)
+ end
+ end
end
def active_workers?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/testing/parallelization/worker.rb
new/lib/active_support/testing/parallelization/worker.rb
--- old/lib/active_support/testing/parallelization/worker.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/testing/parallelization/worker.rb 1980-01-02
01:00:00.000000000 +0100
@@ -18,7 +18,7 @@
DRb.stop_service
@queue = DRbObject.new_with_uri(@url)
- @queue.start_worker(@id)
+ @queue.start_worker(@id, Process.pid)
begin
after_fork
@@ -29,7 +29,7 @@
set_process_title("(stopping)")
run_cleanup
- @queue.stop_worker(@id)
+ @queue.stop_worker(@id, Process.pid)
end
end
@@ -47,7 +47,11 @@
set_process_title("#{klass}##{method}")
result = klass.with_info_handler reporter do
- Minitest.run_one_method(klass, method)
+ if Minitest.respond_to? :run_one_method
+ Minitest.run_one_method klass, method
+ else
+ klass.new(method).run
+ end
end
safe_record(reporter, result)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/testing/parallelization.rb
new/lib/active_support/testing/parallelization.rb
--- old/lib/active_support/testing/parallelization.rb 1980-01-02
01:00:00.000000000 +0100
+++ new/lib/active_support/testing/parallelization.rb 1980-01-02
01:00:00.000000000 +0100
@@ -47,8 +47,19 @@
end
def shutdown
+ dead_worker_pids = @worker_pool.filter_map do |pid|
+ Process.waitpid(pid, Process::WNOHANG)
+ rescue Errno::ECHILD
+ pid
+ end
+ @queue_server.remove_dead_workers(dead_worker_pids)
+
@queue_server.shutdown
- @worker_pool.each { |pid| Process.waitpid pid }
+ @worker_pool.each do |pid|
+ Process.waitpid(pid)
+ rescue Errno::ECHILD
+ nil
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/active_support/xml_mini.rb
new/lib/active_support/xml_mini.rb
--- old/lib/active_support/xml_mini.rb 1980-01-02 01:00:00.000000000 +0100
+++ new/lib/active_support/xml_mini.rb 1980-01-02 01:00:00.000000000 +0100
@@ -74,6 +74,8 @@
"decimal" => Proc.new do |number|
if String === number
number.to_d
+ elsif Float === number
+ BigDecimal(number, 0)
else
BigDecimal(number)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 1980-01-02 01:00:00.000000000 +0100
+++ new/metadata 1980-01-02 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: activesupport
version: !ruby/object:Gem::Version
- version: 8.0.3
+ version: 8.0.5
platform: ruby
authors:
- David Heinemeier Hansson
@@ -494,10 +494,10 @@
- MIT
metadata:
bug_tracker_uri: https://github.com/rails/rails/issues
- changelog_uri:
https://github.com/rails/rails/blob/v8.0.3/activesupport/CHANGELOG.md
- documentation_uri: https://api.rubyonrails.org/v8.0.3/
+ changelog_uri:
https://github.com/rails/rails/blob/v8.0.5/activesupport/CHANGELOG.md
+ documentation_uri: https://api.rubyonrails.org/v8.0.5/
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
- source_code_uri: https://github.com/rails/rails/tree/v8.0.3/activesupport
+ source_code_uri: https://github.com/rails/rails/tree/v8.0.5/activesupport
rubygems_mfa_required: 'true'
rdoc_options:
- "--encoding"
@@ -515,7 +515,7 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubygems_version: 3.6.9
+rubygems_version: 4.0.6
specification_version: 4
summary: A toolkit of support libraries and Ruby core extensions extracted
from the
Rails framework.