Closes #9559. The actual patch was added with #4719
16 KiB
Rails 4.0.0 (unreleased)
-
Fix deletion of empty directories in ActiveSupport::Cache::FileStore.
Charles Jones
Rails 4.0.0.beta1 (February 25, 2013)
-
Improve singularizing a singular for multiple cases. Fixes #2608 #1825 #2395.
Example:
# Before 'address'.singularize # => 'addres' # After 'address'.singularize # => 'address'
Mark McSpadden
-
Prevent
DateTime#change
from truncating the second fraction, when seconds do not need to be changed.Chris Baynes
-
Added
ActiveSupport::TimeWithZone#to_r
forTime#at
compatibility.Before this change:
Time.zone = 'Tokyo' time = Time.zone.now time == Time.at(time) # => false
After the change:
Time.zone = 'Tokyo' time = Time.zone.now time == Time.at(time) # => true
stopdropandrew
-
ActiveSupport::NumberHelper#number_to_human
returns the number unaltered when the given units hash does not contain the needed key, e.g. when the number provided is less than the largest key provided. Fixes #9269.Examples:
number_to_human(123, units: {}) # => 123 number_to_human(123, units: { thousand: 'k' }) # => 123
Michael Hoffman
-
Added
beginning_of_minute
support to core ext calculations forTime
andDateTime
.Gagan Awhad
-
Add
:nsec
date format.Jamie Gaskins
-
ActiveSupport::Gzip.compress
allows two optional arguments for compression level and strategy.Beyond
-
Modify
TimeWithZone#as_json
to include 3 decimal places of sub-second accuracy by default, which is optional as per the ISO8601 spec, but extremely useful. Also the default behaviour ofDate#toJSON()
in recent versions of Chrome, Safari and Firefox.James Harton
-
Improve
String#squish
to handle Unicode whitespace. Antoine Lyset -
Standardise on
to_time
returning an instance ofTime
in the local system timezone acrossString
,Time
,Date
,DateTime
andActiveSupport::TimeWithZone
.Andrew White
-
Extract
ActiveSupport::Testing::Performance
into https://github.com/rails/rails-perftest You can add the gem to yourGemfile
to keep using performance tests.gem 'rails-perftest'
Yves Senn
-
Hash.from_xml
raises when it encounterstype="symbol"
ortype="yaml"
. UseHash.from_trusted_xml
to parse this XML.CVE-2013-0156
Jeremy Kemper
-
Deprecate
assert_present
andassert_blank
in favor ofassert object.blank?
andassert object.present?
Yves Senn
-
Change
String#to_date
to useDate.parse
. This gives more consistent error messages and allows the use of partial dates."gibberish".to_date => Argument Error: invalid date "3rd Feb".to_date => Sun, 03 Feb 2013
Kelly Stannard
-
It's now possible to compare
Date
,DateTime
,Time
andTimeWithZone
withFloat::INFINITY
. This allows to create date/time ranges with one infinite bound. Example:range = Range.new(Date.today, Float::INFINITY)
Also it's possible to check inclusion of date/time in range with conversion.
range.include?(Time.now + 1.year) # => true range.include?(DateTime.now + 1.year) # => true
Alexander Grebennik
-
Remove meaningless
ActiveSupport::FrozenObjectError
, which was just an alias ofRuntimeError
.Akira Matsuda
-
Introduce
assert_not
to replace wartyassert !foo
. Jeremy Kemper -
Prevent
Callbacks#set_callback
from setting the same callback twice.before_save :foo, :bar, :foo
will at first call
bar
, thenfoo
.foo
will no more be called twice.Dmitriy Kiriyenko
-
Add
ActiveSupport::Logger#silence
that works the same as the oldLogger#silence
extension.DHH
-
Remove surrogate unicode character encoding from
ActiveSupport::JSON.encode
The encoding scheme was broken for unicode characters outside the basic multilingual plane; since json is assumed to be UTF-8, and we already force the encoding to UTF-8, simply pass through the un-encoded characters.Brett Carter
-
Deprecate
Time.time_with_date_fallback
,Time.utc_time
andTime.local_time
. These methods were added to handle the limited range of Ruby's nativeTime
implementation. Those limitations no longer apply so we are deprecating them in 4.0 and they will be removed in 4.1.Andrew White
-
Deprecate
Date#to_time_in_current_zone
and addDate#in_time_zone
. Andrew White -
Add
String#in_time_zone
method to convert a string to anActiveSupport::TimeWithZone
. Andrew White -
Deprecate
ActiveSupport::BasicObject
in favor ofActiveSupport::ProxyObject
. This class is used for proxy classes. It avoids confusion with Ruby'sBasicObject
class.Francesco Rodriguez
-
Patched
Marshal#load
to work with constant autoloading. Fixes autoloading with cache stores that rely onMarshal
(MemCacheStore
andFileStore
). Fixes #8167.Uriel Katz
-
Make
Time.zone.parse
to work with JavaScript format date strings. Andrew White -
Add
DateTime#seconds_until_end_of_day
andTime#seconds_until_end_of_day
as a complement forseconds_from_midnight
; useful when setting expiration times for caches, e.g.:<% cache('dashboard', expires_in: Date.current.seconds_until_end_of_day) do %> ...
Olek Janiszewski
-
No longer proxy
ActiveSupport::Multibyte#class
. Steve Klabnik -
Deprecate
ActiveSupport::TestCase#pending
method, useskip
from minitest instead. Carlos Antonio da Silva -
XmlMini.with_backend
now may be safely used with threads:Thread.new do XmlMini.with_backend("REXML") { rexml_power } end Thread.new do XmlMini.with_backend("LibXML") { libxml_power } end
Each thread will use it's own backend.
Nikita Afanasenko
-
Dependencies no longer trigger
Kernel#autoload
inremove_constant
. Fixes #8213. Xavier Noria -
Simplify
mocha
integration and remove monkey-patches, bumpingmocha
to 0.13.0. James Mead -
#as_json
isolates options when encoding a hash. Fixes #8182.Yves Senn
-
Deprecate
Hash#diff
in favor of minitest's #diff. Steve Klabnik -
Kernel#capture
can catch output from subprocesses. Dmitry Vorotilin -
to_xml
conversions now use builder'stag!
method instead of explicit invocation ofmethod_missing
.Nikita Afanasenko
-
Fixed timezone mapping of the Solomon Islands. Steve Klabnik
-
Make callstack attribute optional in
ActiveSupport::Deprecation::Reporting
methodswarn
anddeprecation_warning
.Alexey Gaziev
-
Implement
HashWithIndifferentAccess#replace
sokey?
works correctly. David Graham -
Handle the possible permission denied errors
atomic.rb
might trigger due to itschown
andchmod
calls.Daniele Sluijters
-
Hash#extract!
returns only those keys that present in the receiver.{a: 1, b: 2}.extract!(:a, :x) # => {:a => 1}
Mikhail Dieterle
-
Hash#extract!
returns the same subclass, that the receiver is. I.e.HashWithIndifferentAccess#extract!
returns aHashWithIndifferentAccess
instance.Mikhail Dieterle
-
Optimize
ActiveSupport::Cache::Entry
to reduce memory and processing overhead. Brian Durand -
Tests tag the Rails log with the current test class and test case:
[SessionsControllerTest] [test_0002_sign in] Processing by SessionsController#create as HTML [SessionsControllerTest] [test_0002_sign in] ...
Jeremy Kemper
-
Add
logger.push_tags
and.pop_tags
to complementlogger.tagged
:class Job def before Rails.logger.push_tags :jobs, self.class.name end def after Rails.logger.pop_tags 2 end end
Jeremy Kemper
-
Allow delegation to the class using the
:class
keyword, replacingself.class
usage:class User def self.hello "world" end delegate :hello, to: :class end
Marc-Andre Lafortune
-
Date.beginning_of_week
thread local andbeginning_of_week
application config option added (default is Monday).Innokenty Mikhailov
-
An optional block can be passed to
config_accessor
to set its default valueclass User include ActiveSupport::Configurable config_accessor :hair_colors do [:brown, :black, :blonde, :red] end end User.hair_colors # => [:brown, :black, :blonde, :red]
Larry Lv
-
ActiveSupport::Benchmarkable#silence
has been deprecated due to its lack of thread safety. It will be removed without replacement in Rails 4.1.Steve Klabnik
-
An optional block can be passed to
Hash#deep_merge
. The block will be invoked for each duplicated key and used to resolve the conflict.Pranas Kiziela
-
ActiveSupport::Deprecation
is now a class. It is possible to create an instance of deprecator. Backwards compatibility has been preserved.You can choose which instance of the deprecator will be used.
deprecate :method_name, deprecator: deprecator_instance
You can use
ActiveSupport::Deprecation
in your gem.require 'active_support/deprecation' require 'active_support/core_ext/module/deprecation' class MyGem def self.deprecator ActiveSupport::Deprecation.new('2.0', 'MyGem') end def old_method end def new_method end deprecate old_method: :new_method, deprecator: deprecator end MyGem.new.old_method # => DEPRECATION WARNING: old_method is deprecated and will be removed from MyGem 2.0 (use new_method instead). (called from <main> at file.rb:18)
Piotr Niełacny & Robert Pankowecki
-
ERB::Util.html_escape
encodes single quote as#39
. Decimal form has better support in old browsers. Kalys Osmonov -
ActiveSupport::Callbacks
: deprecate monkey patch of object callbacks. Using thefilter
method like this:before_filter MyFilter.new class MyFilter def filter(controller) end end
Is now deprecated with recommendation to use the corresponding filter type (
#before
,#after
or#around
):before_filter MyFilter.new class MyFilter def before(controller) end end
Bogdan Gusiev
-
An optional block can be passed to
HashWithIndifferentAccess#update
and#merge
. The block will be invoked for each duplicated key, and used to resolve the conflict, thus replicating the behaviour of the corresponding methods on theHash
class.Leo Cassarani
-
Remove
j
alias forERB::Util#json_escape
. Thej
alias is already used forActionView::Helpers::JavaScriptHelper#escape_javascript
and both modules are included in the view context that would confuse the developers.Akira Matsuda
-
Replace deprecated
memcache-client
gem withdalli
inActiveSupport::Cache::MemCacheStore
.Guillermo Iguaran
-
Add default values to all
ActiveSupport::NumberHelper
methods, to avoid errors with empty locales or missing values.Carlos Antonio da Silva
-
ActiveSupport::JSON::Variable
is deprecated. Define your own#as_json
and#encode_json
methods for custom JSON string literals.Erich Menge
-
Add
String#indent
. fxn & Ace Suares -
Inflections can now be defined per locale.
singularize
andpluralize
accept locale as an extra argument.David Celis
-
Object#try
will now returnnil
instead of raise aNoMethodError
if the receiving object does not implement the method, but you can still get the old behavior by using the newObject#try!
.DHH
-
ERB::Util.html_escape
now escapes single quotes. Santiago Pastorino -
Time#change
now works with time values with offsets other than UTC or the local time zone. Andrew White -
ActiveSupport::Callbacks
: deprecate usage of filter object with#before
and#after
methods asaround
callback. Bogdan Gusiev -
Add
Time#prev_quarter
andTime#next_quarter
short-hands formonths_ago(3)
andmonths_since(3)
. SungHee Kang -
Remove obsolete and unused
require_association
method from dependencies. fxn -
Add
:instance_accessor
option forconfig_accessor
.class User include ActiveSupport::Configurable config_accessor :allowed_access, instance_accessor: false end User.new.allowed_access = true # => NoMethodError User.new.allowed_access # => NoMethodError
Francesco Rodriguez
-
ActionView::Helpers::NumberHelper
methods have been moved toActiveSupport::NumberHelper
and are now available viaNumeric#to_s
.Numeric#to_s
now accepts the formatting options:phone
,:currency
,:percentage
,:delimited
,:rounded
,:human
, and:human_size
.Andrew Mutz
-
Add
Hash#transform_keys
,Hash#transform_keys!
,Hash#deep_transform_keys
, andHash#deep_transform_keys!
. Mark McSpadden -
Changed XML type
datetime
todateTime
(with upper case letterT
). Angelo Capilleri -
Add
:instance_accessor
option forclass_attribute
. Alexey Vakhov -
constantize
now looks in the ancestor chain. Marc-Andre Lafortune & Andrew White -
Adds
Hash#deep_stringify_keys
andHash#deep_stringify_keys!
to convert all keys from aHash
instance into strings. Lucas Húngaro -
Adds
Hash#deep_symbolize_keys
andHash#deep_symbolize_keys!
to convert all keys from aHash
instance into symbols. Lucas Húngaro -
Object#try
can't call private methods. Vasiliy Ermolovich -
AS::Callbacks#run_callbacks
removekey
argument. Francesco Rodriguez -
deep_dup
works more expectedly now and duplicates also values inHash
instances and elements inArray
instances. Alexey Gaziev -
Inflector no longer applies ice -> ouse to words like "slice", "police", etc. Wes Morgan
-
Add
ActiveSupport::Deprecations.behavior = :silence
to completely ignore Rails runtime deprecations. twinturbo -
Make
Module#delegate
stop usingsend
- can no longer delegate to private methods. dasch -
ActiveSupport::Callbacks
: deprecate:rescuable
option. Bogdan Gusiev -
Adds
Integer#ordinal
to get the ordinal suffix string of an integer. Tim Gildea -
ActiveSupport::Callbacks
::per_key
option is no longer supported. Bogdan Gusiev -
ActiveSupport::Callbacks#define_callbacks
: add:skip_after_callbacks_if_terminated
option. Bogdan Gusiev -
Add
html_escape_once
toERB::Util
, and delegate theescape_once
tag helper to it. Carlos Antonio da Silva -
Deprecates the compatibility method
Module#local_constant_names
, useModule#local_constants
instead (which returns symbols). Xavier Noria -
Deletes the compatibility method
Module#method_names
, useModule#methods
from now on (which returns symbols). Xavier Noria -
Deletes the compatibility method
Module#instance_method_names
, useModule#instance_methods
from now on (which returns symbols). Xavier Noria -
BufferedLogger
is deprecated. UseActiveSupport::Logger
, or the logger from the Ruby standard library.Aaron Patterson
-
Unicode database updated to 6.1.0. Norman Clarke
-
Adds
encode_big_decimal_as_string
option to force JSON serialization ofBigDecimal
as numeric instead of wrapping them in strings for safety. -
Optimize log subscribers to check log level before doing any processing. Brian Durand
Please check 3-2-stable for previous changes.