Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-activesupport-7.0 for openSUSE:Factory checked in at 2022-10-12 18:25:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-activesupport-7.0 (Old) and /work/SRC/openSUSE:Factory/.rubygem-activesupport-7.0.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-activesupport-7.0" Wed Oct 12 18:25:02 2022 rev:6 rq:1010047 version:7.0.4 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-activesupport-7.0/rubygem-activesupport-7.0.changes 2022-08-06 22:07:54.734613669 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-activesupport-7.0.new.2275/rubygem-activesupport-7.0.changes 2022-10-12 18:26:46.437964903 +0200 @@ -1,0 +2,24 @@ +Mon Oct 10 12:55:23 UTC 2022 - Stephan Kulow <co...@suse.com> + +updated to version 7.0.4 + see installed CHANGELOG.md + + ## Rails 7.0.4 (September 09, 2022) ## + + * Redis cache store is now compatible with redis-rb 5.0. + + *Jean Boussier* + + * Fix `NoMethodError` on custom `ActiveSupport::Deprecation` behavior. + + `ActiveSupport::Deprecation.behavior=` was supposed to accept any object + that responds to `call`, but in fact its internal implementation assumed that + this object could respond to `arity`, so it was restricted to only `Proc` objects. + + This change removes this `arity` restriction of custom behaviors. + + *Ryo Nakamura* + + + +------------------------------------------------------------------- Old: ---- activesupport-7.0.3.1.gem New: ---- activesupport-7.0.4.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-activesupport-7.0.spec ++++++ --- /var/tmp/diff_new_pack.vQdZXG/_old 2022-10-12 18:26:47.941968215 +0200 +++ /var/tmp/diff_new_pack.vQdZXG/_new 2022-10-12 18:26:47.949968232 +0200 @@ -24,7 +24,7 @@ # Name: rubygem-activesupport-7.0 -Version: 7.0.3.1 +Version: 7.0.4 Release: 0 %define mod_name activesupport %define mod_full_name %{mod_name}-%{version} ++++++ activesupport-7.0.3.1.gem -> activesupport-7.0.4.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md --- old/CHANGELOG.md 2022-07-12 19:30:21.000000000 +0200 +++ new/CHANGELOG.md 2022-09-09 20:42:15.000000000 +0200 @@ -1,3 +1,20 @@ +## Rails 7.0.4 (September 09, 2022) ## + +* Redis cache store is now compatible with redis-rb 5.0. + + *Jean Boussier* + +* Fix `NoMethodError` on custom `ActiveSupport::Deprecation` behavior. + + `ActiveSupport::Deprecation.behavior=` was supposed to accept any object + that responds to `call`, but in fact its internal implementation assumed that + this object could respond to `arity`, so it was restricted to only `Proc` objects. + + This change removes this `arity` restriction of custom behaviors. + + *Ryo Nakamura* + + ## Rails 7.0.3.1 (July 12, 2022) ## * No changes. 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 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/cache/mem_cache_store.rb 2022-09-09 20:42:15.000000000 +0200 @@ -128,6 +128,22 @@ end end + ## + # :method: write + # :call-seq: write(name, value, options = nil) + # + # Behaves the same as ActiveSupport::Cache::Store#write, but supports + # additional options specific to memcached. + # + # ==== Additional Options + # + # * <tt>raw: true</tt> - Sends the value directly to the server as raw + # bytes. The value must be a string or number. You can use memcached + # direct operations like +increment+ and +decrement+ only on raw values. + # + # * <tt>unless_exist: true</tt> - Prevents overwriting an existing cache + # entry. + # Increment a cached value. This method uses the memcached incr atomic # operator and can only be used on values written with the +:raw+ option. # Calling it on a value not stored with +:raw+ will initialize that value 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 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/cache/redis_cache_store.rb 2022-09-09 20:42:15.000000000 +0200 @@ -5,13 +5,17 @@ require "redis" require "redis/distributed" rescue LoadError - warn "The Redis cache store requires the redis gem, version 4.0.1 or later. Please add it to your Gemfile: `gem \"redis\", \"~> 4.0\"`" + warn "The Redis cache store requires the redis gem, version 4.0.1 or later. Please add it to your Gemfile: `gem \"redis\", \">= 4.0.1\"`" raise end # Prefer the hiredis driver but don't require it. begin - require "redis/connection/hiredis" + if ::Redis::VERSION < "5" + require "redis/connection/hiredis" + else + require "hiredis-client" + end rescue LoadError end @@ -92,9 +96,11 @@ elsif redis redis elsif urls.size > 1 - build_redis_distributed_client urls: urls, **redis_options + build_redis_distributed_client(urls: urls, **redis_options) + elsif urls.empty? + build_redis_client(**redis_options) else - build_redis_client url: urls.first, **redis_options + build_redis_client(url: urls.first, **redis_options) end end @@ -105,8 +111,8 @@ end end - def build_redis_client(url:, **redis_options) - ::Redis.new DEFAULT_REDIS_OPTIONS.merge(redis_options.merge(url: url)) + def build_redis_client(**redis_options) + ::Redis.new(DEFAULT_REDIS_OPTIONS.merge(redis_options)) end end 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 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/cache.rb 2022-09-09 20:42:15.000000000 +0200 @@ -139,7 +139,7 @@ # popular cache store for large production websites. # # Some implementations may not support all methods beyond the basic cache - # methods of +fetch+, +write+, +read+, +exist?+, and +delete+. + # methods of #fetch, #write, #read, #exist?, and #delete. # # ActiveSupport::Cache::Store can store any Ruby object that is supported by # its +coder+'s +dump+ and +load+ methods. @@ -172,11 +172,6 @@ # cache.namespace = -> { @last_mod_time } # Set the namespace to a variable # @last_mod_time = Time.now # Invalidate the entire cache by changing namespace # - # Cached data larger than 1kB are compressed by default. To turn off - # compression, pass <tt>compress: false</tt> to the initializer or to - # individual +fetch+ or +write+ method calls. The 1kB compression - # threshold is configurable with the <tt>:compress_threshold</tt> option, - # specified in bytes. class Store cattr_accessor :logger, instance_writer: true @@ -200,9 +195,19 @@ end end - # Creates a new cache. The options will be passed to any write method calls - # except for <tt>:namespace</tt> which can be used to set the global - # namespace for the cache. + # Creates a new cache. + # + # ==== Options + # + # * +:namespace+ - Sets the namespace for the cache. This option is + # especially useful if your application shares a cache with other + # applications. + # * +:coder+ - Replaces the default cache entry serialization mechanism + # with a custom one. The +coder+ must respond to +dump+ and +load+. + # Using a custom coder disables automatic compression. + # + # Any other specified options are treated as default options for the + # relevant cache operations, such as #read, #write, and #fetch. def initialize(options = nil) @options = options ? normalize_options(options) : {} @options[:compress] = true unless @options.key?(:compress) @@ -244,111 +249,75 @@ # end # cache.fetch('city') # => "Duckburgh" # - # You may also specify additional options via the +options+ argument. - # Setting <tt>force: true</tt> forces a cache "miss," meaning we treat - # the cache value as missing even if it's present. Passing a block is - # required when +force+ is true so this always results in a cache write. + # ==== Options # - # cache.write('today', 'Monday') - # cache.fetch('today', force: true) { 'Tuesday' } # => 'Tuesday' - # cache.fetch('today', force: true) # => ArgumentError - # - # The +:force+ option is useful when you're calling some other method to - # ask whether you should force a cache write. Otherwise, it's clearer to - # just call <tt>Cache#write</tt>. - # - # Setting <tt>skip_nil: true</tt> will not cache nil result: - # - # cache.fetch('foo') { nil } - # cache.fetch('bar', skip_nil: true) { nil } - # cache.exist?('foo') # => true - # cache.exist?('bar') # => false - # - # - # Setting <tt>compress: false</tt> disables compression of the cache entry. - # - # Setting <tt>:expires_in</tt> will set an expiration time on the cache. - # All caches support auto-expiring content after a specified number of - # seconds. This value can be specified as an option to the constructor - # (in which case all entries will be affected), or it can be supplied to - # the +fetch+ or +write+ method to affect just one entry. - # <tt>:expire_in</tt> and <tt>:expired_in</tt> are aliases for - # <tt>:expires_in</tt>. - # - # cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 5.minutes) - # cache.write(key, value, expires_in: 1.minute) # Set a lower value for one entry - # - # Setting <tt>:expires_at</tt> will set an absolute expiration time on the cache. - # All caches support auto-expiring content after a specified number of - # seconds. This value can only be supplied to the +fetch+ or +write+ method to - # affect just one entry. - # - # cache = ActiveSupport::Cache::MemoryStore.new - # cache.write(key, value, expires_at: Time.now.at_end_of_hour) - # - # Setting <tt>:version</tt> verifies the cache stored under <tt>name</tt> - # is of the same version. nil is returned on mismatches despite contents. - # This feature is used to support recyclable cache keys. - # - # Setting <tt>:race_condition_ttl</tt> is very useful in situations where - # a cache entry is used very frequently and is under heavy load. If a - # cache expires and due to heavy load several different processes will try - # to read data natively and then they all will try to write to cache. To - # avoid that case the first process to find an expired cache entry will - # bump the cache expiration time by the value set in <tt>:race_condition_ttl</tt>. - # Yes, this process is extending the time for a stale value by another few - # seconds. Because of extended life of the previous cache, other processes - # will continue to use slightly stale data for a just a bit longer. In the - # meantime that first process will go ahead and will write into cache the - # new value. After that all the processes will start getting the new value. - # The key is to keep <tt>:race_condition_ttl</tt> small. - # - # If the process regenerating the entry errors out, the entry will be - # regenerated after the specified number of seconds. Also note that the - # life of stale cache is extended only if it expired recently. Otherwise - # a new value is generated and <tt>:race_condition_ttl</tt> does not play - # any role. - # - # # Set all values to expire after one minute. - # cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 1.minute) - # - # cache.write('foo', 'original value') - # val_1 = nil - # val_2 = nil - # sleep 60 - # - # Thread.new do - # val_1 = cache.fetch('foo', race_condition_ttl: 10.seconds) do - # sleep 1 - # 'new value 1' + # Internally, +fetch+ calls #read_entry, and calls #write_entry on a cache + # miss. Thus, +fetch+ supports the same options as #read and #write. + # Additionally, +fetch+ supports the following options: + # + # * <tt>force: true</tt> - Forces a cache "miss," meaning we treat the + # cache value as missing even if it's present. Passing a block is + # required when +force+ is true so this always results in a cache write. + # + # cache.write('today', 'Monday') + # cache.fetch('today', force: true) { 'Tuesday' } # => 'Tuesday' + # cache.fetch('today', force: true) # => ArgumentError + # + # The +:force+ option is useful when you're calling some other method to + # ask whether you should force a cache write. Otherwise, it's clearer to + # just call +write+. + # + # * <tt>skip_nil: true</tt> - Prevents caching a nil result: + # + # cache.fetch('foo') { nil } + # cache.fetch('bar', skip_nil: true) { nil } + # cache.exist?('foo') # => true + # cache.exist?('bar') # => false + # + # * +:race_condition_ttl+ - Specifies the number of seconds during which + # an expired value can be reused while a new value is being generated. + # This can be used to prevent race conditions when cache entries expire, + # by preventing multiple processes from simultaneously regenerating the + # same entry (also known as the dog pile effect). + # + # When a process encounters a cache entry that has expired less than + # +:race_condition_ttl+ seconds ago, it will bump the expiration time by + # +:race_condition_ttl+ seconds before generating a new value. During + # this extended time window, while the process generates a new value, + # other processes will continue to use the old value. After the first + # process writes the new value, other processes will then use it. + # + # If the first process errors out while generating a new value, another + # process can try to generate a new value after the extended time window + # has elapsed. + # + # # Set all values to expire after one minute. + # cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 1.minute) + # + # cache.write('foo', 'original value') + # val_1 = nil + # val_2 = nil + # sleep 60 + # + # Thread.new do + # val_1 = cache.fetch('foo', race_condition_ttl: 10.seconds) do + # sleep 1 + # 'new value 1' + # end # end - # end # - # Thread.new do - # val_2 = cache.fetch('foo', race_condition_ttl: 10.seconds) do - # 'new value 2' + # Thread.new do + # val_2 = cache.fetch('foo', race_condition_ttl: 10.seconds) do + # 'new value 2' + # end # end - # end # - # cache.fetch('foo') # => "original value" - # sleep 10 # First thread extended the life of cache by another 10 seconds - # cache.fetch('foo') # => "new value 1" - # val_1 # => "new value 1" - # val_2 # => "original value" + # cache.fetch('foo') # => "original value" + # sleep 10 # First thread extended the life of cache by another 10 seconds + # cache.fetch('foo') # => "new value 1" + # val_1 # => "new value 1" + # val_2 # => "original value" # - # Other options will be handled by the specific cache store implementation. - # Internally, #fetch calls #read_entry, and calls #write_entry on a cache - # miss. +options+ will be passed to the #read and #write calls. - # - # For example, MemCacheStore's #write method supports the +:raw+ - # option, which tells the memcached server to store all values as strings. - # We can use this option with #fetch too: - # - # cache = ActiveSupport::Cache::MemCacheStore.new - # cache.fetch("foo", force: true, raw: true) do - # :bar - # end - # cache.fetch('foo') # => "bar" def fetch(name, options = nil, &block) if block_given? options = merged_options(options) @@ -383,7 +352,13 @@ # <tt>:version</tt> options, both of these conditions are applied before # the data is returned. # - # Options are passed to the underlying cache implementation. + # ==== Options + # + # * +:version+ - Specifies a version for the cache entry. If the cached + # version does not match the requested version, the read will be treated + # as a cache miss. This feature is used to support recyclable cache keys. + # + # Other options will be handled by the specific cache store implementation. def read(name, options = nil) options = merged_options(options) key = normalize_key(name, options) @@ -491,9 +466,39 @@ end end - # Writes the value to the cache, with the key. + # Writes the value to the cache with the key. The value must be supported + # by the +coder+'s +dump+ and +load+ methods. # - # Options are passed to the underlying cache implementation. + # By default, cache entries larger than 1kB are compressed. Compression + # allows more data to be stored in the same memory footprint, leading to + # fewer cache evictions and higher hit rates. + # + # ==== Options + # + # * <tt>compress: false</tt> - Disables compression of the cache entry. + # + # * +:compress_threshold+ - The compression threshold, specified in bytes. + # \Cache entries larger than this threshold will be compressed. Defaults + # to +1.kilobyte+. + # + # * +:expires_in+ - Sets a relative expiration time for the cache entry, + # specified in seconds. +:expire_in+ and +:expired_in+ are aliases for + # +:expires_in+. + # + # cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 5.minutes) + # cache.write(key, value, expires_in: 1.minute) # Set a lower value for one entry + # + # * +:expires_at+ - Sets an absolute expiration time for the cache entry. + # + # cache = ActiveSupport::Cache::MemoryStore.new + # cache.write(key, value, expires_at: Time.now.at_end_of_hour) + # + # * +:version+ - Specifies a version for the cache entry. When reading + # from the cache, if the cached version does not match the requested + # version, the read will be treated as a cache miss. This feature is + # used to support recyclable cache keys. + # + # Other options will be handled by the specific cache store implementation. def write(name, value, options = nil) options = merged_options(options) @@ -569,7 +574,7 @@ raise NotImplementedError.new("#{self.class.name} does not support decrement") end - # Cleanups the cache by removing expired entries. + # Cleans up the cache by removing expired entries. # # Options are passed to the underlying cache implementation. # @@ -838,7 +843,7 @@ when 7.0 Rails70Coder else - raise ArgumentError, "Unknown ActiveSupport::Cache.format_version #{Cache.format_version.inspect}" + raise ArgumentError, "Unknown ActiveSupport::Cache.format_version: #{Cache.format_version.inspect}" end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/deprecation/behaviors.rb new/lib/active_support/deprecation/behaviors.rb --- old/lib/active_support/deprecation/behaviors.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/deprecation/behaviors.rb 2022-09-09 20:42:15.000000000 +0200 @@ -114,10 +114,10 @@ raise ArgumentError, "#{behavior.inspect} is not a valid deprecation behavior." end - if behavior.arity == 4 || behavior.arity == -1 - behavior - else + if behavior.respond_to?(:arity) && behavior.arity == 2 -> message, callstack, _, _ { behavior.call(message, callstack) } + else + behavior end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/encrypted_file.rb new/lib/active_support/encrypted_file.rb --- old/lib/active_support/encrypted_file.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/encrypted_file.rb 2022-09-09 20:42:15.000000000 +0200 @@ -45,10 +45,22 @@ @env_key, @raise_if_missing_key = env_key, raise_if_missing_key end + # Returns the encryption key, first trying the environment variable + # specified by +env_key+, then trying the key file specified by +key_path+. + # If +raise_if_missing_key+ is true, raises MissingKeyError if the + # environment variable is not set and the key file does not exist. def key read_env_key || read_key_file || handle_missing_key end + # Reads the file and returns the decrypted content. + # + # Raises: + # - MissingKeyError if the key is missing and +raise_if_missing_key+ is true. + # - MissingContentError if the encrypted file does not exist or otherwise + # if the key is missing. + # - ActiveSupport::MessageEncryptor::InvalidMessage if the content cannot be + # decrypted or verified. def read if !key.nil? && content_path.exist? decrypt content_path.binread 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 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/gem_version.rb 2022-09-09 20:42:15.000000000 +0200 @@ -9,8 +9,8 @@ module VERSION MAJOR = 7 MINOR = 0 - TINY = 3 - PRE = "1" + TINY = 4 + PRE = nil STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".") end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/lazy_load_hooks.rb new/lib/active_support/lazy_load_hooks.rb --- old/lib/active_support/lazy_load_hooks.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/lazy_load_hooks.rb 2022-09-09 20:42:15.000000000 +0200 @@ -26,6 +26,18 @@ # run_load_hooks will then execute all the hooks that were registered # with the on_load method. In the case of the above example, it will # execute the block of code that is in the +initializer+. + # + # Registering a hook that has already run results in that hook executing + # immediately. This allows hooks to be nested for code that relies on + # multiple lazily loaded components: + # + # initializer "action_text.renderer" do + # ActiveSupport.on_load(:action_controller_base) do + # ActiveSupport.on_load(:action_text_content) do + # self.default_renderer = Class.new(ActionController::Base).renderer + # end + # end + # end module LazyLoadHooks def self.extended(base) # :nodoc: base.class_eval do @@ -36,7 +48,8 @@ end # Declares a block that will be executed when a Rails component is fully - # loaded. + # loaded. If the component has already loaded, the block is executed + # immediately. # # Options: # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/logger.rb new/lib/active_support/logger.rb --- old/lib/active_support/logger.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/logger.rb 2022-09-09 20:42:15.000000000 +0200 @@ -22,10 +22,6 @@ # Broadcasts logs to multiple loggers. def self.broadcast(logger) # :nodoc: Module.new do - define_singleton_method(:extended) do |base| - base.public_send(:broadcast_to, logger) if base.respond_to?(:broadcast_to) - end - define_method(:add) do |*args, &block| logger.add(*args, &block) super(*args, &block) @@ -46,6 +42,11 @@ super(name) end + define_method(:formatter=) do |formatter| + logger.formatter = formatter + super(formatter) + end + define_method(:level=) do |level| logger.level = level super(level) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/notifications.rb new/lib/active_support/notifications.rb --- old/lib/active_support/notifications.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/notifications.rb 2022-09-09 20:42:15.000000000 +0200 @@ -244,6 +244,12 @@ notifier.subscribe(pattern, callback, monotonic: false, &block) end + # Performs the same functionality as #subscribe, but the +start+ and + # +finish+ block arguments are in monotonic time instead of wall-clock + # time. Monotonic time will not jump forward or backward (due to NTP or + # Daylights Savings). Use +monotonic_subscribe+ when accuracy of time + # duration is important. For example, computing elapsed time between + # two events. def monotonic_subscribe(pattern = nil, callback = nil, &block) notifier.subscribe(pattern, callback, monotonic: true, &block) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/option_merger.rb new/lib/active_support/option_merger.rb --- old/lib/active_support/option_merger.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/option_merger.rb 2022-09-09 20:42:15.000000000 +0200 @@ -15,8 +15,8 @@ private def method_missing(method, *arguments, &block) options = nil - if arguments.first.is_a?(Proc) - proc = arguments.pop + if arguments.size == 1 && arguments.first.is_a?(Proc) + proc = arguments.shift arguments << lambda { |*args| @options.deep_merge(proc.call(*args)) } elsif arguments.last.respond_to?(:to_hash) options = @options.deep_merge(arguments.pop) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/rescuable.rb new/lib/active_support/rescuable.rb --- old/lib/active_support/rescuable.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/rescuable.rb 2022-09-09 20:42:15.000000000 +0200 @@ -30,20 +30,20 @@ # any. # # class ApplicationController < ActionController::Base - # rescue_from User::NotAuthorized, with: :deny_access # self defined exception - # rescue_from ActiveRecord::RecordInvalid, with: :show_errors + # rescue_from User::NotAuthorized, with: :deny_access + # rescue_from ActiveRecord::RecordInvalid, with: :show_record_errors # - # rescue_from 'MyAppError::Base' do |exception| - # render xml: exception, status: 500 + # rescue_from "MyApp::BaseError" do |exception| + # redirect_to root_url, alert: exception.message # end # # private # def deny_access - # ... + # head :forbidden # end # - # def show_errors(exception) - # exception.record.new_record? ? ... + # def show_record_errors(exception) + # redirect_back_or_to root_url, alert: exception.record.errors.full_messages.to_sentence # end # end # @@ -79,7 +79,7 @@ # Be sure to re-raise unhandled exceptions if this is what you expect. # # begin - # ??? + # # ... # rescue => exception # rescue_with_handler(exception) || raise # end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/tagged_logging.rb new/lib/active_support/tagged_logging.rb --- old/lib/active_support/tagged_logging.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/tagged_logging.rb 2022-09-09 20:42:15.000000000 +0200 @@ -1,7 +1,6 @@ # frozen_string_literal: true require "active_support/core_ext/module/delegation" -require "active_support/core_ext/module/redefine_method" require "active_support/core_ext/object/blank" require "logger" require "active_support/logger" @@ -95,20 +94,6 @@ delegate :push_tags, :pop_tags, :clear_tags!, to: :formatter - def broadcast_to(other_logger) # :nodoc: - define_singleton_method(:formatter=) do |formatter| - other_logger.formatter ||= formatter - - other_logger.formatter.singleton_class.redefine_method(:current_tags) do - formatter.current_tags - end - - super(formatter) - end - - self.formatter = self.formatter.clone - end - def tagged(*tags) if block_given? formatter.tagged(*tags) { yield self } 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 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/test_case.rb 2022-09-09 20:42:15.000000000 +0200 @@ -147,5 +147,9 @@ alias :assert_not_same :refute_same ActiveSupport.run_load_hooks(:active_support_test_case, self) + + def inspect # :nodoc: + Object.instance_method(:to_s).bind_call(self) + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/active_support/time_with_zone.rb new/lib/active_support/time_with_zone.rb --- old/lib/active_support/time_with_zone.rb 2022-07-12 19:30:21.000000000 +0200 +++ new/lib/active_support/time_with_zone.rb 2022-09-09 20:42:15.000000000 +0200 @@ -337,9 +337,8 @@ alias_method :in, :+ # Subtracts an interval of time and returns a new TimeWithZone object unless - # the other value +acts_like?+ time. Then it will return a Float of the difference - # between the two times that represents the difference between the current - # object's time and the +other+ time. + # the other value +acts_like?+ time. In which case, it will subtract the + # other time and return the difference in seconds as a Float. # # Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)' # now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2022-07-12 19:30:21.000000000 +0200 +++ new/metadata 2022-09-09 20:42:15.000000000 +0200 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: activesupport version: !ruby/object:Gem::Version - version: 7.0.3.1 + version: 7.0.4 platform: ruby authors: - David Heinemeier Hansson autorequire: bindir: bin cert_chain: [] -date: 2022-07-12 00:00:00.000000000 Z +date: 2022-09-09 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: i18n @@ -359,10 +359,10 @@ - MIT metadata: bug_tracker_uri: https://github.com/rails/rails/issues - changelog_uri: https://github.com/rails/rails/blob/v7.0.3.1/activesupport/CHANGELOG.md - documentation_uri: https://api.rubyonrails.org/v7.0.3.1/ + changelog_uri: https://github.com/rails/rails/blob/v7.0.4/activesupport/CHANGELOG.md + documentation_uri: https://api.rubyonrails.org/v7.0.4/ mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk - source_code_uri: https://github.com/rails/rails/tree/v7.0.3.1/activesupport + source_code_uri: https://github.com/rails/rails/tree/v7.0.4/activesupport rubygems_mfa_required: 'true' post_install_message: rdoc_options: