aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #26282 from kamipo/add_type_default_valueSean Griffin2016-08-319-15/+13
|\ | | | | Add `Type.default_value` and use it everywhere for internal
| * Add `Type.default_value` and use it everywhere for internalRyuta Kamizono2016-08-269-15/+13
| | | | | | | | For reduce instantiating `Type::Value`.
* | Ensure that inverse associations are set before running callbacksSean Griffin2016-08-3114-24/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a parent association was accessed in an `after_find` or `after_initialize` callback, it would always end up loading the association, and then immediately overwriting the association we just loaded. If this occurred in a way that the parent's `current_scope` was set to eager load the child, this would result in an infinite loop and eventually overflow the stack. For records that are created with `.new`, we have a mechanism to perform an action before the callbacks are run. I've introduced the same code path for records created with `instantiate`, and updated all code which sets inverse instances on newly loaded associations to use this block instead. Fixes #26320.
* | Merge pull request #26327 from mechanicles/remove-duplicationGuillermo Iguaran2016-08-301-2/+6
|\ \ | | | | | | Refactor remove duplication.
| * | Refactor remove duplication.Santosh Wadghule2016-08-311-2/+6
| | |
* | | Merge pull request #26331 from kjellberg/broken-linksJon Moss2016-08-303-3/+3
|\ \ \ | | | | | | | | [ci skip] Broken links in documentation fix
| * | | [ci skip] Broken links in documentation fixRasmus Kjellberg2016-08-303-3/+3
| | | |
* | | | Merge pull request #23498 from jcoleman/remove-unnecessary-belongs-to-loadMatthew Draper2016-08-313-1/+14
|\ \ \ \ | | | | | | | | | | Don't unnecessarily load a belongs_to when saving.
| * | | | Don't unnecessarily load a belongs_to when saving.James Coleman2016-08-263-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, if the the association was previously loaded and then the foreign key changed by itself, a #save call would trigger a load of the new associated record during autosave. This is unnecessary and the autosave code (in that case) didn't use the loaded record anyways.
* | | | | Merge pull request #26329 from riseshia/patch-1Jon Moss2016-08-301-12/+7
|\ \ \ \ \ | |_|_|/ / |/| | | | Update typo & Make explanation more clear
| * | | | Update typo & Make explanation more clearShia2016-08-311-12/+7
|/ / / /
* | | | 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
* | | | | Merge pull request #26317 from maclover7/jm-fix-26298Aaron Patterson2016-08-293-8/+30
|\ \ \ \ \ | | | | | | | | | | | | Allow `send_file` to declare a charset
| * | | | | Remove default argument, and extract internal convenience methodJon Moss2016-08-291-6/+12
| | | | | |
| * | | | | Add regression testsJon Moss2016-08-291-0/+14
| | | | | |
| * | | | | Allow `send_file` to declare a charsetJon Moss2016-08-292-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removed my patch in favor of @tenderlove's less invasive approach. [Aaron Patterson & Jon Moss]
* | | | | | Merge pull request #26318 from alexcameron89/contributing-doc-updateAndrew White2016-08-291-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | [ci skip] Update branch version in Contributing Guide
| * | | | | | [ci skip] Update branch version in Contributing GuideAlex Kitchens2016-08-291-1/+1
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | Since only Rails 4 and above are currently supported, this updates a 3-2-stable example to be consistent with the support standard.
* / / / / / Fix nested multiple rootsRyo Hashimoto2016-08-293-2/+61
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PR #20940 enabled the use of multiple roots with different constraints at the top level but unfortunately didn't work when those roots were inside a namespace and also broke the use of root inside a namespace after a top level root was defined because the check for the existence of the named route used the global :root name and not the namespaced name. This is fixed by using the name_for_action method to expand the :root name to the full namespaced name. We can pass nil for the second argument as we're not dealing with resource definitions so don't need to handle the cases for edit and new routes. Fixes #26148.
* | | | | Remove unneeded FIXME noteRafael Mendonça França2016-08-291-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | This is the intended behavior. You should not do more than one request in a controller test.
* | | | | Merge pull request #26311 from y-yagi/use_inspect_for_show_valueKasper Timm Hansen2016-08-292-1/+10
|\ \ \ \ \ | | | | | | | | | | | | use `inspect` for show `from` value
| * | | | | use `inspect` for show `from` valueyuuji.yaginuma2016-08-292-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | If `from` is nil, in order to avoid the blank is showed.
* | | | | | Merge pull request #26310 from kjellberg/guidesJon Moss2016-08-281-0/+1
|\ \ \ \ \ \ | |/ / / / / |/| | | / / | | |_|/ / | |/| | | Add .gitignore to "files & purpose" list - getting started docs
| * | | | Added gitignore to "files & purpose" list [ci skip]Rasmus Kjellberg2016-08-291-0/+1
|/ / / /
* | | | Merge pull request #26305 from kamipo/follow-up-to-26301Kasper Timm Hansen2016-08-281-3/+1
|\ \ \ \ | | | | | | | | | | Switch back to `Hash.dup`
| * | | | Switch back to `Hash.dup`Ryuta Kamizono2016-08-281-3/+1
| | | | | | | | | | | | | | | | | | | | Follow up to #26301.
* | | | | Merge pull request #26306 from kamipo/remove_under_ruby-1.9Kasper Timm Hansen2016-08-281-9/+9
|\ \ \ \ \ | |/ / / / |/| | | | Remove "Under Ruby 1.9" [ci skip]
| * | | | Remove "Under Ruby 1.9" [ci skip]Ryuta Kamizono2016-08-281-9/+9
|/ / / / | | | | | | | | | | | | Rails dropped Ruby 1.9 support, but this comment still true.
* | | | validate_each in NumericalityValidator is never called in this case.Guillermo Iguaran2016-08-281-2/+0
| | | | | | | | | | | | | | | | | | | | NumericalityValidator#validate_each is never called when allow_nil is true and the value is nil because it is already skipped in EachValidator#validate.
* | | | Add test for allow_blank in numericality validationNicolai Reuschling2016-08-281-0/+7
| | | | | | | | | | | | | | | | Signed-off-by: Guillermo Iguaran <guilleiguaran@gmail.com>
* | | | Merge pull request #26301 from maclover7/jm-fix-commentGuillermo Iguaran2016-08-271-4/+2
|\ \ \ \ | | | | | | | | | | Switch back to `Hash.dup`
| * | | | Switch back to `Hash.dup`Jon Moss2016-08-271-4/+2
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The performance difference between `Hash[]` and `Hash.dup` looks to have been narrowed by @tenderlove via this commit --> https://github.com/ruby/ruby/commit/b3803cc49ad382e23291d75ce57ffb2b74bb9577#diff-eff9999082c8ce7d8ba1fc1d79f439cf. Since this commit first appeared in Ruby 2.0.0, and since Rails now requires a minimum Ruby version of 2.2.2, this performance boost should be available for all users. Relevant links: - This behavior was originally added via https://github.com/rails/rails/commit/02174a3efc6fa8f2e5e6f114e4cf0d8a06305b6a - The conversation on the Ruby issue tracker lives here --> https://bugs.ruby-lang.org/issues/7166
* | | | Merge pull request #26299 from davydovanton/fix-typoVipul A M2016-08-271-1/+1
|\ \ \ \ | | | | | | | | | | Fix typo in Delegation#delegate_missing_to doc [ci skip]
| * | | | Fix typo in Delegation#delegate_missing_to doc [skip ci]Anton Davydov2016-08-271-1/+1
|/ / / /
* | | | Merge pull request #26297 from ledermann/patch-1Vijay Dev2016-08-271-1/+1
|\ \ \ \ | | | | | | | | | | Errors#add_on_blank: Fix typo in deprecation message
| * | | | Fix typo in deprecation messageGeorg Ledermann2016-08-271-1/+1
|/ / / / | | | | | | | | This fixes a copy-and-paste-issue slipped in by #18996
* | | | Merge pull request #26293 from mechanicles/move-custom-assertionGuillermo Iguaran2016-08-272-11/+11
|\ \ \ \ | | | | | | | | | | Move Rails' custom assertion method `assert_nothing_raised` to its proper place.
| * | | | 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.
* | / / Missing key should throw KeyErroreileencodes2016-08-262-1/+7
| |/ / |/| | | | | | | | | | | | | | It should not throw a NameError, but should throw a KeyError. Fixes #26278
* | | Merge pull request #26288 from maclover7/jm-revert-21995Guillermo Iguaran2016-08-261-7/+11
|\ \ \ | | | | | | | | Update `Rails.configuration` documentation
| * | | Clarify two ways to set Rails configuration optionsJon Moss2016-08-261-5/+8
| | | | | | | | | | | | | | | | [ci skip]
| * | | Add back in `config_for` exampleJon Moss2016-08-261-0/+28
| | | | | | | | | | | | | | | | [ci skip]
| * | | Revert "Merge pull request #21995 from tak1n/master"Jon Moss2016-08-261-35/+8
| | | | | | | | | | | | | | | | | | | | This reverts commit 4973704bf56dbb0d8beba977e1053d57e346ebd0, reversing changes made to 78edeb33346e13ab33a62d2a6b553aabf5b3186a.
* | | | Merge pull request #26287 from mechanicles/rails-assertionJon Moss2016-08-261-1/+1
|\ \ \ \ | |/ / / |/| | | Move `assert_nothing_raised` method to Rails Specific Assertions section [ci skip]
| * | | Move `assert_nothing_raised` method to Rails Specific AssertionsSantosh Wadghule2016-08-261-1/+1
|/ / / | | | | | | | | | | | | | | | | | | | | | section [ci skip] - Method `assert_nothing_raised` is Rails' own custom assertion method and not a part of Minitest. So move it from Minitest assertions section to Rails Specific Assertions section.
* | | Merge pull request #26284 from kamipo/fix_warnigGuillermo Iguaran2016-08-251-1/+1
|\ \ \ | | | | | | | | Fix "warning: assigned but unused variable - task"
| * | | Fix "warning: assigned but unused variable - task"Ryuta Kamizono2016-08-261-1/+1
|/ / /
* | | Fix typo in the hook nameRafael Mendonça França2016-08-251-1/+1
| | |