9.9 KiB
-
Corrected Inflector#underscore handling of multiple successive acroynms.
James Le Cuirot
-
Delegation now works with ruby reserved words passed to
:to
option.Fixes #16956.
Agis Anastasopoulos
-
Added method
#eql?
toActiveSupport::Duration
, in addition to#==
.Currently, the following returns
false
, contrary to expectation:1.minute.eql?(1.minute)
Adding method
#eql?
will make this behave like expected. Method#eql?
is just a bit stricter than#==
, as it checks whether the argument is also a duration. Their parts may be different though.1.minute.eql?(60.seconds) # => true 1.minute.eql?(60) # => false
Joost Lubach
-
Time#change
can now change nanoseconds (:nsec
) as a higher-precision alternative to microseconds (:usec
).Agis Anastasooulos
-
MessageVerifier.new
raises an appropriate exception if the secret isnil
. This preventsMessageVerifier#generate
from raising a cryptic error later on.Kostiantyn Kahanskyi
-
Introduced new configuration option
active_support.test_order
for specifying the order in which test cases are executed. This option currently defaults to:sorted
but will be changed to:random
in Rails 5.0.Akira Matsuda, Godfrey Chan
-
Fixed a bug in
Inflector#underscore
where acroynms in nested constant names are incorrectly parsed as camelCase.Fixes #8015.
Fred Wu, Matthew Draper
-
Make
Time#change
throw an exception if the:usec
option is out of range and the time has an offset other than UTC or local.Agis Anastasopoulos
-
Method
objects now report themselves as notduplicable?
. This allows hashes and arrays containingMethod
objects to bedeep_dup
ed.Peter Jaros
-
determine_constant_from_test_name
does no longer shadowNameError
s which happens during constant autoloading.Fixes #9933.
Guo Xiang Tan
-
Added instance_eval version to Object#try and Object#try!, so you can do this:
person.try { name.first }
instead of:
person.try { |person| person.name.first }
DHH, Ari Pollak
-
Fix the
ActiveSupport::Duration#instance_of?
method to return the right value with the class itself since it was previously delegated to the internal value.Robin Dupret
-
Fix rounding errors with
#travel_to
by resetting the usec on any passed time to zero, so we only travel with per-second precision, not anything deeper than that.DHH
-
Fix DateTime comparison with
DateTime::Infinity
object.Rafael Mendonça França
-
Added Object#itself which returns the object itself. Useful when dealing with a chaining scenario, like Active Record scopes:
Event.public_send(state.presence_in([ :trashed, :drafted ]) || :itself).order(:created_at)
DHH
-
Object#with_options
executes block in merging option context when explicit receiver in not passed.Pavel Pravosud
-
Fixed a compatibility issue with the
Oj
gem when cherry-picking the fileactive_support/core_ext/object/json
without requiringactive_support/json
.Fixes #16131.
Godfrey Chan
-
Make
Hash#with_indifferent_access
copy the default proc too.arthurnn, Xanders
-
Add
String#truncate_words
to truncate a string by a number of words.Mohamed Osama
-
Deprecate
capture
andquietly
.These methods are not thread safe and may cause issues when used in threaded environments. To avoid problems we are deprecating them.
Tom Meier
-
DateTime#to_f
now preserves the fractional seconds instead of always rounding to.0
.Fixes #15994.
John Paul Ashenfelter
-
Add
Hash#transform_values
to simplify a common pattern where the values of a hash must change, but the keys are left the same.Sean Griffin
-
Always instrument
ActiveSupport::Cache
.Since
ActiveSupport::Notifications
only instruments items when there are attached subscribers, we don't need to disable instrumentation.Peter Wagenet
-
Make the
apply_inflections
method case-insensitive when checking whether a word is uncountable or not.Robin Dupret
-
Make Dependencies pass a name to NameError error.
arthurnn
-
Fixed
ActiveSupport::Cache::FileStore
exploding with long paths.Adam Panzer / Michael Grosser
-
Fixed
ActiveSupport::TimeWithZone#-
so precision is not unnecessarily lost when working with objects with a nanosecond component.ActiveSupport::TimeWithZone#-
should return the same result as if we were usingTime#-
:Time.now.end_of_day - Time.now.beginning_of_day # => 86399.999999999
Before:
Time.zone.now.end_of_day.nsec # => 999999999 Time.zone.now.end_of_day - Time.zone.now.beginning_of_day # => 86400.0
After:
Time.zone.now.end_of_day - Time.zone.now.beginning_of_day # => 86399.999999999
Gordon Chan
-
Fixed precision error in NumberHelper when using Rationals.
Before:
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2 # => "330.00"
After:
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2 # => "333.33"
See #15379.
Juanjo Bazán
-
Removed deprecated
Numeric#ago
and friendsReplacements:
5.ago => 5.seconds.ago 5.until => 5.seconds.until 5.since => 5.seconds.since 5.from_now => 5.seconds.from_now
See #12389 for the history and rationale behind this.
Godfrey Chan
-
DateTime
advance
now supports partial days.Before:
DateTime.now.advance(days: 1, hours: 12)
After:
DateTime.now.advance(days: 1.5)
Fixes #12005.
Shay Davidson
-
Hash#deep_transform_keys
andHash#deep_transform_keys!
now transform hashes in nested arrays. This change also applies toHash#deep_stringify_keys
,Hash#deep_stringify_keys!
,Hash#deep_symbolize_keys
andHash#deep_symbolize_keys!
.OZAWA Sakuro
-
Fixed confusing
DelegationError
inModule#delegate
.See #15186.
Vladimir Yarotsky
-
Fixed
ActiveSupport::Subscriber
so that no duplicate subscriber is created when a subscriber method is redefined.Dennis Schön
-
Remove deprecated string based terminators for
ActiveSupport::Callbacks
.Eileen M. Uchitelle
-
Fixed an issue when using
ActiveSupport::NumberHelper::NumberToDelimitedConverter
to convert a value that is anActiveSupport::SafeBuffer
introduced in2da9d67
.See #15064.
Mark J. Titorenko
-
TimeZone#parse
defaults the day of the month to '1' if any other date components are specified. This is more consistent with the behavior ofTime#parse
.Ulysse Carion
-
humanize
strips leading underscores, if any.Before:
'_id'.humanize # => ""
After:
'_id'.humanize # => "Id"
Xavier Noria
-
Fixed backward compatibility issues introduced in
326e652
.Empty Hash or Array should not be present in serialization result.
{a: []}.to_query # => "" {a: {}}.to_query # => ""
For more info see #14948.
Bogdan Gusiev
-
Add
Digest::UUID::uuid_v3
andDigest::UUID::uuid_v5
to support stable UUID fixtures on PostgreSQL.Roderick van Domburg
-
Fixed
ActiveSupport::Duration#eql?
so that1.second.eql?(1.second)
is true.This fixes the current situation of:
1.second.eql?(1.second) # => false
eql?
also requires that the other object is anActiveSupport::Duration
. This requirement makesActiveSupport::Duration
's behavior consistent with the behavior of Ruby's numeric types:1.eql?(1.0) # => false 1.0.eql?(1) # => false 1.second.eql?(1) # => false (was true) 1.eql?(1.second) # => false { 1 => "foo", 1.0 => "bar" } # => { 1 => "foo", 1.0 => "bar" } { 1 => "foo", 1.second => "bar" } # now => { 1 => "foo", 1.second => "bar" } # was => { 1 => "bar" }
And though the behavior of these hasn't changed, for reference:
1 == 1.0 # => true 1.0 == 1 # => true 1 == 1.second # => true 1.second == 1 # => true
Emily Dobervich
-
ActiveSupport::SafeBuffer#prepend
acts likeString#prepend
and modifies instance in-place, returning self.ActiveSupport::SafeBuffer#prepend!
is deprecated.Pavel Pravosud
-
HashWithIndifferentAccess
better respects#to_hash
on objects it receives. In particular,.new
,#update
,#merge
, and#replace
accept objects which respond to#to_hash
, even if those objects are not hashes directly.Peter Jaros
-
Deprecate
Class#superclass_delegating_accessor
, useClass#class_attribute
instead.Akshay Vishnoi
-
Ensure classes which
include Enumerable
get#to_json
in addition to#as_json
.Sammy Larbi
-
Change the signature of
fetch_multi
to return a hash rather than an array. This makes it consistent with the output ofread_multi
.Parker Selbert
-
Introduce
Concern#class_methods
as a sleek alternative to clunkymodule ClassMethods
. AddKernel#concern
to define at the toplevel without chunkymodule Foo; extend ActiveSupport::Concern
boilerplate.# app/models/concerns/authentication.rb concern :Authentication do included do after_create :generate_private_key end class_methods do def authenticate(credentials) # ... end end def generate_private_key # ... end end # app/models/user.rb class User < ActiveRecord::Base include Authentication end
Jeremy Kemper
Please check 4-1-stable for previous changes.