aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
Commit message (Collapse)AuthorAgeFilesLines
* Tighten the backtrace pollution from passing through callbacksMatthew Draper2016-09-302-135/+274
| | | | | | | | | | 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
| |
* | Revise setting of run_with_rails_extension.Kasper Timm Hansen2016-09-251-7/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Rails test runner supports three ways to run tests: directly, via rake, or ruby. When Running with Ruby ala `ruby -Itest test/models/post_test.rb` our test file would be evaluated first, requiring `test_helper` and then `active_support/testing/autorun` that would then require the test file (which it hadn't been before) thus reevaluating it. This caused exceptions if using Active Support's declarative syntax. Fix this by shifting around when we set the how we're run to closer mimick the require order. If we're running with `bin/rails test` the test command file is run first and we then set `run_with_rails_extension`, later we hit `active_support/testing/autorun` and do nothing — because we've been run elsewhere. If we at this point haven't set `run_with_rails_extension` we've been running with `ruby` this whole time and thus we set that. We should always trigger `Minitest.autorun` as it doesn't hurt to call it twice. Consolidate the two methods into a single one that better brings out the intent of why they're there.
* | Fix ActiveSupport::TimeWithZone#inThomas Balthazar2016-09-243-1/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously calls to `in` were being sent to the non-DST aware method `Time#since` via `method_missing`. It is now aliased to the DST aware `ActiveSupport::TimeWithZone#+` which handles transitions across DST boundaries, e.g: Time.zone = "US/Eastern" t = Time.zone.local(2016,11,6,1) # => Sun, 06 Nov 2016 01:00:00 EDT -05:00 t.in(1.hour) # => Sun, 06 Nov 2016 01:00:00 EST -05:00
* | Merge pull request #26563 from knugie/fix_issue_26430Aaron Patterson2016-09-231-0/+1
|\ \ | | | | | | Prevent circular require of proxy_wrappers.rb, Fixes #26430
| * | Prevent circular require of proxy_wrappers.rb, Fixes #26430Wolfgang Teuber2016-09-211-0/+1
| | |
* | | Merge pull request #26594 from y-yagi/fix_formatting_of_define_callbacksVipul A M2016-09-231-4/+4
|\ \ \ | | | | | | | | fix formatting of `define_callbacks` doc [ci skip]
| * | | fix formatting of `define_callbacks` doc [ci skip]yuuji.yaginuma2016-09-231-4/+4
| |/ / | | | | | | | | | Single backticks don't work with rdoc.
* | | Merge pull request #26524 from y-yagi/add_check_of_argumentRichard Schneeman2016-09-222-0/+11
|\ \ \ | |/ / |/| | add check of argument
| * | add check of argumentyuuji.yaginuma2016-09-172-0/+11
| | | | | | | | | | | | | | | | | | | | | `#fetch_multi` in case did not cache hit, to write a cache using the block value. https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache.rb#L383..L384 Therefore, block is a need to pass always, I think should check first.
* | | [ci skip] Fixed commas according to Oxford comma in rdoc and guidesAndrey Molchanov2016-09-171-1/+1
| | |
* | | fix formatting of `Cache::Store#fetch` [ci skip]yuuji.yaginuma2016-09-171-3/+3
|/ / | | | | | | Single backticks don't work with rdoc.
* | improve error message when include assertions failMichael Grosser2016-09-1612-114/+114
| | | | | | | | | | | | assert [1, 3].includes?(2) fails with unhelpful "Asserting failed" message assert_includes [1, 3], 2 fails with "Expected [1, 3] to include 2" which makes it easier to debug and more obvious what went wrong
* | Fix broken comments indentation caused by rubocop auto-correct [ci skip]Ryuta Kamizono2016-09-149-84/+84
| | | | | | | | | | | | All indentation was normalized by rubocop auto-correct at 80e66cc4d90bf8c15d1a5f6e3152e90147f00772. But comments was still kept absolute position. This commit aligns comments with method definitions for consistency.
* | Remove the word "mongrel" from documentsRyunosuke Sato2016-09-072-4/+4
| | | | | | | | | | | | | | | | | | Currently mongrel is not maintained. And it couldn't be built with any Ruby versions that supported by Rails. It is reasonable to remove the word "mongrel" in order to avoid confusion from newcomer.
* | Fix Remaining Case-In-Assignment Statement FormattingAlex Kitchens2016-09-061-8/+9
|/ | | | | | | | | Recently, the Rails team made an effort to keep the source code consistent, using Ruboco (bb1ecdcc677bf6e68e0252505509c089619b5b90 and below). Some of the case statements were missed. This changes the case statements' formatting and is consistent with changes in 810dff7c9fa9b2a38eb1560ce0378d760529ee6b and db63406cb007ab3756d2a96d2e0b5d4e777f8231.
* change `Class#descendants` to public API [ci skip]yuuji.yaginuma2016-09-051-2/+15
| | | | | | `Class#descendants` has already been displayed in Rails guide, so I think that may be displayed in doc. http://guides.rubyonrails.org/active_support_core_extensions.html#descendants
* Merge pull request #26375 from kamipo/remove_blank_else_branchGuillermo Iguaran2016-09-031-3/+0
|\ | | | | Remove blank else branch
| * Remove blank else branchRyuta Kamizono2016-09-031-3/+0
| |
* | Fix broken heredoc indentation caused by rubocop auto-correctRyuta Kamizono2016-09-031-10/+10
|/ | | | | | All indentation was normalized by rubocop auto-correct at 80e66cc4d90bf8c15d1a5f6e3152e90147f00772. But heredocs was still kept absolute position. This commit aligns heredocs indentation for consistency.
* RuboCop is 100% green :tada:Xavier Noria2016-09-021-1/+5
|
* fixes remaining RuboCop issues [Vipul A M, Xavier Noria]Xavier Noria2016-09-017-18/+18
|
* Cache to_datetime for performanceAndrew White2016-09-011-1/+1
| | | | | | | As demonstrated in #25880 the to_time method converts the utc time instance to a local time instance which is an expensive operation. Since to_datetime involves similar expensive operations we should also cache it to speed up comparison with lots of values.
* Start passing cipher from EncryptedCookieJar since we use it to determine ↵Vipul A M2016-09-012-2/+9
| | | | key length
* Follow up of #25602Vipul A M2016-09-011-0/+10
| | | | | | | | | Since keys are truncated, ruby 2.4 doesn't accept keys greater than their lenghts. keys of same value but different lenght and greater than key size of cipher, produce the same results as reproduced at https://gist.github.com/rhenium/b81355fe816dcfae459cc5eadfc4f6f9 Since our default cipher is 'aes-256-cbc', key length for which is 32 bytes, limit the length of key being passed to Encryptor to 32 bytes. This continues to support backwards compat with any existing signed data, already encrupted and signed with 32+ byte keys. Also fixes the passing of this value in multiple tests.
* use `message` that specified in argument to error messageyuuji.yaginuma2016-08-312-1/+10
|
* Merge pull request #25880 from ↵Andrew White2016-08-301-1/+1
|\ | | | | | | | | ryandv/fix_performance_regression_in_timewithzone_to_time Fix performance regression in `TimeWithZone#to_time`
| * Memoize coerced TimeWithZone value in TimeWithZone#localtime.Ryan De Villa2016-08-231-7/+1
| |
| * Fix performance regression in `TimeWithZone#to_time`Ryan De Villa2016-08-231-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A performance regression was introduced by commit b79adc4323ff289aed3f5787fdfbb9542aa4f89f from Rails 4.0.0.beta1, in which `TimeWithZone#to_time` no longer returns a cached instance attribute but instead coerces the value to `Time`. This coerced value is not cached, and recomputation degrades the performance of comparisons between TimeWithZone objects. See https://github.com/rails/rails/commit/b79adc4323ff289aed3f5787fdfbb9542aa4f89f#diff-3497a506c921a3a3e40fd517e92e4fe3R322 for the change in question. The following benchmark, which reverts the change linked above, demonstrates the performance regression: require 'active_support/time' require 'benchmark/ips' utc = Time.utc(2000, 1, 1, 0) time_zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] twz = ActiveSupport::TimeWithZone.new(utc, time_zone) twz2 = ActiveSupport::TimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) patchedTimeWithZone = Class.new(ActiveSupport::TimeWithZone) do def to_time utc end end patched_twz = patchedTimeWithZone.new(utc, time_zone) patched_twz2 = patchedTimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) Benchmark.ips do |x| x.report("comparison out of the box") { twz <=> twz2 } x.report("comparison reverting to_time") { patched_twz <=> patched_twz2 } x.compare! end The results, when run in rails-dev-box, are as follows: Warming up -------------------------------------- comparison out of the box 24.765k i/100ms comparison reverting to_time 57.237k i/100ms Calculating ------------------------------------- comparison out of the box 517.245k (± 4.7%) i/s - 2.600M in 5.038700s comparison reverting to_time 2.624M (± 5.0%) i/s - 13.050M in 4.985808s Comparison: comparison reverting to_time: 2624266.1 i/s comparison out of the box: 517244.6 i/s - 5.07x slower The change made to run the benchmark, however, is not possible, as it would undo the intent to standardize the return value of `to_time` to `Time` in the system timezone. Our proposed solution is to restore the caching behaviour of `to_time` as it existed prior to the change linked above. Benchmark of our solution: require 'active_support/time' require 'benchmark/ips' patchedTimeWithZone = Class.new(ActiveSupport::TimeWithZone) do def to_time @to_time ||= super end end utc = Time.utc(2000, 1, 1, 0) time_zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] twz = ActiveSupport::TimeWithZone.new(utc, time_zone) twz2 = ActiveSupport::TimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) patched_twz = patchedTimeWithZone.new(utc, time_zone) patched_twz2 = patchedTimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) Benchmark.ips do |x| x.report("TimeWithZone comparison - existing implementation") { twz <=> twz2 } x.report("TimeWithZone comparison - caching implementation") { patched_twz <=> patched_twz2 } x.compare! end Results in rails-dev-box: Warming up -------------------------------------- TimeWithZone comparison - existing implementation 26.629k i/100ms TimeWithZone comparison - caching implementation 59.144k i/100ms Calculating ------------------------------------- TimeWithZone comparison - existing implementation 489.757k (± 4.2%) i/s - 2.450M in 5.011639s TimeWithZone comparison - caching implementation 2.802M (± 5.3%) i/s - 13.958M in 4.996116s Comparison: TimeWithZone comparison - caching implementation: 2801519.1 i/s TimeWithZone comparison - existing implementation: 489756.7 i/s - 5.72x slower
* | use `inspect` for show `from` valueyuuji.yaginuma2016-08-292-1/+10
| | | | | | | | If `from` is nil, in order to avoid the blank is showed.
* | Fix typo in Delegation#delegate_missing_to doc [skip ci]Anton Davydov2016-08-271-1/+1
| |
* | Move custom assertion to its proper placeSantosh Wadghule2016-08-272-11/+11
|/ | | | | | | | ActiveSupport::Testing::Assertions. We have a separate module in which have defined Rails' own custom assertions. So it would be good to keep all custom Rails' assertions in one place i.e. in this module.
* Merge pull request #25628 from ysksn/optionsRafael Mendonça França2016-08-174-5/+11
|\ | | | | | | Remove parameter "options = nil" for #clear
| * Update CHANGELOG.md for #25628 [ci skip]Yosuke Kabuto2016-07-024-5/+11
| | | | | | | | | | | | Move new CHANGELOG entry top [ci skip] Remove parameter "options = nil" for #clear
* | Merge pull request #25863 from mechanicles/remove-duplicate-testRafael França2016-08-161-5/+0
|\ \ | | | | | | Remove duplicate test.
| * | Remove duplicate test.Santosh Wadghule2016-07-171-5/+0
| | | | | | | | | | | | | | | We already test similar stuff in `test_really_long_keys` so removing this extra and duplicated test.
* | | Add three new rubocop rulesRafael Mendonça França2016-08-1664-301/+301
| | | | | | | | | | | | | | | | | | | | | | | | Style/SpaceBeforeBlockBraces Style/SpaceInsideBlockBraces Style/SpaceInsideHashLiteralBraces Fix all violations in the repository.
* | | Merge pull request #25570 from y-yagi/remove_useless_parameterEileen M. Uchitelle2016-08-151-3/+3
|\ \ \ | | | | | | | | remove useless parameter
| * | | remove useless parameteryuuji.yaginuma2016-06-291-4/+4
| | | |
* | | | Add documentation about `ActiveSupport.on_load`mrageh2016-08-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] This commit adds some docs that explain how `LazyLoadHooks.on_load` method works.
* | | | Merge pull request #26100 from vipulnsward/changelogsRafael França2016-08-121-3/+3
|\ \ \ \ | | | | | | | | | | Pass over changelogs
| * | | | Pass over changelogs [ci skip]Vipul A M2016-08-101-3/+3
| | | | |
* | | | | prefer __dir__ over __FILE__ in File.expand_pathXavier Noria2016-08-111-1/+3
|/ / / / | | | | | | | | | | | | | | | | | | | | Thinking .. relative to files is not natural, we are used to think "parent of a directory", and we have __dir__ nowadays.
* | | | let instance thread_mattr_* methods delegate to the class-level onesXavier Noria2016-08-081-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This code has too much duplication and the rationale for the concatenation may not be obvious to the reader. You define the ones at class-level, explain why does the code concatenates there, and then the convenience ones at instance-level just delegate.