-
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...