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 2025-08-22 17:49:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activesupport-8.0 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-activesupport-8.0.new.29662 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-activesupport-8.0"

Fri Aug 22 17:49:24 2025 rev:4 rq:1300935 version:8.0.2.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/rubygem-activesupport-8.0/rubygem-activesupport-8.0.changes
      2025-01-21 21:10:29.731028681 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-activesupport-8.0.new.29662/rubygem-activesupport-8.0.changes
   2025-08-22 17:50:59.075900827 +0200
@@ -1,0 +2,6 @@
+Thu Aug 14 00:25:21 UTC 2025 - Marcus Rueckert <mrueck...@suse.de>
+
+- Update to version 8.0.2.1:
+  
https://rubyonrails.org/2025/8/13/Rails-Versions-8-0-2-1-7-2-2-2-and-7-1-5-2-have-been-released
+
+-------------------------------------------------------------------

Old:
----
  activesupport-8.0.1.gem

New:
----
  activesupport-8.0.2.1.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-activesupport-8.0.spec ++++++
--- /var/tmp/diff_new_pack.gfSNWf/_old  2025-08-22 17:50:59.495918331 +0200
+++ /var/tmp/diff_new_pack.gfSNWf/_new  2025-08-22 17:50:59.499918497 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package rubygem-activesupport-8.0
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 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.1
+Version:        8.0.2.1
 Release:        0
 %define mod_name activesupport
 %define mod_full_name %{mod_name}-%{version}

++++++ activesupport-8.0.1.gem -> activesupport-8.0.2.1.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2024-12-13 21:02:34.000000000 +0100
+++ new/CHANGELOG.md    1980-01-02 01:00:00.000000000 +0100
@@ -1,3 +1,106 @@
+## Rails 8.0.2.1 (August 13, 2025) ##
+
+*   No changes.
+
+
+## Rails 8.0.2 (March 12, 2025) ##
+
+*   No changes.
+
+
+## Rails 8.0.2 (March 12, 2025) ##
+
+*   Fix setting `to_time_preserves_timezone` from 
`new_framework_defaults_8_0.rb`.
+
+    *fatkodima*
+
+*   Fix Active Support Cache `fetch_multi` when local store is active.
+
+    `fetch_multi` now properly yield to the provided block for missing entries
+    that have been recorded as such in the local store.
+
+    *Jean Boussier*
+
+*   Fix execution wrapping to report all exceptions, including `Exception`.
+
+    If a more serious error like `SystemStackError` or `NoMemoryError` happens,
+    the error reporter should be able to report these kinds of exceptions.
+
+    *Gannon McGibbon*
+
+*   Fix `RedisCacheStore` and `MemCacheStore` to also handle connection pool 
related errors.
+
+    These errors are rescued and reported to `Rails.error`.
+
+    *Jean Boussier*
+
+*   Fix `ActiveSupport::Cache#read_multi` to respect version expiry when using 
local cache.
+
+    *zzak*
+
+*   Fix `ActiveSupport::MessageVerifier` and `ActiveSupport::MessageEncryptor` 
configuration of `on_rotation` callback.
+
+    ```ruby
+    verifier.rotate(old_secret).on_rotation { ... }
+    ```
+
+    Now both work as documented.
+
+    *Jean Boussier*
+
+*   Fix `ActiveSupport::MessageVerifier` to always be able to verify both 
URL-safe and URL-unsafe payloads.
+
+    This is to allow transitioning seemlessly from either configuration 
without immediately invalidating
+    all previously generated signed messages.
+
+    *Jean Boussier*, *Florent Beaurain*, *Ali Sepehri*
+
+*   Fix `cache.fetch` to honor the provided expiry when `:race_condition_ttl` 
is used.
+
+    ```ruby
+    cache.fetch("key", expires_in: 1.hour, race_condition_ttl: 5.second) do
+      "something"
+    end
+    ```
+
+    In the above example, the final cache entry would have a 10 seconds TTL 
instead
+    of the requested 1 hour.
+
+    *Dhia*
+
+*   Better handle procs with splat arguments in `set_callback`.
+
+    *Radamés Roriz*
+
+*   Fix `String#mb_chars` to not mutate the receiver.
+
+    Previously it would call `force_encoding` on the receiver,
+    now it dups the receiver first.
+
+    *Jean Boussier*
+
+*   Improve `ErrorSubscriber` to also mark error causes as reported.
+
+    This avoid some cases of errors being reported twice, notably in views 
because of how
+    errors are wrapped in `ActionView::Template::Error`.
+
+    *Jean Boussier*
+
+*   Fix `Module#module_parent_name` to return the correct name after the 
module has been named.
+
+    When called on an anonymous module, the return value wouldn't change after 
the module was given a name
+    later by being assigned to a constant.
+
+    ```ruby
+    mod = Module.new
+    mod.module_parent_name # => "Object"
+    MyModule::Something = mod
+    mod.module_parent_name # => "MyModule"
+    ```
+
+    *Jean Boussier*
+
+
 ## Rails 8.0.1 (December 13, 2024) ##
 
 *   Fix a bug in `ERB::Util.tokenize` that causes incorrect tokenization when 
