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.

Reply via email to