aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
Commit message (Collapse)AuthorAgeFilesLines
...
| * | Format and send logs to logger.fatal from DebugExceptions instead of calling ↵Vipul A M2016-11-121-6/+5
| | | | | | | | | | | | | | | | | | fatal multiple times. Expose tags_text from TaggedLogging to be used for log formatting Fixes #26134
* | | Merge pull request #26933 from prathamesh-sonpatki/fix-26877Andrew White2016-11-131-1/+1
|\ \ \ | | | | | | | | Fix an issue with JSON encoding of "Infinity" and "NaN" values
| * | | Fix an issue with JSON encoding of "Infinity" and "NaN" valuesPrathamesh Sonpatki2016-10-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - When `as_json` returns `Infinity` or `NaN` as the value of any of the key, we don't used to call `as_json` on it as it was treated as primitive. - This used to pass `Infinity` or `NaN` to `JSON.generate` and Ruby used to throw an error for `Infinity/NaN not allowed in JSON.` - This patch changes the code to call `as_json` on these primitives so that they are converted to proper values before being passed to `JSON.generate`. - Fixes #26877.
* | | | Merge pull request #26905 from bogdanvlviv/docsAndrew White2016-11-139-12/+13
|\ \ \ \ | |_|/ / |/| | | Add missing `+` around a some literals.
| * | | Add missing `+` around a some literals.bogdanvlviv2016-10-279-12/+13
| | | | | | | | | | | | | | | | | | | | | | | | Mainly around `nil` [ci skip]
* | | | Less method invocationAkira Matsuda2016-11-051-1/+1
| | | |
* | | | Merge pull request #26536 from ↵Arthur Nogueira Neves2016-11-041-2/+2
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | y-yagi/change_increment_and_decrement_to_public_api change `MemCacheStore#increment` and `MemCacheStore#decrement` to public API [ci skip]
| * | | | change `MemCacheStore#increment` and `MemCacheStore#decrement` to public API ↵yuuji.yaginuma2016-09-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] I'm not sure why these methods not public. But these methods are public in other cache stores, I think that may be in public. Ref: http://edgeapi.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-increment http://edgeapi.rubyonrails.org/classes/ActiveSupport/Cache/FileStore.html#method-i-increment http://edgeapi.rubyonrails.org/classes/ActiveSupport/Cache/MemoryStore.html#method-i-increment http://edgeapi.rubyonrails.org/classes/ActiveSupport/Cache/NullStore.html#method-i-increment
* | | | | Ensure duration parsing is consistent across DST changesAndrew White2016-10-311-2/+3
| |_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously `ActiveSupport::Duration.parse` used `Time.current` and `Time#advance` to calculate the number of seconds in the duration from an arbitrary collection of parts. However as `advance` tries to be consistent across DST boundaries this meant that either the duration was shorter or longer depending on the time of year. This was fixed by using an absolute reference point in UTC which isn't subject to DST transitions. An arbitrary date of Jan 1st, 2000 was chosen for no other reason that it seemed appropriate. Additionally, duration parsing should now be marginally faster as we are no longer creating instances of `ActiveSupport::TimeWithZone` every time we parse a duration string. Fixes #26941.
* | | | Add more rubocop rules about whitespacesRafael Mendonça França2016-10-2940-68/+68
| | | |
* | | | let Regexp#match? be globally availableXavier Noria2016-10-271-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | Regexp#match? should be considered to be part of the Ruby core library. We are emulating it for < 2.4, but not having to require the extension is part of the illusion of the emulation.
* | | | Ensure `#transform_values` of HWIDA to return HWIDAyui-knk2016-10-261-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On Ruby 2.4, naitive `Hash#transform_values` is implemented. `Hash#transform_values` uses an instance of Hash (`rb_hash_new`) to collect returned values of a block. For ensuring `#transform_values` of HWIDA to return HWIDA, we should define `#transform_values` on HWIDA.
* | | | WhitespaceRafael Mendonça França2016-10-251-0/+1
| |/ / |/| |
* | | Merge pull request #26868 from prathamesh-sonpatki/use-hash-compact-from-ruby-24Rafael França2016-10-241-18/+22
|\ \ \ | |_|/ |/| | Use Hash#compact and Hash#compact! from Ruby 2.4
| * | Use Hash#compact and Hash#compact! from Ruby 2.4Prathamesh Sonpatki2016-10-231-18/+22
| | | | | | | | | | | | | | | | | | - Ruby 2.4 has added Hash#compact and Hash#compact! so we can use it now. - Reference: https://bugs.ruby-lang.org/issues/11818 and https://bugs.ruby-lang.org/issues/12863.
* | | Revert #26826 and add documentationclaudiob2016-10-211-1/+6
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit a01cf703 as explained in the comment to #26826: Realized that this PR caused the following warning in Travis CI: ``` /home/travis/build/rails/rails/activesupport/lib/active_support/dependencies.rb:293: warning: loading in progress, circular require considered harmful - /home/travis/build/rails/rails/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb ``` Indeed, `active_support/core_ext/hash/indifferent_access.rb` **needs** to require `active_support/hash_with_indifferent_access.rb` in order to access the class `ActiveSupport::HashWithIndifferentAccess`. The other way around, though, is not _strictly_ required, unless someone tries (like I did in the [gist above](https://gist.github.com/claudiob/43cc7fe77ff95951538af2825a71e5ec)) to use `ActiveSupport::HashWithIndifferentAccess` by only requiring `active_support/hash_with_indifferent_access.rb` without first requiring `active_support/core_ext/hash/indifferent_access.rb`. I think the solution to this is to revert this PR and instead change the documentation to explicitly state that **developers should not require 'active_support/hash_with_indifferent_access'** if all they want is to use `ActiveSupport::HashWithIndifferentAccess` – instead they should require `active_support/core_ext/hash/indifferent_access.rb`.
* | Merge pull request #26843 from denisovlev/strptime_timestampsRafael França2016-10-221-11/+15
|\ \ | | | | | | Fix `ActiveSupport::TimeZone#strptime` cannot parse timestamps (%Q, %s)
| * | Fix `ActiveSupport::TimeZone#strptime` cannot parse timestamps (%Q, %s)denisovlev2016-10-211-11/+15
| | |
* | | Merge pull request #26826 from claudiob/add-requireClaudio B2016-10-211-0/+1
|\ \ \ | | | | | | | | Add missing require in active_support/hash_with_indifferent_access.rb
| * | | Add missing requireclaudiob2016-10-191-0/+1
| | | |
* | | | Use `on_load` to trigger commandline processing codeAaron Patterson2016-10-211-0/+2
| | | | | | | | | | | | | | | | We need to use on_load so that plugins will get the same functionality
* | | | Additional fix for argument-splat ordering differences.Charles Oliver Nutter2016-10-211-2/+2
| | | | | | | | | | | | | | | | See #26854
* | | | Explicitly unpack the expanded args to avoid execution order diff.Charles Oliver Nutter2016-10-211-4/+4
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In https://bugs.ruby-lang.org/issues/12860 I argue that MRI's execution order here is incorrect. The splatting of the 'c' args should happen before the shift, but it happens after. On JRuby, it behaves the way you would expect, leading to the 'c' args splat still containing the block and producing an error like "cannot convert proc to symbol" when the send attempts to coerce it. This patch makes the unpacking order explicit with a multi-assign, which behaves properly on all implementations I tested.
* | | Merge pull request #26839 from renuo/fix-missing-nsec-transferAndrew White2016-10-211-1/+1
|\ \ \ | | | | | | | | Fix copy_time_to: Copy nsec instead of usec
| * | | Fix copy_time_to: Copy nsec instead of usecJosua Schmid2016-10-201-1/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `copy_time_to` is a helper function for date and time calculations. It's being used by `prev_week`, `next_week` and `prev_weekday` to keep the time fraction when jumping around between days. Previously the nanoseconds part was lost during the operation. This lead to problems in practice if you were using the `end_of_day` calculation. Resulting in the time fraction of `end_of_day` not being the same as next week's `end_of_day`. With this fix `copy_time_to` doesn't forget the `nsec` digits.
* / / doc, hide non-public methods form the api docs. [ci skip]Yves Senn2016-10-201-2/+2
|/ / | | | | | | | | | | | | | | | | This is a follow up to #25681, specifically this comment: https://github.com/rails/rails/pull/25681#issuecomment-238294002 The way the thread local variable is stored is an implementation detail and subject to change. It makes no sense to only generate a reader or writer as you'd have to know where to read from or where it writes to.
* | Add comment to remove code when we are in Ruby 2.4Rafael Mendonça França2016-10-141-0/+1
| |
* | Use built-in #transform_values when available.Jesús Burgos2016-10-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | The methods Hash#transform_values and Hash#transform_values! have been implemented in Ruby and they'll be available as part of the standard library. Here's the link to the discussion in Ruby's issue tracker: https://bugs.ruby-lang.org/issues/12512 These methods are implemented in C so they're expected to perform better.
* | Merge pull request #26531 from y-yagi/remove_unused_benchmarkRafael França2016-10-101-2/+0
|\ \ | | | | | | remove unused require `benchmark`
| * | remove unused require `benchmark`yuuji.yaginuma2016-09-171-2/+0
| |/ | | | | | | `Benchmark` was removed at 4215e9a
* | Fixnum and Bignum are deprecated in Ruby trunkMatthew Draper2016-10-082-3/+3
| | | | | | | | https://bugs.ruby-lang.org/issues/12739
* | Merge pull request #26359 from maclover7/jm-speed-up-timeMatthew Draper2016-10-061-0/+2
|\ \ | | | | | | Speed up Time.zone.now
| * | Speed up Time.zone.nowJon Moss2016-10-021-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | @amatsuda, during his RailsConf talk this past year, presented a benchmark that showed `Time.zone.now` (an Active Support joint) performing 24.97x slower than Ruby's `Time.now`. Rails master appears to be a _bit_ faster than that, currently clocking in at 18.25x slower than `Time.now`. Here's the exact benchmark data for that: ``` Warming up -------------------------------------- Time.now 127.923k i/100ms Time.zone.now 10.275k i/100ms Calculating ------------------------------------- Time.now 1.946M (± 5.9%) i/s - 9.722M in 5.010236s Time.zone.now 106.625k (± 4.3%) i/s - 534.300k in 5.020343s Comparison: Time.now: 1946220.1 i/s Time.zone.now: 106625.5 i/s - 18.25x slower ``` What if I told you we could make `Time.zone.now` _even_ faster? Well, that's exactly what this patch accomplishes. When creating `ActiveSupport::TimeWithZone` objects, we try to convert the provided time to be in a UTC format. All this patch does is, in the method where we convert a provided time to UTC, check if the provided time is already UTC, and is a `Time` object and then return early if that is the case, This sidesteps having to continue on, and create a new `Time` object from scratch. Here's the exact benchmark data for my patch: ``` Warming up -------------------------------------- Time.now 124.136k i/100ms Time.zone.now 26.260k i/100ms Calculating ------------------------------------- Time.now 1.894M (± 6.4%) i/s - 9.434M in 5.000153s Time.zone.now 301.654k (± 4.3%) i/s - 1.523M in 5.058328s Comparison: Time.now: 1893958.0 i/s Time.zone.now: 301653.7 i/s - 6.28x slower ``` With this patch, we go from `Time.zone.now` being 18.25x slower than `Time.now` to only being 6.28x slower than `Time.now`. I'd obviously love some verification on this patch, since these numbers sound pretty interesting... :) This is the benchmark-ips report I have been using while working on this: ```ruby require 'benchmark/ips' Time.zone = 'Eastern Time (US & Canada)' Benchmark.ips do |x| x.report('Time.now') { Time.now } x.report('Time.zone.now') { Time.zone.now } x.compare! end ``` cc @amatsuda cc performance folks @tenderlove and @schneems ![Pretty... pretty... pretty good.](https://media.giphy.com/media/bWeR8tA1QV4cM/giphy.gif)
* | | Merge pull request #26684 from matthewd/executor-serialMatthew Draper2016-10-051-12/+21
|\ \ \ | | | | | | | | Avoid bumping the class serial when invoking executor
| * | | Avoid bumping the class serial when invoking executorMatthew Draper2016-10-031-12/+21
| |/ /
* | | Merge pull request #26686 from matthewd/deprecation-callerMatthew Draper2016-10-051-0/+13
|\ \ \ | | | | | | | | Correct caller tracking in delegated deprecation methods
| * | | Correct caller tracking in delegated deprecation methodsMatthew Draper2016-10-031-0/+13
| |/ /
* | | Cache to_time to improve performance when comparingAndrew White2016-10-021-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In #25880 we tried to cache localtime to fix the performance regression but that proved to be difficult due to the fact that localtime/getlocal can take a utc_offset argument. We tried caching based on the argument but since the argument can be nil sometimes that meant that if the TZ environment variable changed then the cached value for nil became invalid. By moving the caching to DateAndTime#compatibility we don't have to worry about arguments since it doesn't take any. There is a possible edge condition where preserve_timezone is set to false and the system timezone changes then it could result in a cached value being incorrect but the only way to fix this would be to remove all caching and live with the performance issue.
* | | Revert "Merge pull request #25880 from ↵Andrew White2016-10-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ryandv/fix_performance_regression_in_timewithzone_to_time" Turns out trying to cache on localtime with arguments is too hard so we'll do it on DateAndTime::Compatibility#to_time instead. This reverts commit 3132fa6b7d9585e04eb44b25b55d298391b040b5, reversing changes made to 6949f8e5e7dc901d4e04ebab6c975afb33ca44c9.
* | | Revert "Merge pull request #26677 from tbalthazar/26644"Andrew White2016-10-021-2/+1
|/ / | | | | | | | | | | | | | | Turns out trying to cache on localtime with arguments is too hard so we'll do it on DateAndTime::Compatibility#to_time instead. This reverts commit 9ce2d1b1a43fc4ef3db59849b7412d30583a4074, reversing changes made to 53ede1aff2025d4391d0e05ba471fdaf3110a99c.
* | Merge pull request #26677 from tbalthazar/26644Andrew White2016-10-011-1/+2
|\ \ | | | | | | Fix `ActiveSupport::TimeWithZone#localtime`
| * | Fix `ActiveSupport::TimeWithZone#localtime`Thomas Balthazar2016-10-011-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously memoization in `localtime` wasn't taking the `utc_offset` parameter into account when returning a cached value. It now caches the computed value depending on the `utc_offset` parameter, e.g: Time.zone = "US/Eastern" t = Time.zone.local(2016,5,2,11) # => Mon, 02 May 2016 11:00:00 EDT -04:00 t.localtime(-7200) # => 2016-05-02 13:00:00 -0200 t.localtime(-3600) # => 2016-05-02 14:00:00 -0100
* | | Tighten the backtrace pollution from passing through callbacksMatthew Draper2016-09-301-134/+202
|/ / | | | | | | | | | | | | | | | | | | Callbacks are everywhere, so it's better if we can avoid making a mess of the backtrace just because we've passed through a callback hook. I'm making no effort to the before/after invocations: those only affect backtraces while they're running. The calls that matter are the ones that remain on the call stack after run_callbacks yields: around callbacks, and internal book-keeping around the before/afters.
* | Merge pull request #26402 from mtsmfm/remove-dead-constantsAkira Matsuda2016-09-291-30/+0
|\ \ | | | | | | Remove dead constants
| * | Remove dead constantsFumiaki MATSUSHIMA2016-09-061-30/+0
| | | | | | | | | | | | It seems that we forgot to remove some codes on https://github.com/rails/rails/commit/7ab47751068c6480e7e44fc9265a7e690dd4af3b
* | | Merge pull request #26654 from Neodelf/activesupport_1Jon Moss2016-09-281-1/+1
|\ \ \ | | | | | | | | [ci skip] Remove not necessary whitespace
| * | | [ci skip] Remove not necessary whitespaceAndrey Molchanov2016-09-281-1/+1
| | | |
* | | | [ci skip] Use class name instead of path to fileAndrey Molchanov2016-09-281-2/+2
|/ / /
* | | fix typo in `DateAndTime::Calculations#all_week` doc [ci skip]yuuji.yaginuma2016-09-271-1/+1
| | | | | | | | | | | | | | | `Date.week_start` does not exist. `Date.beginning_of_week` seems to be correct. Ref: #5339
* | | fffffff, Add code missing in 29f0fbdKasper Timm Hansen2016-09-251-2/+2
| | |