ERB tags are preceeded by multibyte characters.
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/backtrace_cleaner.rb 
new/lib/active_support/backtrace_cleaner.rb
--- old/lib/active_support/backtrace_cleaner.rb 2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/backtrace_cleaner.rb 1980-01-02 01:00:00.000000000 
+0100
@@ -79,7 +79,7 @@
     #
     #   # Will turn "/my/rails/root/app/models/person.rb" into 
"app/models/person.rb"
     #   root = "#{Rails.root}/"
-    #   backtrace_cleaner.add_filter { |line| line.start_with?(root) ? 
line.from(root.size) : line }
+    #   backtrace_cleaner.add_filter { |line| line.delete_prefix(root) }
     def add_filter(&block)
       @filters << block
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/broadcast_logger.rb 
new/lib/active_support/broadcast_logger.rb
--- old/lib/active_support/broadcast_logger.rb  2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/broadcast_logger.rb  1980-01-02 01:00:00.000000000 
+0100
@@ -163,57 +163,57 @@
       dispatch { |logger| logger.close }
     end
 
-    # +True+ if the log level allows entries with severity Logger::DEBUG to be 
written
-    # to at least one broadcast. +False+ otherwise.
+    # True if the log level allows entries with severity +Logger::DEBUG+ to be 
written
+    # to at least one broadcast. False otherwise.
     def debug?
       @broadcasts.any? { |logger| logger.debug? }
     end
 
-    # Sets the log level to Logger::DEBUG for the whole broadcast.
+    # Sets the log level to +Logger::DEBUG+ for the whole broadcast.
     def debug!
       dispatch { |logger| logger.debug! }
     end
 
-    # +True+ if the log level allows entries with severity Logger::INFO to be 
written
-    # to at least one broadcast. +False+ otherwise.
+    # True if the log level allows entries with severity +Logger::INFO+ to be 
written
+    # to at least one broadcast. False otherwise.
     def info?
       @broadcasts.any? { |logger| logger.info? }
     end
 
-    # Sets the log level to Logger::INFO for the whole broadcast.
+    # Sets the log level to +Logger::INFO+ for the whole broadcast.
     def info!
       dispatch { |logger| logger.info! }
     end
 
-    # +True+ if the log level allows entries with severity Logger::WARN to be 
written
-    # to at least one broadcast. +False+ otherwise.
+    # True if the log level allows entries with severity +Logger::WARN+ to be 
written
+    # to at least one broadcast. False otherwise.
     def warn?
       @broadcasts.any? { |logger| logger.warn? }
     end
 
-    # Sets the log level to Logger::WARN for the whole broadcast.
+    # Sets the log level to +Logger::WARN+ for the whole broadcast.
     def warn!
       dispatch { |logger| logger.warn! }
     end
 
-    # +True+ if the log level allows entries with severity Logger::ERROR to be 
written
-    # to at least one broadcast. +False+ otherwise.
+    # True if the log level allows entries with severity +Logger::ERROR+ to be 
written
+    # to at least one broadcast. False otherwise.
     def error?
       @broadcasts.any? { |logger| logger.error? }
     end
 
