-
Ensure MemoryStore disables compression by default. Reverts behavior of
MemoryStore to its prior rails 5.1 behavior.
Max Gurewitz
-
Calling iso8601 on negative durations retains the negative sign on individual
digits instead of prepending it.
This change is required so we can interoperate with PostgreSQL, which prefers
negative signs for each component.
Compatibility with other iso8601 parsers which support leading negatives as well
as negatives per component is still retained.
Before:
(-1.year - 1.day).iso8601
# => "-P1Y1D"
After:
(-1.year - 1.day).iso8601
# => "P-1Y-1D"
Vipul A M
-
Remove deprecated ActiveSupport::Notifications::Instrumenter#end=.
Rafael Mendonça França
-
Deprecate ActiveSupport::Multibyte::Unicode.default_normalization_form.
Rafael Mendonça França
-
Remove deprecated ActiveSupport::Multibyte::Unicode.pack_graphemes,
ActiveSupport::Multibyte::Unicode.unpack_graphemes,
ActiveSupport::Multibyte::Unicode.normalize,
ActiveSupport::Multibyte::Unicode.downcase,
ActiveSupport::Multibyte::Unicode.upcase and ActiveSupport::Multibyte::Unicode.swapcase.
Rafael Mendonça França
-
Remove deprecated ActiveSupport::Multibyte::Chars#consumes? and ActiveSupport::Multibyte::Chars#normalize.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/range/include_range.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/hash/transform_values.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/hash/compact.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/array/prepend_and_append.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/numeric/inquiry.
Rafael Mendonça França
-
Remove deprecated file active_support/core_ext/module/reachable.
Rafael Mendonça França
-
Remove deprecated Module#parent_name, Module#parent and Module#parents.
Rafael Mendonça França
-
Remove deprecated ActiveSupport::LoggerThreadSafeLevel#after_initialize.
Rafael Mendonça França
-
Remove deprecated LoggerSilence constant.
Rafael Mendonça França
-
Remove deprecated fallback to I18n.default_local when config.i18n.fallbacks is empty.
Rafael Mendonça França
-
Remove entries from local cache on RedisCacheStore#delete_matched
Fixes #38627
ojab
-
Speed up ActiveSupport::SecurityUtils.fixed_length_secure_compare by using
OpenSSL.fixed_length_secure_compare, if available.
Nate Matykiewicz
-
ActiveSupport::Cache::MemCacheStore now checks ENV["MEMCACHE_SERVERS"] before falling back to "localhost:11211" if configured without any addresses.
config.cache_store = :mem_cache_store
# is now equivalent to
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
# instead of
config.cache_store = :mem_cache_store, "localhost:11211" # ignores ENV["MEMCACHE_SERVERS"]
Sam Bostock
-
ActiveSupport::Subscriber#attach_to now accepts an inherit_all: argument. When set to true,
it allows a subscriber to receive events for methods defined in the subscriber’s ancestor class(es).
class ActionControllerSubscriber < ActiveSupport::Subscriber
attach_to :action_controller
def start_processing(event)
info "Processing by #{event.payload[:controller]}##{event.payload[:action]} as #{format}"
end
def redirect_to(event)
info { "Redirected to #{event.payload[:location]}" }
end
end
# We detach ActionControllerSubscriber from the :action_controller namespace so that our CustomActionControllerSubscriber
# can provide its own instrumentation for certain events in the namespace
ActionControllerSubscriber.detach_from(:action_controller)
class CustomActionControllerSubscriber < ActionControllerSubscriber
attach_to :action_controller, inherit_all: true
def start_processing(event)
info "A custom response to start_processing events"
end
# => CustomActionControllerSubscriber will process events for "start_processing.action_controller" notifications
# using its own #start_processing implementation, while retaining ActionControllerSubscriber's instrumentation
# for "redirect_to.action_controller" notifications
end
Adrianna Chang
-
Allow the digest class used to generate non-sensitive digests to be configured with config.active_support.hash_digest_class.
config.active_support.use_sha1_digests is deprecated in favour of config.active_support.hash_digest_class = ::Digest::SHA1.
Dirkjan Bussink
-
Fix bug to make memcached write_entry expire correctly with unless_exist
Jye Lee
-
Add ActiveSupport::Duration conversion methods
in_seconds, in_minutes, in_hours, in_days, in_weeks, in_months, and in_years return the respective duration covered.
Jason York
-
Fixed issue in ActiveSupport::Cache::RedisCacheStore not passing options
to read_multi causing fetch_multi to not work properly
Rajesh Sharma
-
Fixed issue in ActiveSupport::Cache::MemCacheStore which caused duplicate compression,
and caused the provided compression_threshold to not be respected.
Max Gurewitz
-
Prevent RedisCacheStore and MemCacheStore from performing compression
when reading entries written with raw: true.
Max Gurewitz
-
URI.parser is deprecated and will be removed in Rails 6.2. Use
URI::DEFAULT_PARSER instead.
Jean Boussier
-
require_dependency has been documented to be obsolete in :zeitwerk
mode. The method is not deprecated as such (yet), but applications are
encouraged to not use it.
In :zeitwerk mode, semantics match Ruby’s and you do not need to be
defensive with load order. Just refer to classes and modules normally. If
the constant name is dynamic, camelize if needed, and constantize.
Xavier Noria
-
Add 3rd person aliases of Symbol#start_with? and Symbol#end_with?.
:foo.starts_with?("f") # => true
:foo.ends_with?("o") # => true
Ryuta Kamizono
-
Add override of unary plus for ActiveSupport::Duration.
+ 1.second is now identical to +1.second to prevent errors
where a seemingly innocent change of formatting leads to a change in the code behavior.
Before:
+1.second.class
# => ActiveSupport::Duration
(+ 1.second).class
# => Integer
After:
+1.second.class
# => ActiveSupport::Duration
(+ 1.second).class
# => ActiveSupport::Duration
Fixes #39079.
Roman Kushnir
-
Add subsec to ActiveSupport::TimeWithZone#inspect.
Before:
Time.at(1498099140).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
After:
Time.at(1498099140).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00.000000000 UTC +00:00"
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00.123456780 UTC +00:00"
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
# => "Thu, 22 Jun 2017 02:39:00.333333333 UTC +00:00"
akinomaeni
-
Calling ActiveSupport::TaggedLogging#tagged without a block now returns a tagged logger.
logger.tagged("BCX").info("Funky time!") # => [BCX] Funky time!
Eugene Kenny
-
Align Range#cover? extension behavior with Ruby behavior for backwards ranges.
(1..10).cover?(5..3) now returns false, as it does in plain Ruby.
Also update #include? and #=== behavior to match.
Michael Groeneman
-
Update to TZInfo v2.0.0.
This changes the output of ActiveSupport::TimeZone.utc_to_local, but
can be controlled with the
ActiveSupport.utc_to_local_returns_utc_offset_times config.
New Rails 6.1 apps have it enabled by default, existing apps can upgrade
via the config in config/initializers/new_framework_defaults_6_1.rb
See the utc_to_local_returns_utc_offset_times documentation for details.
Phil Ross, Jared Beck
-
Add Date and Time #yesterday? and #tomorrow? alongside #today?.
Aliased to #prev_day? and #next_day? to match the existing #prev/next_day methods.
Jatin Dhankhar
-
Add Enumerable#pick to complement ActiveRecord::Relation#pick.
Eugene Kenny
-
[Breaking change] ActiveSupport::Callbacks#halted_callback_hook now receive a 2nd argument:
ActiveSupport::Callbacks#halted_callback_hook now receive the name of the callback
being halted as second argument.
This change will allow you to differentiate which callbacks halted the chain
and act accordingly.
class Book < ApplicationRecord
before_save { throw(:abort) }
before_create { throw(:abort) }
def halted_callback_hook(filter, callback_name)
Rails.logger.info("Book couldn't be #{callback_name}d")
end
Book.create # => "Book couldn't be created"
book.save # => "Book couldn't be save...