aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #29294 from gsamokovarov/attributes-defaultKasper Timm Hansen2017-06-045-51/+33
|\ | | | | Introduce mattr_accessor default option
| * Use mattr_accessor default: option throughout the projectGenadi Samokovarov2017-06-034-27/+14
| |
| * Implement mattr_acessor :default optionGenadi Samokovarov2017-06-031-24/+19
| |
* | Don't create extra assignment, just returnVipul A M2017-06-041-3/+3
|/
* Add next occur and previous occurred day of week API (#26600)Shota Iguchi2017-05-301-0/+16
|
* Add missing "not" in the doc for `assert_no_changes` [ci skip]Ryuta Kamizono2017-05-301-1/+1
|
* Add option for class_attribute default (#29270)David Heinemeier Hansson2017-05-294-11/+15
| | | | | | | | | | | | * 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 #26628 from mjhoy/fix-number-to-human-25742Eileen M. Uchitelle2017-05-294-30/+73
|\ | | | | round before calculating exponent in number_to_human_converter
| * number_to_human_converter: round before calculating exponentMichael Hoy2017-03-161-4/+2
| | | | | | | | fixes #25664
| * number_to_rounded_converter: extract rounding logicMichael Hoy2017-03-163-26/+71
| |
* | Merge pull request #29074 from ↵Kasper Timm Hansen2017-05-281-4/+0
|\ \ | | | | | | | | | | | | kamipo/remove_returning_true_in_internal_callbacks Remove returning true in internal callbacks
| * | Remove returning true in internal callbacksRyuta Kamizono2017-05-141-4/+0
| | | | | | | | | | | | | | | `display_deprecation_warning_for_false_terminator` was removed since 3a25cdc.
* | | Merge pull request #29097 from ↵Matthew Draper2017-05-281-6/+9
|\ \ \ | | | | | | | | | | | | | | | | | | | | EilisHamilton/fix_uncountable_pluralization_locale Fix pluralization of uncountables when given a locale
| * | | Fix pluralization of uncountables when given a localeEilis Hamilton2017-05-191-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | Clear all current instances before a reload.Kasper Timm Hansen2017-05-282-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If users added an attribute or otherwise changed a CurrentAttributes subclass they'd see exceptions on the next page load. Because `ActiveSupport::CurrentAttributes.current_instances` would keep references to the old instances from the previous request. We can fix this by clearing out the `current_attributes` before we unload constants. Then any change to the model can be autoloaded again since its slot isn't taken by an old instance. We'll still have to call reset before we clear so external collaborators, like Time.zone, won't linger with their current value throughout other code.
* | | | Remove double Thread.current storage.Kasper Timm Hansen2017-05-281-5/+3
| | | | | | | | | | | | | | | | | | | | Since we're generating a key through the class name we can combine the two Thread.current calls into a single hash version.
* | | | Use non-raising finder.Kasper Timm Hansen2017-05-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | `find` raises when it can't find a record, so we'll never reach the else. Switch to `find_by` which returns nil when no record can be found.
* | | | [ci skip] Fix spelling that's a bit of an overreach.Kasper Timm Hansen2017-05-271-1/+1
| | | |
* | | | ActiveSupport::CurrentAttributes provides a thread-isolated attributes ↵David Heinemeier Hansson2017-05-263-0/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | | | Merge pull request #29176 from bogdanvlviv/define-path-with__dir__Matthew Draper2017-05-264-4/+4
|\ \ \ \ | | | | | | | | | | Define path with __dir__
| * | | | Define path with __dir__bogdanvlviv2017-05-234-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ".. with __dir__ we can restore order in the Universe." - by @fxn Related to 5b8738c2df003a96f0e490c43559747618d10f5f
* | | | | Fix a RuboCop offences using `rubocop -a`Koichi ITO2017-05-241-2/+0
|/ / / /
* | | | Merge pull request #29163 from rails/fix-scalar-duration-calculationAndrew White2017-05-211-6/+35
|\ \ \ \ | | | | | | | | | | Fix implicit calculations with scalars and durations
| * | | | Fix implicit calculations with scalars and durationsAndrew White2017-05-201-6/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | | Remove unused mismatch payload attributeDavid Heinemeier Hansson2017-05-201-5/+1
|/ / / /
* / / / Add cache_key_with_version and use it in ActiveSupport::Cache.expand_cache_keyDavid Heinemeier Hansson2017-05-191-4/+5
|/ / / | | | | | | | | | | | | | | | This retains the existing behavior of ActiveSupport::Cache.expand_cache_key (as used by etaging) where the cache key includes the version.
* | | Use recyclable cache keys (#29092)David Heinemeier Hansson2017-05-182-18/+68
| | |
* | | Merge pull request #29086 from mikeycgto/message-encryptor-auth-tag-checkKasper Timm Hansen2017-05-151-1/+1
|\ \ \ | | | | | | | | | | | | | | | | Message encryptor auth tag check Fixes MessageEncryptor when used in AEAD mode. Specifically, we need to check if the `auth_tag` is nil. This may arise when an AEAD encryptor is used to decrypt a ciphertext generated from a different mode, such as CBC-HMAC. Basically, the number of double dashes will differ and `auth_tag` may be nil in this case.
| * | | Fix for AEAD auth_tag check in MessageEncryptorMichael Coyne2017-05-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When MessageEncryptor tries to +decrypt_and_verify+ ciphertexts generated in a different mode (such CBC-HMAC), the +auth_tag+ may be +nil+ and must explicitly check for it. See the discussion here: https://github.com/rails/rails/pull/28132#discussion_r116388462
* | | | Don't cache locally if unless_exist was passedEugene Kenny2017-05-141-1/+6
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | Some cache backends support the `unless_exist` option, which tells them not to overwrite an existing entry. The local cache currently always stores the new value, even though the backend may have rejected it. Since we can't tell which value will end up in the backend cache, we should delete the key from the local cache, so that the next read for that key will go to the backend and pick up the correct value.
* | | handle loops in the cause chain in Rescuable#rescue_with_handlerPeter McCracken2017-05-101-2/+8
| | |
* | | Assorted delegate_missing_to doc fixesT.J. Schuck2017-05-041-22/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Fix rdoc code formatting — `tt`, not backticks * Fix/simplify sentence grammar — should at least just be “and the like”, not “likes”, but this is just general tightening up. * Add note that delegated methods must be public. Tested here: https://github.com/rails/rails/blob/7ff5ccae94ce2aff76b5f8a31a28e305a047d642/activesupport/test/core_ext/module_test.rb#L359-L365 * Simplify example code for delegate_missing_to. The example had complexity that wasn’t necessary for demonstrating `delegate_missing_to`. This gets rid of a bunch of cruft so the example is more obvious about what’s going on regarding the feature itself. [ci skip]
* | | Use `flat_map` rather than `map(&:...).flatten`Ryuta Kamizono2017-04-291-2/+2
| | |
* | | Add missing require for `remove_possible_method`Eugene Kenny2017-04-281-0/+1
| | | | | | | | | | | | | | | | | | https://github.com/rails/rails/commit/505537082849d912e8e29819655b80a573e93c0c added a call to `remove_possible_method`, but didn't require the file that defines it.
* | | `respond_to_missing?` should be privateRyuta Kamizono2017-04-221-5/+5
| | | | | | | | | | | | | | | | | | | | | Follow up of 03d3f036. Some of `respond_to?` were replaced to `respond_to_missing?` in 03d3f036. But the visibility is still public. It should be private.
* | | Add commaJon Moss2017-04-201-1/+1
| | | | | | | | | | | | [ci skip]
* | | Merge pull request #28582 from sbull/activejob-error-loggingRafael França2017-04-201-0/+2
|\ \ \ | | | | | | | | Add error logging to Active Job
| * | | Add error logging to Active JobSteven Bull2017-03-271-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Active Job logging instrumentation is changed to log errors (with backtrace) when a job raises an exception in #perform. This improves debugging during development and test with the default configuration. Prior to Rails 5, the default development configuration ran jobs with InlineAdapter, which would raise exceptions to the caller and be shown in the development log. In Rails 5, the default adapter was changed to AsyncAdapter, which would silently swallow exceptions and log a "Performed SomeJob from Async..." info message. This could be confusing to a developer, as it would seem that the job was performed successfully. This patch removes the "Performed..." info message from the log and adds an error-level "Error performing SomeJob..." log message which includes the exception backtrace for jobs that raise an exception within the #perform method. It provides this behavior for all adapters.
* | | | Fixes Hash.from_xml with frozen strings for all backendsJosh Nussbaum2017-04-204-13/+4
| | | |
* | | | Remove outdated commentMarion Bouguet2017-04-201-1/+0
| | | | | | | | | | | | Since 3aee9126aa6309538ee64064dcabcd34d7cc7d26, this class hasn't inherited from Array.
* | | | Send deprecation horizon and gem name as arguments to deprecation heavier ↵Willem van Bergen2017-04-193-10/+23
| | | | | | | | | | | | | | | | handler, and make sure they are used for the ActiveSupport::Notifications message.
* | | | Merge pull request #28790 from tjschuck/require_as_time_in_testing_time_helpersRafael França2017-04-181-0/+1
|\ \ \ \ | | | | | | | | | | Explicitly require AS::Time in AS::Testing::TimeHelpers
| * | | | Explicitly require AS::Time in AS::Testing::TimeHelpersT.J. Schuck2017-04-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you just try to use `ActiveSupport::Testing::TimeHelpers` standalone by requiring `active_support/testing/time_helpers`, you currently get an error: `NoMethodError: undefined method `change' for 2017-12-14 01:04:44 -0500:Time` 9f6e82ee4783e491c20f5244a613fdeb4024beb5 added a dependency on `AS::Time` by using `AS::Time#change`. Here's a script to reproduce the error: ```ruby require "bundler/inline" gemfile(true) do source "https://rubygems.org" gem "activesupport", github: "rails/rails" end require "active_support/testing/time_helpers" require "minitest/autorun" class BugTest < Minitest::Test include ActiveSupport::Testing::TimeHelpers def test_stuff travel_to Time.new(2017, 12, 14, 01, 04, 44) do assert true end end end ``` It currently fails for all 5.x.x versions and master. Ideally, this would be backported to `5-0-stable` and `5-1-stable` as well.
* | | | | Fix Enumerable#sum redefined warningFumiaki MATSUSHIMA2017-04-181-23/+45
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we require 'active_support/core_ext/enumerable' on Ruby 2.4, we'll see following warning because `Enumerable#sum` and `Array#sum` are added in Ruby 2.4. ``` rails/rails/activesupport/lib/active_support/core_ext/enumerable.rb:20: warning: method redefined; discarding old sum ``` The minimal way to fix the warning is `alias sum sum`. ``` $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] $ ruby -w -e "def a; end; def a; end" -e:1: warning: method redefined; discarding old a -e:1: warning: previous definition of a was here $ ruby -w -e "def a; end; alias a a; def a; end" ``` But this behavior is not intended. (@amatsuda was told by @ko1) So we should use `alias` as a meaningful way. Ruby 2.4's `sum` (`orig_sum`) assumes an `identity` is `0` when we omit `identity` so we can delegate to `orig_sum` with explicit `identity` only. In a strict sense, we can detect `identity` by check instance's class but we don't care at this time about that because calling `Enumerable#sum` is rare. In many cases, we will call `Array#sum`.
* | | | Add missing periodsJon Moss2017-04-171-2/+2
| | | | | | | | | | | | | | | | [ci skip]
* | | | Add (more) documentation to to_timeKen Mayer2017-04-171-0/+3
| | | | | | | | | | | | | | | | | | | | There's a difference in the results between `Date#to_time(:local)` and `Date#in_time_zone` but it is subtle and can confuse users (like me :-).
* | | | There are actually only 134 unique timezones.Chris Dosé2017-04-161-1/+1
| | | |
* | | | Add Puerto Rico support to ActiveSupport::TimeZoneChris Dosé2017-04-161-0/+1
| | | |
* | | | Merge pull request #28638 from bogdanvlviv/prepend_and_append_in_rubyKasper Timm Hansen2017-04-151-2/+2
|\ \ \ \ | | | | | | | | | | Prevent aliases Array#append and Array#prepend
| * | | | Prevent aliases Array#append and Array#prependbogdanvlviv2017-04-021-2/+2
| | | | | | | | | | | | | | | | | | | | https://github.com/ruby/ruby/commit/f57d515d69b7a35477b9ba5d08fe117df1f1e275