-    # Sets the log level to Logger::ERROR for the whole broadcast.
+    # Sets the log level to +Logger::ERROR+ for the whole broadcast.
     def error!
       dispatch { |logger| logger.error! }
     end
 
-    # +True+ if the log level allows entries with severity Logger::FATAL to be 
written
-    # to at least one broadcast. +False+ otherwise.
+    # True if the log level allows entries with severity +Logger::FATAL+ to be 
written
+    # to at least one broadcast. False otherwise.
     def fatal?
       @broadcasts.any? { |logger| logger.fatal? }
     end
 
-    # Sets the log level to Logger::FATAL for the whole broadcast.
+    # Sets the log level to +Logger::FATAL+ for the whole broadcast.
     def fatal!
       dispatch { |logger| logger.fatal! }
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/cache/file_store.rb 
new/lib/active_support/cache/file_store.rb
--- old/lib/active_support/cache/file_store.rb  2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/cache/file_store.rb  1980-01-02 01:00:00.000000000 
+0100
@@ -57,7 +57,7 @@
       #   cache.write("baz", 5)
       #   cache.increment("baz") # => 6
       #
-      def increment(name, amount = 1, options = nil)
+      def increment(name, amount = 1, **options)
         options = merged_options(options)
         key = normalize_key(name, options)
 
@@ -77,7 +77,7 @@
       #   cache.write("baz", 5)
       #   cache.decrement("baz") # => 4
       #
-      def decrement(name, amount = 1, options = nil)
+      def decrement(name, amount = 1, **options)
         options = merged_options(options)
         key = normalize_key(name, options)
 
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     2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/cache/mem_cache_store.rb     1980-01-02 
01:00:00.000000000 +0100
@@ -276,7 +276,7 @@
 
         def rescue_error_with(fallback)
           yield
