diff options
Diffstat (limited to 'activesupport/CHANGELOG.md')
-rw-r--r-- | activesupport/CHANGELOG.md | 394 |
1 files changed, 128 insertions, 266 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 8b76fa97d1..35be823ea1 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,343 +1,205 @@ -* `MessageVerifier.new` raises an appropriate exception if the secret is `nil`. - This prevents `MessageVerifier#generate` from raising a cryptic error later on. +* Fixed a problem where String#truncate_words would get stuck with a complex + string. - *Kostiantyn Kahanskyi* + *Henrik Nygren* -* Introduced new configuration option `active_support.test_order` for - specifying the order 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 not `duplicable?`. This allows - hashes and arrays containing `Method` objects to be `deep_dup`ed. - - *Peter Jaros* - -* `determine_constant_from_test_name` does no longer shadow `NameError`s - which happen during constant autoloading. - - Fixes #9933. - - *Guo Xiang Tan* - -* Added instance_eval version to Object#try, so you can do this: - - person.try { name.first } - - instead of: - - person.try { |person| person.name.first } - - *DHH* - -* 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 file - `active_support/core_ext/object/json` without requiring `active_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` and `quietly`. - - 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 instrument items when there - are subscriber 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 - using `Time#-`: - - Time.now.end_of_day - Time.now.beginning_of_day #=> 86399.999999999 +* Fixed a roundtrip problem with AS::SafeBuffer where primitive-like strings + will be dumped as primitives: Before: - Time.zone.now.end_of_day.nsec #=> 999999999 - Time.zone.now.end_of_day - Time.zone.now.beginning_of_day #=> 86400.0 + 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 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 friends - - Replacements: - - 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. + 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* -* DateTime `advance` now supports partial days. +* Enable `number_to_percentage` to keep the number's precision by allowing + `:precision` to be `nil`. - Before: + *Jack Xu* - DateTime.now.advance(days: 1, hours: 12) +* `config_accessor` became a private method, as with Ruby's `attr_accessor`. - After: + *Akira Matsuda* - DateTime.now.advance(days: 1.5) +* `AS::Testing::TimeHelpers#travel_to` now changes `DateTime.now` as well as + `Time.now` and `Date.today`. - Fixes #12005. + *Yuki Nishijima* - *Shay Davidson* +* Add `file_fixture` to `ActiveSupport::TestCase`. + It provides a simple mechanism to access sample files in your test cases. -* `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!`. + By default file fixtures are stored in `test/fixtures/files`. This can be + configured per test-case using the `file_fixture_path` class attribute. - *OZAWA Sakuro* + *Yves Senn* -* Fixed confusing `DelegationError` in `Module#delegate`. +* Return value of yielded block in `File.atomic_write`. - See #15186. + *Ian Ker-Seymer* - *Vladimir Yarotsky* +* Duplicate frozen array when assigning it to a HashWithIndifferentAccess so + that it doesn't raise a `RuntimeError` when calling `map!` on it in `convert_value`. -* Fixed `ActiveSupport::Subscriber` so that no duplicate subscriber is created - when a subscriber method is redefined. + Fixes #18550. - *Dennis Schön* + *Aditya Kapoor* -* Remove deprecated string based terminators for `ActiveSupport::Callbacks`. +* Add missing time zone definitions for Russian Federation and sync them + with `zone.tab` file from tzdata version 2014j (latest). - *Eileen M. Uchitelle* + *Andrey Novikov* -* Fixed an issue when using - `ActiveSupport::NumberHelper::NumberToDelimitedConverter` to - convert a value that is an `ActiveSupport::SafeBuffer` introduced - in 2da9d67. +* Add `SecureRandom.base58` for generation of random base58 strings. - See #15064. + *Matthew Draper*, *Guillermo Iguaran* - *Mark J. Titorenko* +* Add `#prev_day` and `#next_day` counterparts to `#yesterday` and + `#tomorrow` for `Date`, `Time`, and `DateTime`. -* `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`. + *George Claghorn* - *Ulysse Carion* +* Add `same_time` option to `#next_week` and `#prev_week` for `Date`, `Time`, + and `DateTime`. -* `humanize` strips leading underscores, if any. + *George Claghorn* - Before: +* Add `#on_weekend?`, `#next_weekday`, `#prev_weekday` methods to `Date`, + `Time`, and `DateTime`. - '_id'.humanize # => "" + `#on_weekend?` returns true if the receiving date/time falls on a Saturday + or Sunday. - After: + `#next_weekday` returns a new date/time representing the next day that does + not fall on a Saturday or Sunday. - '_id'.humanize # => "Id" + `#prev_weekday` returns a new date/time representing the previous day that + does not fall on a Saturday or Sunday. - *Xavier Noria* + *George Claghorn* -* Fixed backward compatibility isues introduced in 326e652. +* Change the default test order from `:sorted` to `:random`. - Empty Hash or Array should not present in serialization result. + *Rafael Mendonça França* - {a: []}.to_query # => "" - {a: {}}.to_query # => "" +* Remove deprecated `ActiveSupport::JSON::Encoding::CircularReferenceError`. + + *Rafael Mendonça França* - For more info see #14948. +* Remove deprecated methods `ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=` + and `ActiveSupport::JSON::Encoding.encode_big_decimal_as_string`. - *Bogdan Gusiev* + *Rafael Mendonça França* -* Add `Digest::UUID::uuid_v3` and `Digest::UUID::uuid_v5` to support stable - UUID fixtures on PostgreSQL. +* Remove deprecated `ActiveSupport::SafeBuffer#prepend`. - *Roderick van Domburg* + *Rafael Mendonça França* -* Fixed `ActiveSupport::Duration#eql?` so that `1.second.eql?(1.second)` is - true. +* Remove deprecated methods at `Kernel`. - This fixes the current situation of: + `silence_stderr`, `silence_stream`, `capture` and `quietly`. - 1.second.eql?(1.second) #=> false + *Rafael Mendonça França* - `eql?` also requires that the other object is an `ActiveSupport::Duration`. - This requirement makes `ActiveSupport::Duration`'s behavior consistent with - the behavior of Ruby's numeric types: +* Remove deprecated `active_support/core_ext/big_decimal/yaml_conversions` + file. - 1.eql?(1.0) #=> false - 1.0.eql?(1) #=> false + *Rafael Mendonça França* - 1.second.eql?(1) #=> false (was true) - 1.eql?(1.second) #=> false +* Remove deprecated methods `ActiveSupport::Cache::Store.instrument` and + `ActiveSupport::Cache::Store.instrument=`. - { 1 => "foo", 1.0 => "bar" } - #=> { 1 => "foo", 1.0 => "bar" } + *Rafael Mendonça França* - { 1 => "foo", 1.second => "bar" } - # now => { 1 => "foo", 1.second => "bar" } - # was => { 1 => "bar" } +* Change the way in which callback chains can be halted. - And though the behavior of these hasn't changed, for reference: + The preferred method to halt a callback chain from now on is to explicitly + `throw(:abort)`. + In the past, returning `false` in an ActiveSupport callback had the side + effect of halting the callback chain. This is not recommended anymore and, + depending on the value of + `Callbacks::CallbackChain.halt_and_display_warning_on_return_false`, will + either not work at all or display a deprecation warning. - 1 == 1.0 #=> true - 1.0 == 1 #=> true +* Add Callbacks::CallbackChain.halt_and_display_warning_on_return_false - 1 == 1.second #=> true - 1.second == 1 #=> true + Setting `Callbacks::CallbackChain.halt_and_display_warning_on_return_false` + to true will let an app support the deprecated way of halting callback + chains by returning `false`. - *Emily Dobervich* + Setting the value to false will tell the app to ignore any `false` value + returned by callbacks, and only halt the chain upon `throw(:abort)`. -* `ActiveSupport::SafeBuffer#prepend` acts like `String#prepend` and modifies - instance in-place, returning self. `ActiveSupport::SafeBuffer#prepend!` is - deprecated. + The value can also be set with the Rails configuration option + `config.active_support.halt_callback_chains_on_return_false`. - *Pavel Pravosud* + When the configuration option is missing, its value is `true`, so older apps + ported to Rails 5.0 will not break (but display a deprecation warning). + For new Rails 5.0 apps, its value is set to `false` in an initializer, so + these apps will support the new behavior by default. -* `HashWithIndifferentAccess` better respects `#to_hash` on objects it's - given. In particular, `.new`, `#update`, `#merge`, `#replace` all accept - objects which respond to `#to_hash`, even if those objects are not Hashes - directly. + *claudiob* - *Peter Jaros* +* Changes arguments and default value of CallbackChain's :terminator option -* Deprecate `Class#superclass_delegating_accessor`, use `Class#class_attribute` instead. + Chains of callbacks defined without an explicit `:terminator` option will + now be halted as soon as a `before_` callback throws `:abort`. - *Akshay Vishnoi* + Chains of callbacks defined with a `:terminator` option will maintain their + existing behavior of halting as soon as a `before_` callback matches the + terminator's expectation. -* Ensure classes which `include Enumerable` get `#to_json` in addition to - `#as_json`. + *claudiob* - *Sammy Larbi* +* Deprecate `MissingSourceFile` in favor of `LoadError`. -* Change the signature of `fetch_multi` to return a hash rather than an - array. This makes it consistent with the output of `read_multi`. + `MissingSourceFile` was just an alias to `LoadError` and was not being + raised inside the framework. - *Parker Selbert* + *Rafael Mendonça França* -* 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. +* Add support for error dispatcher classes in `ActiveSupport::Rescuable`. + Now it acts closer to Ruby's rescue. - # app/models/concerns/authentication.rb - concern :Authentication do - included do - after_create :generate_private_key - end + Example: - class_methods do - def authenticate(credentials) - # ... + class BaseController < ApplicationController + module ErrorDispatcher + def self.===(other) + Exception === other && other.respond_to?(:status) end end - def generate_private_key - # ... + rescue_from ErrorDispatcher do |error| + render status: error.status, json: { error: error.to_s } end end - # app/models/user.rb - class User < ActiveRecord::Base - include Authentication - end + *Genadi Samokovarov* + +* Add `#verified` and `#valid_message?` methods to `ActiveSupport::MessageVerifier` + + Previously, the only way to decode a message with `ActiveSupport::MessageVerifier` + was to use `#verify`, which would raise an exception on invalid messages. Now + `#verified` can also be used, which returns `nil` on messages that cannot be + decoded. + + Previously, there was no way to check if a message's format was valid without + attempting to decode it. `#valid_message?` is a boolean convenience method that + checks whether the message is valid without actually decoding it. - *Jeremy Kemper* + *Logan Leger* -Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activesupport/CHANGELOG.md) for previous changes. +Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activesupport/CHANGELOG.md) for previous changes. |