CHANGELOG.md in activesupport-4.1.16 vs CHANGELOG.md in activesupport-4.2.0.beta1
- old
+ new
@@ -1,190 +1,213 @@
-## Rails 4.1.16 (July 12, 2016) ##
+* 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*
-* No changes.
+* Fix ActiveSupport::TestCase not to order users' test cases by default.
+ If this change breaks your tests because your tests are order dependent, you need to explicitly call
+ ActiveSupport::TestCase.my_tests_are_order_dependent! at the top of your tests.
+ *Akira Matsuda*
-## Rails 4.1.15 (March 07, 2016) ##
+* Fix DateTime comparison with DateTime::Infinity object.
-* No changes.
-
-
-## Rails 4.1.14.2 (February 26, 2016) ##
-
-* No changes.
-
-
-## Rails 4.1.14.1 (January 25, 2015) ##
-
-* No changes.
-
-
-## Rails 4.1.14 (November 12, 2015) ##
-
-* No changes.
-
-
-## Rails 4.1.13 (August 24, 2015) ##
-
-* No changes.
-
-
-## Rails 4.1.12 (June 25, 2015) ##
-
-* No changes.
-
-
-## Rails 4.1.11 (June 16, 2015) ##
-
-* Fix XSS vulnerability in `ActiveSupport::JSON.encode` method.
-
- CVE-2015-3226.
-
*Rafael Mendonça França*
-* Fix denial of service vulnerability in the XML processing.
+* Added Object#itself which returns the object itself. Useful when dealing with a chaining scenario, like Active Record scopes:
- CVE-2015-3227.
+ Event.public_send(state.presence_in([ :trashed, :drafted ]) || :itself).order(:created_at)
- *Aaron Patterson*
+ *DHH*
+* `Object#with_options` executes block in merging option context when
+ explicit receiver in not passed.
-## Rails 4.1.10 (March 19, 2015) ##
+ *Pavel Pravosud*
-* Fixed a roundtrip problem with AS::SafeBuffer where primitive-like strings
- will be dumped as primitives:
+* Fixed a compatibility issue with the `Oj` gem when cherry-picking the file
+ `active_support/core_ext/object/json` without requiring `active_support/json`.
- Before:
+ Fixes #16131.
- YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml # => "Hello"
- YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml # => true
- YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml # => false
- YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml # => 1
- YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml # => 1.1
+ *Godfrey Chan*
- After:
+* Make `Hash#with_indifferent_access` copy the default proc too.
- YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml # => "Hello"
- YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml # => "true"
- YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml # => "false"
- YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml # => "1"
- YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml # => "1.1"
+ *arthurnn*, *Xanders*
- *Godfrey Chan*
+* Add `String#truncate_words` to truncate a string by a number of words.
-* Replace fixed `:en` with `I18n.default_locale` in `Duration#inspect`.
+ *Mohamed Osama*
- *Dominik Masur*
+* Deprecate `capture` and `quietly`.
-* Add missing time zone definitions for Russian Federation and sync them
- with `zone.tab` file from tzdata version 2014j (latest).
+ These methods are not thread safe and may cause issues when used in threaded environments.
+ To avoid problems we are deprecating them.
- *Andrey Novikov*
+ *Tom Meier*
+* `DateTime#to_f` now preserves the fractional seconds instead of always
+ rounding to `.0`.
-## Rails 4.1.9 (January 6, 2015) ##
+ Fixes #15994.
-* No changes.
+ *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.
-## Rails 4.1.8 (November 16, 2014) ##
+ *Sean Griffin*
-* `Method` objects now report themselves as not `duplicable?`. This allows
- hashes and arrays containing `Method` objects to be `deep_dup`ed.
+* Always instrument `ActiveSupport::Cache`.
- *Peter Jaros*
+ Since `ActiveSupport::Notifications` only instrument items when there
+ are subscriber we don't need to disable instrumentation.
+ *Peter Wagenet*
-## Rails 4.1.7.1 (November 19, 2014) ##
+* Make the `apply_inflections` method case-insensitive when checking
+ whether a word is uncountable or not.
-* No changes.
+ *Robin Dupret*
+* Make Dependencies pass a name to NameError error.
-## Rails 4.1.7 (October 29, 2014) ##
+ *arthurnn*
-* No changes.
+* Fixed `ActiveSupport::Cache::FileStore` exploding with long paths.
+ *Adam Panzer / Michael Grosser*
-## Rails 4.1.6 (September 11, 2014) ##
+* Fixed `ActiveSupport::TimeWithZone#-` so precision is not unnecessarily lost
+ when working with objects with a nanosecond component.
-* Fix DateTime comparison with DateTime::Infinity object.
+ `ActiveSupport::TimeWithZone#-` should return the same result as if we were
+ using `Time#-`:
- *Rafael Mendonça França*
+ Time.now.end_of_day - Time.now.beginning_of_day #=> 86399.999999999
-* Fixed a compatibility issue with the `Oj` gem when cherry-picking the file
- `active_support/core_ext/object/json` without requiring `active_support/json`.
+ Before:
- Fixes #16131.
+ Time.zone.now.end_of_day.nsec #=> 999999999
+ Time.zone.now.end_of_day - Time.zone.now.beginning_of_day #=> 86400.0
- *Godfrey Chan*
+ After:
-* Make Dependencies pass a name to NameError error.
+ Time.zone.now.end_of_day - Time.zone.now.beginning_of_day
+ #=> 86399.999999999
- *arthurnn*, *Yuki Nishijima*
+ *Gordon Chan*
* Fixed precision error in NumberHelper when using Rationals.
- before:
+ Before:
+
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "330.00"
- after:
+
+ After:
+
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "333.33"
See #15379.
*Juanjo Bazán*
+* Removed deprecated `Numeric#ago` and friends
-## Rails 4.1.5 (August 18, 2014) ##
+ Replacements:
-* No changes.
+ 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.
-## Rails 4.1.4 (July 2, 2014) ##
+ *Godfrey Chan*
-* No changes.
+* DateTime `advance` now supports partial days.
+ Before:
-## Rails 4.1.3 (July 2, 2014) ##
+ DateTime.now.advance(days: 1, hours: 12)
-* No changes.
+ After:
+ DateTime.now.advance(days: 1.5)
-## Rails 4.1.2 (June 26, 2014) ##
+ Fixes #12005.
+ *Shay Davidson*
+
* `Hash#deep_transform_keys` and `Hash#deep_transform_keys!` now transform hashes
in nested arrays. This change also applies to `Hash#deep_stringify_keys`,
`Hash#deep_stringify_keys!`, `Hash#deep_symbolize_keys` and
`Hash#deep_symbolize_keys!`.
*OZAWA Sakuro*
+* Fixed confusing `DelegationError` in `Module#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 an `ActiveSupport::SafeBuffer` introduced
in 2da9d67.
- For more info see #15064.
+ 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 of
+ `Time#parse`.
+
+ *Ulysse Carion*
+
+* `humanize` strips leading underscores, if any.
+
+ Before:
+
+ '_id'.humanize # => ""
+
+ After:
+
+ '_id'.humanize # => "Id"
+
+ *Xavier Noria*
+
* Fixed backward compatibility isues introduced in 326e652.
Empty Hash or Array should not present in serialization result.
{a: []}.to_query # => ""
{a: {}}.to_query # => ""
For more info see #14948.
*Bogdan Gusiev*
+
+* Add `Digest::UUID::uuid_v3` and `Digest::UUID::uuid_v5` to support stable
+ UUID fixtures on PostgreSQL.
+
+ *Roderick van Domburg*
+
* Fixed `ActiveSupport::Duration#eql?` so that `1.second.eql?(1.second)` is
true.
This fixes the current situation of:
@@ -222,651 +245,54 @@
deprecated.
*Pavel Pravosud*
* `HashWithIndifferentAccess` better respects `#to_hash` on objects it's
- given. In particular `#update`, `#merge`, `#replace` all accept objects
- which respond to `#to_hash`, even if those objects are not Hashes directly.
+ given. In particular, `.new`, `#update`, `#merge`, `#replace` all accept
+ objects which respond to `#to_hash`, even if those objects are not Hashes
+ directly.
- Currently, if `HashWithIndifferentAccess.new` is given a non-Hash (even if
- it responds to `#to_hash`) that object is treated as the default value,
- rather than the initial keys and value. Changing that could break existing
- code, so it will be updated in the next minor version.
-
*Peter Jaros*
+* Deprecate `Class#superclass_delegating_accessor`, use `Class#class_attribute` instead.
-## Rails 4.1.1 (May 6, 2014) ##
+ *Akshay Vishnoi*
-* No changes.
+* Ensure classes which `include Enumerable` get `#to_json` in addition to
+ `#as_json`.
+ *Sammy Larbi*
-## Rails 4.1.0 (April 8, 2014) ##
+* Change the signature of `fetch_multi` to return a hash rather than an
+ array. This makes it consistent with the output of `read_multi`.
-* Added `Object#presence_in` to simplify value whitelisting.
-
- Before:
-
- params[:bucket_type].in?(%w( project calendar )) ? params[:bucket_type] : nil
-
- After:
-
- params[:bucket_type].presence_in %w( project calendar )
-
- *DHH*
-
-* Time helpers honor the application time zone when passed a date.
-
- *Xavier Noria*
-
-* Fix the implementation of Multibyte::Unicode.tidy_bytes for JRuby
-
- The existing implementation caused JRuby to raise the error:
- `Encoding::ConverterNotFoundError: code converter not found (UTF-8 to UTF8-MAC)`
-
- *Justin Coyne*
-
-* Fix `to_param` behavior when there are nested empty hashes.
-
- Before:
-
- params = {c: 3, d: {}}.to_param # => "&c=3"
-
- After:
-
- params = {c: 3, d: {}}.to_param # => "c=3&d="
-
- Fixes #13892.
-
- *Hincu Petru*
-
-* Deprecate custom `BigDecimal` serialization.
-
- Deprecate the custom `BigDecimal` serialization that is included when requiring
- `active_support/all`. Let Ruby handle YAML serialization for `BigDecimal`
- instead.
-
- Fixes #12467.
-
- *David Celis*
-
-* Fix parsing bugs in `XmlMini`
-
- Symbols or boolean parsing would raise an error for non string values (e.g.
- integers). Decimal parsing would fail due to a missing requirement.
-
- *Birkir A. Barkarson*
-
-* Maintain the current timezone when calling `wrap_with_time_zone`
-
- Extend the solution from the fix for #12163 to the general case where `Time`
- methods are wrapped with a time zone.
-
- Fixes #12596.
-
- *Andrew White*
-
-* Remove behavior that automatically remove the Date/Time stubs, added by `travel`
- and `travel_to` methods, after each test case.
-
- Now users have to use the `travel_back` or the block version of `travel` and
- `travel_to` methods to clean the stubs.
-
- *Rafael Mendonça França*
-
-* Add `travel_back` to remove stubs from `travel` and `travel_to`.
-
- *Rafael Mendonça França*
-
-* Remove the deprecation about the `#filter` method.
-
- Filter objects should now rely on method corresponding to the filter type
- (e.g. `#before`).
-
- *Aaron Patterson*
-
-* Add `ActiveSupport::JSON::Encoding.time_precision` as a way to configure the
- precision of encoded time values:
-
- Time.utc(2000, 1, 1).as_json # => "2000-01-01T00:00:00.000Z"
- ActiveSupport::JSON::Encoding.time_precision = 0
- Time.utc(2000, 1, 1).as_json # => "2000-01-01T00:00:00Z"
-
*Parker Selbert*
-* Maintain the current timezone when calling `change` during DST overlap
+* Introduce `Concern#class_methods` as a sleek alternative to clunky
+ `module ClassMethods`. Add `Kernel#concern` to define at the toplevel
+ without chunky `module Foo; extend ActiveSupport::Concern` boilerplate.
- Currently if a time is changed during DST overlap in the autumn then the method
- `period_for_local` will return the DST period. However if the original time is
- not DST then this can be surprising and is not what is generally wanted. This
- commit changes that behavior to maintain the current period if it's in the list
- of periods returned by `periods_for_local`.
-
- Fixes #12163.
-
- *Andrew White*
-
-* Added `Hash#compact` and `Hash#compact!` for removing items with nil value
- from hash.
-
- *Celestino Gomes*
-
-* Maintain proleptic gregorian in Time#advance
-
- `Time#advance` uses `Time#to_date` and `Date#advance` to calculate a new date.
- The `Date` object returned by `Time#to_date` is constructed with the assumption
- that the `Time` object represents a proleptic gregorian date, but it is
- configured to observe the default julian calendar reform date (2299161j)
- for purposes of calculating month, date and year:
-
- Time.new(1582, 10, 4).to_date.to_s # => "1582-09-24"
- Time.new(1582, 10, 4).to_date.gregorian.to_s # => "1582-10-04"
-
- This patch ensures that when the intermediate `Date` object is advanced
- to yield a new `Date` object, that the `Time` object for return is constructed
- with a proleptic gregorian month, date and year.
-
- *Riley Lynch*
-
-* `MemCacheStore` should only accept a `Dalli::Client`, or create one.
-
- *arthurnn*
-
-* Don't lazy load the `tzinfo` library as it causes problems on Windows.
-
- Fixes #13553.
-
- *Andrew White*
-
-* Use `remove_possible_method` instead of `remove_method` to avoid
- a `NameError` to be thrown on FreeBSD with the `Date` object.
-
- *Rafael Mendonça França*, *Robin Dupret*
-
-* `blank?` and `present?` commit to return singletons.
-
- *Xavier Noria*, *Pavel Pravosud*
-
-* Fixed Float related error in NumberHelper with large precisions.
-
- Before:
-
- ActiveSupport::NumberHelper.number_to_rounded '3.14159', precision: 50
- #=> "3.14158999999999988261834005243144929409027099609375"
-
- After:
-
- ActiveSupport::NumberHelper.number_to_rounded '3.14159', precision: 50
- #=> "3.14159000000000000000000000000000000000000000000000"
-
- *Kenta Murata*, *Akira Matsuda*
-
-* Default the new `I18n.enforce_available_locales` config to `true`, meaning
- `I18n` will make sure that all locales passed to it must be declared in the
- `available_locales` list.
-
- To disable it add the following configuration to your application:
-
- config.i18n.enforce_available_locales = false
-
- This also ensures I18n configuration is properly initialized taking the new
- option into account, to avoid their deprecations while booting up the app.
-
- *Carlos Antonio da Silva*, *Yves Senn*
-
-* Introduce Module#concerning: a natural, low-ceremony way to separate
- responsibilities within a class.
-
- Imported from https://github.com/37signals/concerning#readme
-
- class Todo < ActiveRecord::Base
- concerning :EventTracking do
- included do
- has_many :events
- end
-
- def latest_event
- ...
- end
-
- private
- def some_internal_method
- ...
- end
+ # app/models/concerns/authentication.rb
+ concern :Authentication do
+ included do
+ after_create :generate_private_key
end
- concerning :Trashable do
- def trashed?
- ...
+ class_methods do
+ def authenticate(credentials)
+ # ...
end
-
- def latest_event
- super some_option: true
- end
end
- end
- is equivalent to defining these modules inline, extending them into
- concerns, then mixing them in to the class.
-
- Inline concerns tame "junk drawer" classes that intersperse many unrelated
- class-level declarations, public instance methods, and private
- implementation. Coalesce related bits and give them definition.
- These are a stepping stone toward future growth & refactoring.
-
- When to move on from an inline concern:
- * Encapsulating state? Extract collaborator object.
- * Encompassing more public behavior or implementation? Move to separate file.
- * Sharing behavior among classes? Move to separate file.
-
- *Jeremy Kemper*
-
-* Fix file descriptor being leaked on each call to `Kernel.silence_stream`.
-
- *Mario Visic*
-
-* Added `Date#all_week/month/quarter/year` for generating date ranges.
-
- *Dmitriy Meremyanin*
-
-* Add `Time.zone.yesterday` and `Time.zone.tomorrow`. These follow the
- behavior of Ruby's `Date.yesterday` and `Date.tomorrow` but return localized
- versions, similar to how `Time.zone.today` has returned a localized version
- of `Date.today`.
-
- *Colin Bartlett*
-
-* Show valid keys when `assert_valid_keys` raises an exception, and show the
- wrong value as it was entered.
-
- *Gonzalo Rodríguez-Baltanás Díaz*
-
-* Deprecated `Numeric#{ago,until,since,from_now}`, the user is expected to explicitly
- convert the value into an AS::Duration, i.e. `5.ago` => `5.seconds.ago`
-
- This will help to catch subtle bugs like:
-
- def recent?(days = 3)
- self.created_at >= days.ago
- end
-
- The above code would check if the model is created within the last 3 **seconds**.
-
- In the future, `Numeric#{ago,until,since,from_now}` should be removed completely,
- or throw some sort of errors to indicate there are no implicit conversion from
- Numeric to AS::Duration.
-
- *Godfrey Chan*
-
-* Requires JSON gem version 1.7.7 or above due to a security issue in older versions.
-
- *Godfrey Chan*
-
-* Removed the old pure-Ruby JSON encoder and switched to a new encoder based on the built-in JSON
- gem.
-
- Support for encoding `BigDecimal` as a JSON number, as well as defining custom `encode_json`
- methods to control the JSON output has been **removed from core**. The new encoder will always
- encode BigDecimals as `String`s and ignore any custom `encode_json` methods.
-
- The old encoder has been extracted into the `activesupport-json_encoder` gem. Installing that
- gem will bring back the ability to encode `BigDecimal`s as numbers as well as `encode_json`
- support.
-
- Setting the related configuration `ActiveSupport.encode_big_decimal_as_string` without the
- `activesupport-json_encoder` gem installed will raise an error.
-
- *Godfrey Chan*
-
-* Add `ActiveSupport::Testing::TimeHelpers#travel` and `#travel_to`. These methods change current
- time to the given time or time difference by stubbing `Time.now` and `Date.today` to return the
- time or date after the difference calculation, or the time or date that got passed into the
- method respectively.
-
- Example for `#travel`:
-
- Time.now # => 2013-11-09 15:34:49 -05:00
- travel 1.day
- Time.now # => 2013-11-10 15:34:49 -05:00
- Date.today # => Sun, 10 Nov 2013
-
- Example for `#travel_to`:
-
- Time.now # => 2013-11-09 15:34:49 -05:00
- travel_to Time.new(2004, 11, 24, 01, 04, 44)
- Time.now # => 2004-11-24 01:04:44 -05:00
- Date.today # => Wed, 24 Nov 2004
-
- Both of these methods also accept a block, which will return the current time back to its
- original state at the end of the block:
-
- Time.now # => 2013-11-09 15:34:49 -05:00
-
- travel 1.day do
- User.create.created_at # => Sun, 10 Nov 2013 15:34:49 EST -05:00
- end
-
- travel_to Time.new(2004, 11, 24, 01, 04, 44) do
- User.create.created_at # => Wed, 24 Nov 2004 01:04:44 EST -05:00
- end
-
- Time.now # => 2013-11-09 15:34:49 -05:00
-
- This module is included in `ActiveSupport::TestCase` automatically.
-
- *Prem Sichanugrist*, *DHH*
-
-* Unify `cattr_*` interface: allow to pass a block to `cattr_reader`.
-
- Example:
-
- class A
- cattr_reader(:defr) { 'default_reader_value' }
- end
- A.defr # => 'default_reader_value'
-
- *Alexey Chernenkov*
-
-* Improved compatibility with the stdlib JSON gem.
-
- Previously, calling `::JSON.{generate,dump}` sometimes causes unexpected
- failures such as intridea/multi_json#86.
-
- `::JSON.{generate,dump}` now bypasses the ActiveSupport JSON encoder
- completely and yields the same result with or without ActiveSupport. This
- means that it will **not** call `as_json` and will ignore any options that
- the JSON gem does not natively understand. To invoke ActiveSupport's JSON
- encoder instead, use `obj.to_json(options)` or
- `ActiveSupport::JSON.encode(obj, options)`.
-
- *Godfrey Chan*
-
-* Fix Active Support `Time#to_json` and `DateTime#to_json` to return 3 decimal
- places worth of fractional seconds, similar to `TimeWithZone`.
-
- *Ryan Glover*
-
-* Removed circular reference protection in JSON encoder, deprecated
- `ActiveSupport::JSON::Encoding::CircularReferenceError`.
-
- *Godfrey Chan*, *Sergio Campamá*
-
-* Add `capitalize` option to `Inflector.humanize`, so strings can be humanized without being capitalized:
-
- 'employee_salary'.humanize # => "Employee salary"
- 'employee_salary'.humanize(capitalize: false) # => "employee salary"
-
- *claudiob*
-
-* Fixed `Object#as_json` and `Struct#as_json` not working properly with options. They now take
- the same options as `Hash#as_json`:
-
- struct = Struct.new(:foo, :bar).new
- struct.foo = "hello"
- struct.bar = "world"
- json = struct.as_json(only: [:foo]) # => {foo: "hello"}
-
- *Sergio Campamá*, *Godfrey Chan*
-
-* Added `Numeric#in_milliseconds`, like `1.hour.in_milliseconds`, so we can feed them to JavaScript functions like `getTime()`.
-
- *DHH*
-
-* Calling `ActiveSupport::JSON.decode` with unsupported options now raises an error.
-
- *Godfrey Chan*
-
-* Support `:unless_exist` in `FileStore`.
-
- *Michael Grosser*
-
-* Fix `slice!` deleting the default value of the hash.
-
- *Antonio Santos*
-
-* `require_dependency` accepts objects that respond to `to_path`, in
- particular `Pathname` instances.
-
- *Benjamin Fleischer*
-
-* Disable the ability to iterate over Range of AS::TimeWithZone
- due to significant performance issues.
-
- *Bogdan Gusiev*
-
-* Allow attaching event subscribers to ActiveSupport::Notifications namespaces
- before they're defined. Essentially, this means instead of this:
-
- class JokeSubscriber < ActiveSupport::Subscriber
- def sql(event)
- puts "A rabbi and a priest walk into a bar..."
+ def generate_private_key
+ # ...
end
-
- # This call needs to happen *after* defining the methods.
- attach_to "active_record"
end
- You can do this:
-
- class JokeSubscriber < ActiveSupport::Subscriber
- # This is much easier to read!
- attach_to "active_record"
-
- def sql(event)
- puts "A rabbi and a priest walk into a bar..."
- end
+ # app/models/user.rb
+ class User < ActiveRecord::Base
+ include Authentication
end
- This should make it easier to read and understand these subscribers.
+ *Jeremy Kemper*
- *Daniel Schierbeck*
-
-* Add `Date#middle_of_day`, `DateTime#middle_of_day` and `Time#middle_of_day` methods.
-
- Also added `midday`, `noon`, `at_midday`, `at_noon` and `at_middle_of_day` as aliases.
-
- *Anatoli Makarevich*
-
-* Fix ActiveSupport::Cache::FileStore#cleanup to no longer rely on missing each_key method.
-
- *Murray Steele*
-
-* Ensure that autoloaded constants in all-caps nestings are marked as
- autoloaded.
-
- *Simon Coffey*
-
-* Add `String#remove(pattern)` as a short-hand for the common pattern of
- `String#gsub(pattern, '')`.
-
- *DHH*
-
-* Adds a new deprecation behaviour that raises an exception. Throwing this
- line into +config/environments/development.rb+
-
- ActiveSupport::Deprecation.behavior = :raise
-
- will cause the application to raise an +ActiveSupport::DeprecationException+
- on deprecations.
-
- Use this for aggressive deprecation cleanups.
-
- *Xavier Noria*
-
-* Remove 'cow' => 'kine' irregular inflection from default inflections.
-
- *Andrew White*
-
-* Add `DateTime#to_s(:iso8601)` and `Date#to_s(:iso8601)` for consistency.
-
- *Andrew White*
-
-* Add `Time#to_s(:iso8601)` for easy conversion of times to the iso8601 format for easy Javascript date parsing.
-
- *DHH*
-
-* Improve `ActiveSupport::Cache::MemoryStore` cache size calculation.
- The memory used by a key/entry pair is calculated via `#cached_size`:
-
- def cached_size(key, entry)
- key.to_s.bytesize + entry.size + PER_ENTRY_OVERHEAD
- end
-
- The value of `PER_ENTRY_OVERHEAD` is 240 bytes based on an [empirical
- estimation](https://gist.github.com/ssimeonov/6047200) for 64-bit MRI on
- 1.9.3 and 2.0.
-
- Fixes #11512.
-
- *Simeon Simeonov*
-
-* Only raise `Module::DelegationError` if it's the source of the exception.
-
- Fixes #10559.
-
- *Andrew White*
-
-* Make `Time.at_with_coercion` retain the second fraction and return local time.
-
- Fixes #11350.
-
- *Neer Friedman*, *Andrew White*
-
-* Make `HashWithIndifferentAccess#select` always return the hash, even when
- `Hash#select!` returns `nil`, to allow further chaining.
-
- *Marc Schütz*
-
-* Remove deprecated `String#encoding_aware?` core extensions (`core_ext/string/encoding`).
-
- *Arun Agrawal*
-
-* Remove deprecated `Module#local_constant_names` in favor of `Module#local_constants`.
-
- *Arun Agrawal*
-
-* Remove deprecated `DateTime.local_offset` in favor of `DateTime.civil_from_format`.
-
- *Arun Agrawal*
-
-* Remove deprecated `Logger` core extensions (`core_ext/logger.rb`).
-
- *Carlos Antonio da Silva*
-
-* Remove deprecated `Time#time_with_datetime_fallback`, `Time#utc_time`
- and `Time#local_time` in favor of `Time#utc` and `Time#local`.
-
- *Vipul A M*
-
-* Remove deprecated `Hash#diff` with no replacement.
-
- If you're using it to compare hashes for the purpose of testing, please use
- MiniTest's `assert_equal` instead.
-
- *Carlos Antonio da Silva*
-
-* Remove deprecated `Date#to_time_in_current_zone` in favor of `Date#in_time_zone`.
-
- *Vipul A M*
-
-* Remove deprecated `Proc#bind` with no replacement.
-
- *Carlos Antonio da Silva*
-
-* Remove deprecated `Array#uniq_by` and `Array#uniq_by!`, use native
- `Array#uniq` and `Array#uniq!` instead.
-
- *Carlos Antonio da Silva*
-
-* Remove deprecated `ActiveSupport::BasicObject`, use `ActiveSupport::ProxyObject` instead.
-
- *Carlos Antonio da Silva*
-
-* Remove deprecated `BufferedLogger`, use `ActiveSupport::Logger` instead.
-
- *Yves Senn*
-
-* Remove deprecated `assert_present` and `assert_blank` methods, use `assert
- object.blank?` and `assert object.present?` instead.
-
- *Yves Senn*
-
-* Fix return value from `BacktraceCleaner#noise` when the cleaner is configured
- with multiple silencers.
-
- Fixes #11030.
-
- *Mark J. Titorenko*
-
-* `HashWithIndifferentAccess#select` now returns a `HashWithIndifferentAccess`
- instance instead of a `Hash` instance.
-
- Fixes #10723.
-
- *Albert Llop*
-
-* Add `DateTime#usec` and `DateTime#nsec` so that `ActiveSupport::TimeWithZone` keeps
- sub-second resolution when wrapping a `DateTime` value.
-
- Fixes #10855.
-
- *Andrew White*
-
-* Fix `ActiveSupport::Dependencies::Loadable#load_dependency` calling
- `#blame_file!` on Exceptions that do not have the Blamable mixin
-
- *Andrew Kreiling*
-
-* Override `Time.at` to support the passing of Time-like values when called with a single argument.
-
- *Andrew White*
-
-* Prevent side effects to hashes inside arrays when
- `Hash#with_indifferent_access` is called.
-
- Fixes #10526.
-
- *Yves Senn*
-
-* Removed deprecated `ActiveSupport::JSON::Variable` with no replacement.
-
- *Toshinori Kajihara*
-
-* Raise an error when multiple `included` blocks are defined for a Concern.
- The old behavior would silently discard previously defined blocks, running
- only the last one.
-
- *Mike Dillon*
-
-* Replace `multi_json` with `json`.
-
- Since Rails requires Ruby 1.9 and since Ruby 1.9 includes `json` in the standard library,
- `multi_json` is no longer necessary.
-
- *Erik Michaels-Ober*
-
-* Added escaping of U+2028 and U+2029 inside the json encoder.
- These characters are legal in JSON but break the Javascript interpreter.
- After escaping them, the JSON is still legal and can be parsed by Javascript.
-
- *Mario Caropreso + Viktor Kelemen + zackham*
-
-* Fix skipping object callbacks using metadata fetched via callback chain
- inspection methods (`_*_callbacks`)
-
- *Sean Walbran*
-
-* Add a `fetch_multi` method to the cache stores. The method provides
- an easy to use API for fetching multiple values from the cache.
-
- Example:
-
- # Calculating scores is expensive, so we only do it for posts
- # that have been updated. Cache keys are automatically extracted
- # from objects that define a #cache_key method.
- scores = Rails.cache.fetch_multi(*posts) do |post|
- calculate_score(post)
- end
-
- *Daniel Schierbeck*
-
-Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activesupport/CHANGELOG.md) for previous changes.
+Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activesupport/CHANGELOG.md) for previous changes.