-        rescue Dalli::DalliError => error
+        rescue Dalli::DalliError, ConnectionPool::Error, 
ConnectionPool::TimeoutError => error
           logger.error("DalliError (#{error}): #{error.message}") if logger
           ActiveSupport.error_reporter&.report(
             error,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/cache/memory_store.rb 
new/lib/active_support/cache/memory_store.rb
--- old/lib/active_support/cache/memory_store.rb        2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/cache/memory_store.rb        1980-01-02 
01:00:00.000000000 +0100
@@ -146,9 +146,9 @@
       #   cache.write("baz", 5)
       #   cache.increment("baz") # => 6
       #
-      def increment(name, amount = 1, options = nil)
+      def increment(name, amount = 1, **options)
         instrument(:increment, name, amount: amount) do
-          modify_value(name, amount, options)
+          modify_value(name, amount, **options)
         end
       end
 
@@ -163,9 +163,9 @@
       #   cache.write("baz", 5)
       #   cache.decrement("baz") # => 4
       #
-      def decrement(name, amount = 1, options = nil)
+      def decrement(name, amount = 1, **options)
         instrument(:decrement, name, amount: amount) do
-          modify_value(name, -amount, options)
+          modify_value(name, -amount, **options)
         end
       end
 
@@ -238,7 +238,7 @@
 
         # Modifies the amount of an integer value that is stored in the cache.
         # If the key is not found it is created and set to +amount+.
-        def modify_value(name, amount, options)
+        def modify_value(name, amount, **options)
           options = merged_options(options)
           key     = normalize_key(name, options)
           version = normalize_version(name, options)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/cache/null_store.rb 
new/lib/active_support/cache/null_store.rb
--- old/lib/active_support/cache/null_store.rb  2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/cache/null_store.rb  1980-01-02 01:00:00.000000000 
+0100
@@ -25,10 +25,10 @@
       def cleanup(options = nil)
       end
 
-      def increment(name, amount = 1, options = nil)
+      def increment(name, amount = 1, **options)
       end
 
-      def decrement(name, amount = 1, options = nil)
+      def decrement(name, amount = 1, **options)
       end
 
       def delete_matched(matcher, options = nil)
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   2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/cache/redis_cache_store.rb   1980-01-02 
01:00:00.000000000 +0100
@@ -483,7 +483,7 @@
 
         def failsafe(method, returning: nil)
           yield
-        rescue ::Redis::BaseError => error
+        rescue ::Redis::BaseError, ConnectionPool::Error, 
ConnectionPool::TimeoutError => error
           @error_handler&.call(method: method, exception: error, returning: 
returning)
           returning
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/cache/strategy/local_cache.rb 
new/lib/active_support/cache/strategy/local_cache.rb
--- old/lib/active_support/cache/strategy/local_cache.rb        2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/cache/strategy/local_cache.rb        1980-01-02 
01:00:00.000000000 +0100
@@ -94,28 +94,54 @@
           super
         end
 
-        def increment(name, amount = 1, options = nil) # :nodoc:
+        def increment(name, amount = 1, **options) # :nodoc:
           return super unless local_cache
           value = bypass_local_cache { super }
-          if options
-            write_cache_value(name, value, raw: true, **options)
-          else
-            write_cache_value(name, value, raw: true)
-          end
+          write_cache_value(name, value, raw: true, **options)
           value
         end
 
-        def decrement(name, amount = 1, options = nil) # :nodoc:
+        def decrement(name, amount = 1, **options) # :nodoc:
           return super unless local_cache
           value = bypass_local_cache { super }
-          if options
-            write_cache_value(name, value, raw: true, **options)
-          else
-            write_cache_value(name, value, raw: true)
-          end
+          write_cache_value(name, value, raw: true, **options)
           value
         end
 
+        def fetch_multi(*names, &block) # :nodoc:
+          return super if local_cache.nil? || names.empty?
+
+          options = names.extract_options!
+          options = merged_options(options)
+
+          keys_to_names = names.index_by { |name| normalize_key(name, options) 
}
+
+          local_entries = local_cache.read_multi_entries(keys_to_names.keys)
+          results = local_entries.each_with_object({}) do |(key, value), 
result|
+            # If we recorded a miss in the local cache, `#fetch_multi` will 
forward
+            # that key to the real store, and the entry will be replaced
+            # local_cache.delete_entry(key)
+            next if value.nil?
+
+            entry = deserialize_entry(value, **options)
+
+            normalized_key = keys_to_names[key]
+            if entry.nil?
+              result[normalized_key] = nil
+            elsif entry.expired? || 
entry.mismatched?(normalize_version(normalized_key, options))
+              local_cache.delete_entry(key)
+            else
+              result[normalized_key] = entry.value
+            end
+          end
+
+          if results.size < names.size
+            results.merge!(super(*(names - results.keys), options, &block))
+          end
+
+          results
+        end
+
         private
           def read_serialized_entry(key, raw: false, **options)
             if cache = local_cache
@@ -137,17 +163,27 @@
             keys_to_names = names.index_by { |name| normalize_key(name, 
options) }
 
             local_entries = local_cache.read_multi_entries(keys_to_names.keys)
-            local_entries.transform_keys! { |key| keys_to_names[key] }
-            local_entries.transform_values! do |payload|
-              deserialize_entry(payload, **options)&.value
+
+            results = local_entries.each_with_object({}) do |(key, value), 
result|
+              next if value.nil? # recorded cache miss
+
+              entry = deserialize_entry(value, **options)
+
+              normalized_key = keys_to_names[key]
+              if entry.nil?
+                result[normalized_key] = nil
+              elsif entry.expired? || 
entry.mismatched?(normalize_version(normalized_key, options))
+                local_cache.delete_entry(key)
+              else
+                result[normalized_key] = entry.value
+              end
             end
-            missed_names = names - local_entries.keys
 
-            if missed_names.any?
-              local_entries.merge!(super(missed_names, **options))
-            else
-              local_entries
+            if results.size < names.size
+              results.merge!(super(names - results.keys, **options))
             end
+
+            results
           end
 
           def write_serialized_entry(key, payload, **)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/cache.rb 
new/lib/active_support/cache.rb
--- old/lib/active_support/cache.rb     2024-12-13 21:02:34.000000000 +0100
+++ new/lib/active_support/cache.rb     1980-01-02 01:00:00.000000000 +0100
@@ -386,7 +386,7 @@
       #   process can try to generate a new value after the extended time 
window
       #   has elapsed.
       #
-      #     # Set all values to expire after one minute.
+      #     # Set all values to expire after one second.
       #     cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 1)
       #
       #     cache.write("foo", "original value")
@@ -1035,8 +1035,7 @@
               # When an entry has a positive :race_condition_ttl defined, put 
the stale entry back into the cache
               # for a brief period while the entry is being recalculated.
               entry.expires_at = Time.now.to_f + race_ttl
-              options[:expires_in] = race_ttl * 2
-              write_entry(key, entry, **options)
+              write_entry(key, entry, **options, expires_in: race_ttl * 2)
             else
               delete_entry(key, **options)
             end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/callbacks.rb 
new/lib/active_support/callbacks.rb
--- old/lib/active_support/callbacks.rb 2024-12-13 21:02:34.000000000 +0100
+++ new/lib/active_support/callbacks.rb 1980-01-02 01:00:00.000000000 +0100
@@ -498,9 +498,10 @@
           when Conditionals::Value
             ProcCall.new(filter)
           when ::Proc
-            if filter.arity > 1
+            case filter.arity
+            when 2
               InstanceExec2.new(filter)
-            elsif filter.arity > 0
+            when 1, -2
               InstanceExec1.new(filter)
             else
               InstanceExec0.new(filter)
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       2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/core_ext/enumerable.rb       1980-01-02 
01:00:00.000000000 +0100
@@ -203,7 +203,7 @@
   end
 
   # Returns the sole item in the enumerable. If there are no items, or more
-  # than one item, raises +Enumerable::SoleItemExpectedError+.
+  # than one item, raises Enumerable::SoleItemExpectedError.
   #
   #   ["x"].sole          # => "x"
   #   Set.new.sole        # => Enumerable::SoleItemExpectedError: no item found
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/core_ext/hash/deep_merge.rb 
new/lib/active_support/core_ext/hash/deep_merge.rb
--- old/lib/active_support/core_ext/hash/deep_merge.rb  2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/core_ext/hash/deep_merge.rb  1980-01-02 
01:00:00.000000000 +0100
@@ -36,6 +36,7 @@
   #--
   # Implemented by ActiveSupport::DeepMergeable#deep_merge!.
 
+  ##
   def deep_merge?(other) # :nodoc:
     other.is_a?(Hash)
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/core_ext/module/introspection.rb 
new/lib/active_support/core_ext/module/introspection.rb
--- old/lib/active_support/core_ext/module/introspection.rb     2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/core_ext/module/introspection.rb     1980-01-02 
01:00:00.000000000 +0100
@@ -10,6 +10,9 @@
     if defined?(@parent_name)
       @parent_name
     else
+      name = self.name
+      return if name.nil?
+
       parent_name = name =~ /::[^:]+\z/ ? -$` : nil
       @parent_name = parent_name unless frozen?
       parent_name
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/current_attributes.rb 
new/lib/active_support/current_attributes.rb
--- old/lib/active_support/current_attributes.rb        2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/current_attributes.rb        1980-01-02 
01:00:00.000000000 +0100
@@ -187,7 +187,7 @@
           super
           return if name == :initialize
           return unless public_method_defined?(name)
-          return if respond_to?(name, true)
+          return if singleton_class.method_defined?(name) || 
singleton_class.private_method_defined?(name)
           Delegation.generate(singleton_class, [name], to: :instance, as: 
self, nilable: false)
         end
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/error_reporter.rb 
new/lib/active_support/error_reporter.rb
--- old/lib/active_support/error_reporter.rb    2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/error_reporter.rb    1980-01-02 01:00:00.000000000 
+0100
@@ -207,6 +207,12 @@
     #
     #   Rails.error.report(error)
     #
+    # The +error+ argument must be an instance of Exception.
+    #
+    #   Rails.error.report(Exception.new("Something went wrong"))
+    #
+    # Otherwise you can use #unexpected to report an error which does accept a
+    # string argument.
     def report(error, handled: true, severity: handled ? :warning : :error, 
context: {}, source: DEFAULT_SOURCE)
       return if error.instance_variable_defined?(:@__rails_error_reported)
       ensure_backtrace(error)
@@ -232,8 +238,11 @@
         end
       end
 
-      unless error.frozen?
-        error.instance_variable_set(:@__rails_error_reported, true)
+      while error
+        unless error.frozen?
+          error.instance_variable_set(:@__rails_error_reported, true)
+        end
+        error = error.cause
       end
 
       nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/execution_wrapper.rb 
new/lib/active_support/execution_wrapper.rb
--- old/lib/active_support/execution_wrapper.rb 2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/execution_wrapper.rb 1980-01-02 01:00:00.000000000 
+0100
@@ -89,7 +89,7 @@
       instance = run!
       begin
         yield
-      rescue => error
+      rescue Exception => error
         error_reporter&.report(error, handled: false, source: source)
         raise
       ensure
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       2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/gem_version.rb       1980-01-02 01:00:00.000000000 
+0100
@@ -9,8 +9,8 @@
   module VERSION
     MAJOR = 8
     MINOR = 0
-    TINY  = 1
-    PRE   = nil
+    TINY  = 2
+    PRE   = "1"
 
     STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/json/encoding.rb 
new/lib/active_support/json/encoding.rb
--- old/lib/active_support/json/encoding.rb     2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/json/encoding.rb     1980-01-02 01:00:00.000000000 
+0100
@@ -13,12 +13,30 @@
   end
 
   module JSON
-    # Dumps objects in JSON (JavaScript Object Notation).
-    # See http://www.json.org for more info.
-    #
-    #   ActiveSupport::JSON.encode({ team: 'rails', players: '36' })
-    #   # => "{\"team\":\"rails\",\"players\":\"36\"}"
     class << self
+      # Dumps objects in JSON (JavaScript Object Notation).
+      # See http://www.json.org for more info.
+      #
+      #   ActiveSupport::JSON.encode({ team: 'rails', players: '36' })
+      #   # => "{\"team\":\"rails\",\"players\":\"36\"}"
+      #
+      # Generates JSON that is safe to include in JavaScript as it escapes
+      # U+2028 (Line Separator) and U+2029 (Paragraph Separator):
+      #
+      #   ActiveSupport::JSON.encode({ key: "\u2028" })
+      #   # => "{\"key\":\"\\u2028\"}"
+      #
+      # By default, it also generates JSON that is safe to include in HTML, as
+      # it escapes <tt><</tt>, <tt>></tt>, and <tt>&</tt>:
+      #
+      #   ActiveSupport::JSON.encode({ key: "<>&" })
+      #   # => "{\"key\":\"\\u003c\\u003e\\u0026\"}"
+      #
+      # This can be changed with the +escape_html_entities+ option, or the
+      # global escape_html_entities_in_json configuration option.
+      #
+      #   ActiveSupport::JSON.encode({ key: "<>&" }, escape_html_entities: 
false)
+      #   # => "{\"key\":\"<>&\"}"
       def encode(value, options = nil)
         Encoding.json_encoder.new(options).encode(value)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/message_encryptors.rb 
new/lib/active_support/message_encryptors.rb
--- old/lib/active_support/message_encryptors.rb        2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/message_encryptors.rb        1980-01-02 
01:00:00.000000000 +0100
@@ -28,8 +28,8 @@
     # <tt>transitional = false</tt>.
 
     ##
-    # :method: initialize
-    # :call-seq: initialize(&secret_generator)
+    # :singleton-method: new
+    # :call-seq: new(&secret_generator)
     #
     # Initializes a new instance. +secret_generator+ must accept a salt and a
     # +secret_length+ kwarg, and return a suitable secret (string) or secrets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/message_verifier.rb 
new/lib/active_support/message_verifier.rb
--- old/lib/active_support/message_verifier.rb  2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/message_verifier.rb  1980-01-02 01:00:00.000000000 
+0100
@@ -154,6 +154,8 @@
     #   not URL-safe. In other words, they can contain "+" and "/". If you 
want to
     #   generate URL-safe strings (in compliance with "Base 64 Encoding with 
URL
     #   and Filename Safe Alphabet" in RFC 4648), you can pass +true+.
+    #   Note that MessageVerifier will always accept both URL-safe and 
URL-unsafe
+    #   encoded messages, to allow a smooth transition between the two 
settings.
     #
     # [+:force_legacy_metadata_serializer+]
     #   Whether to use the legacy metadata serializer, which serializes the
@@ -318,6 +320,13 @@
     end
 
     private
+      def decode(encoded, url_safe: @url_safe)
+        catch :invalid_message_format do
+          return super
+        end
+        super(encoded, url_safe: !url_safe)
+      end
+
       def sign_encoded(encoded)
         digest = generate_digest(encoded)
         encoded << SEPARATOR << digest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/message_verifiers.rb 
new/lib/active_support/message_verifiers.rb
--- old/lib/active_support/message_verifiers.rb 2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/message_verifiers.rb 1980-01-02 01:00:00.000000000 
+0100
@@ -28,8 +28,8 @@
     # <tt>transitional = false</tt>.
 
     ##
-    # :method: initialize
-    # :call-seq: initialize(&secret_generator)
+    # :singleton-method: new
+    # :call-seq: new(&secret_generator)
     #
     # Initializes a new instance. +secret_generator+ must accept a salt, and
     # return a suitable secret (string). +secret_generator+ may also accept
@@ -59,7 +59,9 @@
 
     ##
     # :method: rotate
-    # :call-seq: rotate(**options)
+    # :call-seq:
+    #   rotate(**options)
+    #   rotate(&block)
     #
     # Adds +options+ to the list of option sets. Messages will be signed using
     # the first set in the list. When verifying, however, each set will be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/messages/rotator.rb 
new/lib/active_support/messages/rotator.rb
--- old/lib/active_support/messages/rotator.rb  2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/messages/rotator.rb  1980-01-02 01:00:00.000000000 
+0100
@@ -15,6 +15,11 @@
         fall_back_to build_rotation(*args, **options)
       end
 
+      def on_rotation(&on_rotation)
+        @on_rotation = on_rotation
+        self
+      end
+
       def fall_back_to(fallback)
         @rotations << fallback
         self
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/multibyte/chars.rb 
new/lib/active_support/multibyte/chars.rb
--- old/lib/active_support/multibyte/chars.rb   2024-12-13 21:02:34.000000000 
+0100
+++ new/lib/active_support/multibyte/chars.rb   1980-01-02 01:00:00.000000000 
+0100
@@ -55,7 +55,10 @@
       # Creates a new Chars instance by wrapping _string_.
       def initialize(string)
         @wrapped_string = string
-        @wrapped_string.force_encoding(Encoding::UTF_8) unless 
@wrapped_string.frozen?
+        if string.encoding != Encoding::UTF_8
+          @wrapped_string = @wrapped_string.dup
+          @wrapped_string.force_encoding(Encoding::UTF_8)
+        end
       end
 
       # Forward all undefined methods to the wrapped string.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/railtie.rb 
new/lib/active_support/railtie.rb
--- old/lib/active_support/railtie.rb   2024-12-13 21:02:34.000000000 +0100
+++ new/lib/active_support/railtie.rb   1980-01-02 01:00:00.000000000 +0100
@@ -97,7 +97,9 @@
     end
 
     initializer "active_support.to_time_preserves_timezone" do |app|
-      ActiveSupport.to_time_preserves_timezone = 
app.config.active_support.to_time_preserves_timezone
+      config.after_initialize do
+        ActiveSupport.to_time_preserves_timezone = 
app.config.active_support.to_time_preserves_timezone
+      end
     end
 
     # Sets the default week start
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_support/testing/strict_warnings.rb 
new/lib/active_support/testing/strict_warnings.rb
--- old/lib/active_support/testing/strict_warnings.rb   2024-12-13 
21:02:34.000000000 +0100
+++ new/lib/active_support/testing/strict_warnings.rb   1970-01-01 
01:00:00.000000000 +0100
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-$VERBOSE = true
-Warning[:deprecated] = true
-
-module ActiveSupport
-  module RaiseWarnings # :nodoc:
-    class WarningError < StandardError; end
-
-    PROJECT_ROOT = File.expand_path("../../../../", __dir__)
-    ALLOWED_WARNINGS = Regexp.union(
-      /circular require considered harmful.*delayed_job/, # Bug in delayed job.
-
-      # Expected non-verbose warning emitted by Rails.
-      /Ignoring .*\.yml because it has expired/,
-      /Failed to validate the schema cache because/,
-
-      # TODO: We need to decide what to do with this.
-      /Status code :unprocessable_entity is deprecated/,
-    )
-
-    SUPPRESSED_WARNINGS = Regexp.union(
-      # TODO: remove if https://github.com/mikel/mail/pull/1557 or similar fix
-      %r{/lib/mail/parsers/.*statement not reached},
-      %r{/lib/mail/parsers/.*assigned but unused variable - disp_type_s},
-      %r{/lib/mail/parsers/.*assigned but unused variable - testEof}
-    )
-
-    def warn(message, ...)
-      return if SUPPRESSED_WARNINGS.match?(message)
-
-      super
-
-      return unless message.include?(PROJECT_ROOT)
-      return if ALLOWED_WARNINGS.match?(message)
-      return unless ENV["RAILS_STRICT_WARNINGS"] || ENV["BUILDKITE"]
-
-      raise WarningError.new(message)
-    end
-  end
-end
-
-Warning.singleton_class.prepend(ActiveSupport::RaiseWarnings)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2024-12-13 21:02:34.000000000 +0100
+++ new/metadata        1980-01-02 01:00:00.000000000 +0100
@@ -1,14 +1,13 @@
 --- !ruby/object:Gem::Specification
 name: activesupport
 version: !ruby/object:Gem::Version
-  version: 8.0.1
+  version: 8.0.2.1
 platform: ruby
 authors:
 - David Heinemeier Hansson
-autorequire: 
 bindir: bin
 cert_chain: []
-date: 2024-12-13 00:00:00.000000000 Z
+date: 1980-01-02 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: i18n
@@ -475,7 +474,6 @@
 - lib/active_support/testing/parallelize_executor.rb
 - lib/active_support/testing/setup_and_teardown.rb
 - lib/active_support/testing/stream.rb
-- lib/active_support/testing/strict_warnings.rb
 - lib/active_support/testing/tagged_logging.rb
 - lib/active_support/testing/tests_without_assertions.rb
 - lib/active_support/testing/time_helpers.rb
@@ -495,12 +493,11 @@
 - MIT
 metadata:
   bug_tracker_uri: https://github.com/rails/rails/issues
-  changelog_uri: 
https://github.com/rails/rails/blob/v8.0.1/activesupport/CHANGELOG.md
-  documentation_uri: https://api.rubyonrails.org/v8.0.1/
+  changelog_uri: 
https://github.com/rails/rails/blob/v8.0.2.1/activesupport/CHANGELOG.md
+  documentation_uri: https://api.rubyonrails.org/v8.0.2.1/
   mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
-  source_code_uri: https://github.com/rails/rails/tree/v8.0.1/activesupport
+  source_code_uri: https://github.com/rails/rails/tree/v8.0.2.1/activesupport
   rubygems_mfa_required: 'true'
-post_install_message: 
 rdoc_options:
 - "--encoding"
 - UTF-8
@@ -517,8 +514,7 @@
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
-rubygems_version: 3.5.22
-signing_key: 
+rubygems_version: 3.6.9
 specification_version: 4
 summary: A toolkit of support libraries and Ruby core extensions extracted 
from the
   Rails framework.

Reply via email to