aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/CHANGELOG.md
Commit message (Collapse)AuthorAgeFilesLines
* Add missing support for modulo operations on durationsSayan Chakraborty2017-07-281-0/+22
| | | | | | | | | | | Rails 5.1 introduce an `ActiveSupport::Duration::Scalar` class as a wrapper around a numeric value as a way of ensuring a duration was the outcome of an expression. However the implementation was missing support for modulo operations. This commit adds support for those operations and should result in a duration being returned from expressions involving them. Fixes #29603 and #29743.
* Fix division where a duration is the denominatorAndrew White2017-07-271-0/+10
| | | | | | | | | PR #29163 introduced a change in behavior when a duration was the denominator in a calculation - this was incorrect as dividing by a duration should always return a `Numeric`. The behavior of previous versions of Rails has been restored. Fixes #29592.
* [ci skip] Remove superfluous paragraphs; fully qualify constants.Kasper Timm Hansen2017-07-241-8/+2
| | | | | | | The paragraphs retread ground covered by the title and the usage examples, so let's just remove them. [ Assain Jaleel & Kasper Timm Hansen ]
* add to changelog: purpose and expiry supportAssain2017-07-241-0/+28
| | | | [ci skip]
* Merge branch 'master' into make-reverse-merge-bang-order-consistentSean Griffin2017-07-171-537/+60
|\
| * Added time helper method `freeze_time` which is an alias for `travel_to ↵प्रथमेश Sonpatki2017-07-101-0/+4
| | | | | | | | Time.now` (#29681)
| * [ci skip] Add changelog entry for 6d402c6Kasper Timm Hansen2017-06-111-0/+7
| | | | | | | | [ Assain Jaleel & Kasper Timm Hansen ]
| * Cache: write_multi (#29366)Jeremy Daer2017-06-061-0/+14
| | | | | | | | | | | | | | | | | | | | | | Rails.cache.write_multi foo: 'bar', baz: 'qux' Plus faster `fetch_multi` with stores that implement `write_multi_entries`. Keys that aren't found may be written to the cache store in one shot instead of separate writes. The default implementation simply calls `write_entry` for each entry. Stores may override if they're capable of one-shot bulk writes, like Redis `MSET`.
| * Fix indentation + Add backticks [ci skip]Ryuta Kamizono2017-06-061-2/+4
| |
| * Implement mattr_acessor :default optionGenadi Samokovarov2017-06-031-0/+9
| |
| * Add next occur and previous occurred day of week API (#26600)Shota Iguchi2017-05-301-0/+4
| |
| * Fix indentation + remove blank lineJon Moss2017-05-291-4/+4
| | | | | | | | [ci skip]
| * Add backticksJon Moss2017-05-291-1/+1
| | | | | | | | [ci skip]
| * Add option for class_attribute default (#29270)David Heinemeier Hansson2017-05-291-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | * Allow a default value to be declared for class_attribute * Convert to using class_attribute default rather than explicit setter * Removed instance_accessor option by mistake * False is a valid default value * Documentation
| * Merge pull request #29097 from ↵Matthew Draper2017-05-281-0/+4
| |\ | | | | | | | | | | | | | | | EilisHamilton/fix_uncountable_pluralization_locale Fix pluralization of uncountables when given a locale
| | * Fix pluralization of uncountables when given a localeEilis Hamilton2017-05-191-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | Previously apply_inflections would only use the :en uncountables rather then the ones for the locale that was passed to pluralize or singularize. This changes apply_inflections to take a locale which it will use to find the uncountables.
| * | ActiveSupport::CurrentAttributes provides a thread-isolated attributes ↵David Heinemeier Hansson2017-05-261-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | singleton (#29180) * Add ActiveSupport::CurrentAttributes to provide a thread-isolated attributes singleton * Need to require first * Move stubs into test namespace. Thus they won't conflict with other Current and Person stubs. * End of the line for you, whitespace! * Support super in attribute methods. Define instance level accessors in an included module such that `super` in an overriden accessor works, akin to Active Model. * Spare users the manual require. Follow the example of concerns, autoload in the top level Active Support file. * Add bidelegation support * Rename #expose to #set. Simpler, clearer * Automatically reset every instance. Skips the need for users to actively embed something that resets their CurrentAttributes instances. * Fix test name; add tangible name value when blank. * Try to ensure we run after a request as well. * Delegate all missing methods to the instance This allows regular `delegate` to serve, so we don't need bidelegate. * Properly test resetting after execution cycle. Also remove the stale puts debugging. * Update documentation to match new autoreset
| * | Fix implicit calculations with scalars and durationsAndrew White2017-05-201-0/+22
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously calculations where the scalar is first would be converted to a duration of seconds but this causes issues with dates being converted to times, e.g: Time.zone = "Beijing" # => Asia/Shanghai date = Date.civil(2017, 5, 20) # => Mon, 20 May 2017 2 * 1.day # => 172800 seconds date + 2 * 1.day # => Mon, 22 May 2017 00:00:00 CST +08:00 Now the `ActiveSupport::Duration::Scalar` calculation methods will try to maintain the part structure of the duration where possible, e.g: Time.zone = "Beijing" # => Asia/Shanghai date = Date.civil(2017, 5, 20) # => Mon, 20 May 2017 2 * 1.day # => 2 days date + 2 * 1.day # => Mon, 22 May 2017 Fixes #29160, #28970.
| * Cleanup CHANGELOGs [ci skip]Ryuta Kamizono2017-05-191-1/+1
| | | | | | | | | | * Fix indentation. * Add backticks.
| * Use recyclable cache keys (#29092)David Heinemeier Hansson2017-05-181-0/+6
| |
| * Cleanup CHANGELOGs [ci skip]Ryuta Kamizono2017-04-301-0/+1
| | | | | | | | | | | | * Remove trailing spaces. * Add backticks around method and command. * Fix indentation.
| * Send deprecation horizon and gem name as arguments to deprecation heavier ↵Willem van Bergen2017-04-191-0/+4
| | | | | | | | handler, and make sure they are used for the ActiveSupport::Notifications message.
| * Add additional options to time `change` methodsAndrew White2017-04-141-0/+10
| | | | | | | | | | | | | | Support `:offset` in `Time#change` and `:zone` or `:offset` in `ActiveSupport::TimeWithZone#change`. Fixes #28723.
| * Move CHANGELOG.md entry from Active Support to Action PackJon Moss2017-04-111-13/+1
| | | | | | | | | | | | | | Was looking through #28402, and realized the CHANGELOG.md entry is in the wrong place. Sorry we didn't catch this during code review :cry: [ci skip]
| * Add action_controller_api, action_controller_base on_load hookJulian Nadeau2017-04-101-1/+13
| |
| * Implement `fetch_values` for HashWithIndifferentAccess (#28316)Josh Pencheon2017-04-101-0/+6
| | | | | | | | | | | | | | `fetch_values` was added to Hash in Ruby 2.3.0: https://bugs.ruby-lang.org/issues/10017 This patch adds an implemention for instances of HWAI, in line with the existing definitions of `fetch` and `values_at`.
| * minor CHANGELOG formatting changes. [ci skip]Yves Senn2017-03-261-1/+0
| |
| * No need to have an entry that was included in 5.1 in 5.2Rafael Mendonça França2017-03-221-11/+0
| | | | | | | | [ci skip]
| * Add AS::Deprecation::DeprecatedConstantAccessorDominic Cleal2017-03-221-0/+12
| | | | | | | | | | | | | | An alternative to DeprecatedConstantProxy which works more transparently with exceptions because it returns the object that the new constant refers to rather than a proxy. This is then compatible with `rescue OldException`.
| * Start Rails 5.2 developmentMatthew Draper2017-03-221-628/+1
| |
| * Move new CHANGELOG entry to the top [ci skip]yuuji.yaginuma2017-03-161-7/+7
| |
| * Merge pull request #28147 from kmcphillips/master-time-freezeAndrew White2017-03-161-0/+7
| |\ | | | | | | Allow Time#to_time on frozen objects. Return frozen time rather than "RuntimeError: can't modify frozen Time"
| | * Handle #to_time and memoization taking into account memoization, frozen ↵Kevin McPhillips2017-03-061-0/+7
| | | | | | | | | | | | state, and preserve_timezone flag.
| * | Remove implicit coercion deprecation of durationsAndrew White2017-03-151-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In #28204 we deprecated implicit conversion of durations to a numeric which represented the number of seconds in the duration because of unwanted side effects with calculations on durations and dates. This unfortunately had the side effect of forcing a explicit cast when configuring third-party libraries like expiration in Redis, e.g: redis.expire("foo", 5.minutes) To work around this we've removed the deprecation and added a private class that wraps the numeric and can perform calculation involving durations and ensure that they remain a duration irrespective of the order of operations.
| * | Lint activesupport/CHANGELOG.mdJon Moss2017-03-131-8/+10
| | | | | | | | | | | | [ci skip]
| * | Fix indentation and formatting in CHANGELOGs [ci skip]Ryuta Kamizono2017-03-111-17/+17
| | |
| * | Fix typo `titlelize` -> `titleize` [ci skip]yuuji.yaginuma2017-03-071-2/+2
| | |
| * | Update `titlelize` regex to allow apostrophesAndrew White2017-03-061-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 4b685aa the regex in `titlelize` was updated to not match apostrophes to better reflect the nature of the transformation. Unfortunately this had the side effect of breaking capitalization on the first word of a sub-string, e.g: >> "This was 'fake news'".titleize => "This Was 'fake News'" This is fixed by extending the look-behind to also check for a word character on the other side of the apostrophe. Fixes #28312.
* | | Add CHANGELOG entry [skip ci]Erol Fornoles2017-03-061-0/+4
|/ /
* | Add `rfc3339` aliases to `xmlschema`Andrew White2017-03-031-0/+6
| | | | | | | | | | For naming consistency when using the RFC 3339 profile of ISO 8601 in applications.
* | Add `Time.rfc3339` parsing methodAndrew White2017-03-031-0/+8
| | | | | | | | | | | | | | The `Time.xmlschema` and consequently its alias `iso8601` accepts timestamps without a offset in contravention of the RFC 3339 standard. This method enforces that constraint and raises an `ArgumentError` if it doesn't.
* | Add `ActiveSupport::TimeZone.rfc3339` parsing methodAndrew White2017-03-031-0/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously there was no way to get a RFC 3339 timestamp into a specific timezone without either using `parse` or chaining methods. The new method allows parsing directly into the timezone, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.rfc3339("1999-12-31T14:00:00Z") => Fri, 31 Dec 1999 14:00:00 HST -10:00 This new method has stricter semantics than the current `parse` method and will raise an `ArgumentError` instead of returning nil, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.rfc3339("foobar") ArgumentError: invalid date >> Time.zone.parse("foobar") => nil It will also raise an `ArgumentError` when either the time or offset components are missing, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.rfc3339("1999-12-31") ArgumentError: invalid date >> Time.zone.rfc3339("1999-12-31T14:00:00") ArgumentError: invalid date
* | Add `ActiveSupport::TimeZone.iso8601` parsing methodAndrew White2017-03-031-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously there was no way to get a ISO 8601 timestamp into a specific timezone without either using `parse` or chaining methods. The new method allows parsing directly into the timezone, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.iso8601("1999-12-31T14:00:00Z") => Fri, 31 Dec 1999 14:00:00 HST -10:00 If the timestamp is a ISO 8601 date (YYYY-MM-DD) then the time is set to midnight, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.iso8601("1999-12-31") => Fri, 31 Dec 1999 00:00:00 HST -10:00 This new method has stricter semantics than the current `parse` method and will raise an `ArgumentError` instead of returning nil, e.g: >> Time.zone = "Hawaii" => "Hawaii" >> Time.zone.iso8601("foobar") ArgumentError: invalid date >> Time.zone.parse("foobar") => nil
* | Deprecate implicit coercion of `ActiveSupport::Duration`Andrew White2017-03-021-0/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently `ActiveSupport::Duration` implicitly converts to a seconds value when used in a calculation except for the explicit examples of addition and subtraction where the duration is the receiver, e.g: >> 2 * 1.day => 172800 This results in lots of confusion especially when using durations with dates because adding/subtracting a value from a date treats integers as a day and not a second, e.g: >> Date.today => Wed, 01 Mar 2017 >> Date.today + 2 * 1.day => Mon, 10 Apr 2490 To fix this we're implementing `coerce` so that we can provide a deprecation warning with the intent of removing the implicit coercion in Rails 5.2, e.g: >> 2 * 1.day DEPRECATION WARNING: Implicit coercion of ActiveSupport::Duration to a Numeric is deprecated and will raise a TypeError in Rails 5.2. => 172800 In Rails 5.2 it will raise `TypeError`, e.g: >> 2 * 1.day TypeError: ActiveSupport::Duration can't be coerced into Integer This is the same behavior as with other types in Ruby, e.g: >> 2 * "foo" TypeError: String can't be coerced into Integer >> "foo" * 2 => "foofoo" As part of this deprecation add `*` and `/` methods to `AS::Duration` so that calculations that keep the duration as the receiver work correctly whether the final receiver is a `Date` or `Time`, e.g: >> Date.today => Wed, 01 Mar 2017 >> Date.today + 1.day * 2 => Fri, 03 Mar 2017 Fixes #27457.
* | Update `DateTime#change` to support usec and nsecAndrew White2017-03-021-1/+13
| | | | | | | | | | | | | | | | | | | | | | Adding support for these options now allows us to update the `DateTime#end_of` methods to match the equivalent `Time#end_of` methods, e.g: datetime = DateTime.now.end_of_day datetime.nsec == 999999999 # => true Fixes #21424.
* | Add Duration#before and #after as aliases for #ago and #sinceNick Johnstone2017-02-261-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It's common in test cases at my job to have code like this: let(:today) { customer_start_date + 2.weeks } let(:earlier_date) { today - 5.days } With this change, we can instead write let(:today) { 2.weeks.after(customer_start_date) } let(:earlier_date) { 5.days.before(today) } Closes #27721
* | AS CHANGELOG Pass [ci skip]Vipul A M2017-02-261-3/+3
| |
* | Fix typo `HashWithIndifferentAcces` to `HashWithIndifferentAccess` [ci skip]Ryuta Kamizono2017-02-251-1/+1
| |
* | Merge pull request #28157 from robin850/hwia-soft-deprecationMatthew Draper2017-02-251-0/+5
|\ \ | | | | | | | | | Soft-deprecate the `HashWithIndifferentAccess` constant
| * | Soft-deprecate the top-level HashWithIndifferentAccess classRobin Dupret2017-02-251-0/+6
| |/ | | | | | | | | | | | | Since using a `ActiveSupport::Deprecation::DeprecatedConstantProxy` would prevent people from inheriting this class and extending it from the `ActiveSupport::HashWithIndifferentAccess` one would break the ancestors chain, that's the best option we have here.