aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Remove extra `& self.class.column_names` in `keys_for_partial_write`Ryuta Kamizono2018-08-301-6/+6
| | | | | | | It should be done only once in `Persistence` module. https://github.com/rails/rails/blob/c83e30da27eafde79164ecb376e8a28ccc8d841f/activerecord/lib/active_record/persistence.rb#L721 https://github.com/rails/rails/blob/c83e30da27eafde79164ecb376e8a28ccc8d841f/activerecord/lib/active_record/persistence.rb#L740
* Merge pull request #33757 from bogdanvlviv/follow-up-32937Ryuta Kamizono2018-08-303-4/+16
|\ | | | | Follow up #32937 [ci skip]
| * Add info about purpose in cookies to "Upgrading Ruby on Rails" guide [ci skip]bogdanvlviv2018-08-301-0/+11
| | | | | | | | | | | | Context https://github.com/rails/rails/pull/33605#discussion_r210354278 Related to #32937, #33605
| * Add info about `config.action_dispatch.use_cookies_with_metadata` to ↵bogdanvlviv2018-08-301-0/+3
| | | | | | | | | | | | "Configuring Rails Applications" guide [ci skip] Related to #32937, #33605.
| * Fix `actionpack/CHANGELOG.md` [ci skip]bogdanvlviv2018-08-301-4/+2
|/ | | | | | | | | | Remove the reference to the PR. Usually, we write reference to solved issues in the changelog files. Related to #33605. Add missing dots. Improve formatting.
* Add missing requireyuuji.yaginuma2018-08-301-0/+1
| | | | | Without this, `inverse_associations_test.rb` breaks when running in isolation. https://travis-ci.org/rails/rails/jobs/422266840#L1894-L1899
* Merge pull request #33729 from kddeisz/plural-automatic-inverseRafael França2018-08-292-5/+26
|\ | | | | Find inverse associations with plural names
| * Find inverse associations with plural namesKevin Deisz2018-08-272-5/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously ActiveRecord couldn't find inverse associations if they were plural, which is a pretty standard use case. This commit changes the behavior to first attempt to find the singular version, then attempt to find the plural version. That makes it work and find plural associations as in the example below: ``` class Post has_many :comments end class Comment belongs_to :post end ``` Previously the `:post` association reflection would only attempt to find a `comment` inverse, as opposed to both a `comment` and `comments` inverse.
* | Merge pull request #33752 from sgrif/sg-faster-tryRichard Schneeman2018-08-291-8/+7
|\ \ | | | | | | 20% faster `try`
| * | 20% faster `try`Sean Griffin2018-08-291-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Following up on #33747, this takes things a step further by pulling out the method name from the arguments array, letting us skip an allocation in the case where there are no arguments -- notably, this also no longer *requires* the splat to be an array, allowing us to benefit from optimizations in Jruby (and maybe MRI in the future) of skipping the array allocation entirely. Benchmark results: ``` Warming up -------------------------------------- old 179.987k i/100ms new 199.201k i/100ms Calculating ------------------------------------- old 3.029M (± 1.6%) i/s - 15.299M in 5.052417s new 3.657M (± 1.2%) i/s - 18.326M in 5.012648s Comparison: new: 3656620.7 i/s old: 3028848.3 i/s - 1.21x slower ```
* | | Merge pull request #33737 from bogdanvlviv/add-6_0_release_notes-guideRafael França2018-08-293-1/+183
|\ \ \ | |/ / |/| | Add "Ruby on Rails 6.0 Release Notes" guide [ci skip]
| * | Add "Ruby on Rails 6.0 Release Notes" guide [ci skip]bogdanvlviv2018-08-293-1/+183
| | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a skeleton of "Ruby on Rails 6.0 Release Notes". It isn't a good time to add changelogs' entries to this guide since we can redo/revert some things till the final release 6.0. It would be better to do it close to the release. But we already can add mentions about major features that have been added to 6.0. I added mention about "Parallel Testing".
* | | Merge pull request #33744 from bogdanvlviv/fixes-27852Ryuta Kamizono2018-08-304-4/+4
|\ \ \ | | | | | | | | Prevent leaking of user's DB credentials on `rails db:create` failure
| * | | Prevent leaking of user's DB credentials on `rails db:create` failurebogdanvlviv2018-08-294-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Issue #27852 reports that when `rails db:create` fails, it causes leaking of user's DB credentials to $stderr. We print a DB's configuration hash in order to help users more quickly to figure out what could be wrong with his configuration. This commit changes message from "Couldn't create database for #{configuration.inspect}" to "Couldn't create '#{configuration['database']}' database. Please check your configuration.". There are two PRs that fixing it #27878, #27879, but they need a bit more work. I decided help to finish this and added Author of those PRs credit in this commit. Since it is a security issue, I think we should backport it to `5-2-stable`, and `5-1-stable`. Guided by https://edgeguides.rubyonrails.org/maintenance_policy.html#security-issues Fixes #27852 Closes #27879 Related to #27878 [Alexander Marrs & bogdanvlviv]
* | | | Merge pull request #33749 from schneems/schneems/faster-fragmentRichard Schneeman2018-08-291-1/+5
|\ \ \ \ | | | | | | | | | | Fewer allocations in caching/fragments.rb
| * | | | Fewer allocations in caching/fragments.rbschneems2018-08-291-1/+5
| |/ / / | | | | | | | | | | | | Instead of using a splat on the head and tail we can mutate the array by flattening 1 level. We get further savings by not allocating another via `compact` but instead by using `compact!`
* | | | Merge pull request #33750 from schneems/schneems/time_valueRichard Schneeman2018-08-291-1/+7
|\ \ \ \ | | | | | | | | | | Faster time_value.rb
| * | | | Faster time_value.rbschneems2018-08-291-1/+7
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The multiplication of the value takes a long time when we can instead mutate and use the string value directly. The `microsec` perf increases speed by 27% in the ideal case (which is the most common). ``` original_string = ".443959" require 'benchmark/ips' Benchmark.ips do |x| x.report("multiply") { string = original_string.dup (string.to_r * 1_000_000).to_i } x.report("new ") { string = original_string.dup if string && string.start_with?(".".freeze) && string.length == 7 string[0] = ''.freeze string.to_i end } x.compare! end # Warming up -------------------------------------- # multiply 125.783k i/100ms # new 146.543k i/100ms # Calculating ------------------------------------- # multiply 1.751M (± 3.3%) i/s - 8.805M in 5.033779s # new 2.225M (± 2.1%) i/s - 11.137M in 5.007110s # Comparison: # new : 2225289.7 i/s # multiply: 1751254.2 i/s - 1.27x slower ```
* | | | Merge pull request #33747 from schneems/schneems/faster-tryRichard Schneeman2018-08-291-1/+10
|\ \ \ \ | | | | | | | | | | 32% Faster Object#try
| * | | | 32% Faster Object#tryschneems2018-08-291-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here’s the micro benchmark: ```ruby module ActiveSupport module NewTryable #:nodoc: def try(*a, &b) return unless a.empty? || respond_to?(a.first) return public_send(*a, &b) unless a.empty? return nil unless block_given? return instance_eval(&b) if b.arity == 0 yield self end def try!(*a, &b) return public_send(*a, &b) if !a.empty? return nil unless block_given? return instance_eval(&b) if b.arity == 0 yield self end end end module ActiveSupport module OldTryable #:nodoc: def try(*a, &b) try!(*a, &b) if a.empty? || respond_to?(a.first) end def try!(*a, &b) if a.empty? && block_given? if b.arity == 0 instance_eval(&b) else yield self end else public_send(*a, &b) end end end end class FooNew include ActiveSupport::NewTryable def foo end end class FooOld include ActiveSupport::OldTryable def foo end end foo_new = FooNew.new foo_old = FooOld.new require 'benchmark/ips' Benchmark.ips do |x| x.report("old") { foo_old.try(:foo) } x.report("new") { foo_new.try(:foo) } x.compare! end # Warming up -------------------------------------- # old 144.178k i/100ms # new 172.371k i/100ms # Calculating ------------------------------------- # old 2.181M (± 8.0%) i/s - 10.813M in 5.001419s # new 2.889M (± 7.7%) i/s - 14.479M in 5.051760s # Comparison: # new: 2888691.7 i/s # old: 2180740.7 i/s - 1.32x slower ``` Also reduces memory. On https://www.codetriage.com i’m seeing 1.5% fewer object allocations per request (in object count). Before: Total allocated: 1014475 bytes (8525 objects) After: Total allocated: 1015499 bytes (8389 objects)
* | | | | Remove this conditionalEileen Uchitelle2018-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | I removed the argument so I should remove the conditional too.
* | | | | Remove unused argumentEileen Uchitelle2018-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | The test that used this was updated and it's no longer needed.
* | | | | Merge pull request #33748 from eileencodes/fix-erb-loading-issue-with-db-yamlEileen M. Uchitelle2018-08-293-16/+8
|\ \ \ \ \ | |_|/ / / |/| | | | Drop load_database_yaml and fix test
| * | | | Drop load_database_yaml and fix testEileen Uchitelle2018-08-293-16/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We originally did the whole `load_database_yaml` thing because this test wasn't cooperating and we needed to finish the namespaced rake tasks for multiple databases. However, it turns out that YAML can't eval ERB if you don't tell it it's ERB so you get Pysch parse errors if you're using multi-line ERB or ERB with conditionals. It's a hot mess. After trying a few things and thinking it over we decided that it wasn't worth bandaiding over, the test needed to be improved. The test was added in #31135 to test that the env is loaded in these tasks. But it was blowing up because we were trying to read a database name out of the configuration - however that's not the purpose of this change. We want to read environment files in the rake tasks, but not in the config file. In this PR we changed the test to test what the PR was actually fixing. We've also deleted the `load_database_yaml` because it caused more problems than it was worth. This should fix the issues described in https://github.com/rails/rails/pull/32274#issuecomment-384161057. We also had these problems at GitHub. Co-authored-by: alimi <aibrahim2k2@gmail.com>
* | | | | Merge pull request #33718 from kddeisz/permit-listMatthew Draper2018-08-2919-52/+63
|\ \ \ \ \ | | | | | | | | | | | | Finish converting whitelist and blacklist references
| * | | | | Permit list usage cleanup and clearer documentationKevin Deisz2018-08-2715-40/+41
| | | | | |
| * | | | | Convert remaining usage of whitelist and blacklistKevin Deisz2018-08-245-14/+14
| | | | | |
| * | | | | Deprecate usage of ActionView::Template::Handlers::ERB::escape_whitelistKevin Deisz2018-08-241-2/+12
| | | | | |
| * | | | | Convert over the rest of the blacklist referencesKevin Deisz2018-08-241-2/+2
| | | | | |
| * | | | | Convert over the rest of the whitelist referencesKevin Deisz2018-08-2413-25/+25
| | | | | |
* | | | | | Generate the same value as a label of view in system test templateyuuji.yaginuma2018-08-292-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the system test template, enter a value based on label. However, since `label` method does not use `titleize` by default. If generate a value including underscore, cannot find a label and the test will fail. ``` $ ./bin/rails g scaffold user name:string phone_number:string $ ./bin/rails t test/system/users_test.rb E Error: UsersTest#test_creating_a_User: Capybara::ElementNotFound: Unable to find field "Phone Number" test/system/users_test.rb:18:in `block in <class:UsersTest>' ``` This removes unnecessary `titleize` so that the generated file will pass even if the attribute contains an underscore.
* | | | | | Add test to make sure the custom object key can't be serializedRafael Mendonça França2018-08-281-2/+4
| | | | | |
* | | | | | Focus search input after page load on /rails/info/routes (#33683)James Brooks2018-08-281-0/+3
| |/ / / / |/| | | |
* | | | | Merge pull request #33739 from tleneveu/edgeguides-https-linksRyuta Kamizono2018-08-283-4/+4
|\ \ \ \ \ | | | | | | | | | | | | Use the HTTPS protocol for links to Edges Guides [ci skip]
| * | | | | Use the HTTPS protocol for links to Edges Guides [ci skip]tleneveu2018-08-283-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | Edges Guides is now available in HTTPS, it would be better to use the HTTPS protocol directly.
* | | | | | Merge pull request #33689 from ypresto/ar-fix-dirty-in-aroundRyuta Kamizono2018-08-282-5/+26
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Mutation tracker should be cleared before continuing around callbacks
| * | | | | Mutation tracker should be cleared before continuing around callbacksYuya Tanaka2018-08-282-5/+26
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `changes_applied` should be called before continuing around callback chain. Otherwise the mutation tracker returns old value for methods like `changed`? or `id_in_database` in around callbacks. Also methods depend on `id_in_database`, like `update_column`, are not working in `around_create` callbacks. ``` class Foo < ActiveRecord::Base around_create :around_create_callback def around_create_callback ... yield p id_in_database # => nil update_column(:generated_column, generate_value) # silently fails end ... end ```
* | | | | Update the comments for TimeWithZone subtraction (#33721)Rob Race2018-08-281-2/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Update the comments for TimeWithZone subtraction While reading the description/documentation comments for the subtraction method, it was confusing. While in practical usage, the returned values make sense. It seems as though the explanation could be a bit clearer. * Removed erroneous closing parenthesis [ci skip] [Rob Race + Ryuta Kamizono]
* | | | | Merge pull request #33654 from kamipo/fix_numericality_validator_2Ryuta Kamizono2018-08-284-4/+41
|\ \ \ \ \ | |/ / / / |/| | | | Fix numericality validator to still use value before type cast except Active Record
| * | | | Fix numericality validator to still use value before type cast except Active ↵Ryuta Kamizono2018-08-244-4/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Record The purpose of fe9547b is to work type casting to value from database. But that was caused not to use the value before type cast even except Active Record. There we never guarantees that the value before type cast was going to the used in this validation, but we should not change the behavior unless there is some particular reason. To restore original behavior, still use the value before type cast if `came_from_user?` is undefined (i.e. except Active Record). Fixes #33651. Fixes #33686.
* | | | | Call block to #redirect_to in controller context (#33735)speckins2018-08-272-1/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Call block to #redirect_to in controller context The documentation for ActionController::Redirecting states that a Proc argument "will be executed in the controller's context." However, unless #instance_eval is used (removed in 6b3ad0ca), that statement is false for procs defined outside of the controller instance. This commit restores the documented behavior. Fixes #33731. * Move test proc into a constant in another class Per @rafaelfranca's suggestion. [Steven Peckins + Rafael Mendonça França]
* | | | | Add documentation for `:collation` column option (#33733)Nate Pinsky2018-08-271-0/+3
| |_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add documentation for `:collation` option The table definition supports a `:collation` option for string and text columns, but this is not documented anywhere that I could find. I'm not sure if the "If not specified" part is accurate. From [this PR](https://github.com/rails/rails/commit/1515c4d98da3f730ef971fa5a13cad828bd9bef4), it looks like it passes `nil` and lets the database handle the collation, but I'm happy to change it if I misread the code. [ci skip] * FIX remove whitespace [Nate Pinsky + Rafael Mendonça França]
* | | | Merge pull request #31972 from bogdanvlviv/update-form_helpers-guideRafael França2018-08-271-96/+118
|\ \ \ \ | | | | | | | | | | Update "Action View Form Helpers" guide
| * | | | Update "Action View Form Helpers" guide [ci skip]bogdanvlviv2018-08-271-96/+118
|/ / / /
* | | | Merge pull request #33727 from bogdanvlviv/follow-up-33523Ryuta Kamizono2018-08-272-50/+23
|\ \ \ \ | | | | | | | | | | Follow up #33523 [ci skip]
| * | | | Add `:namespace` option to the api docs of `form_with` [ci skip]bogdanvlviv2018-08-271-0/+3
| | | | |
| * | | | Follow up #33523 [ci skip]bogdanvlviv2018-08-271-50/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit is the next work after #33523. Also, this commit removes mention about hidden `utf8` input. Since form helpers don't generate this input by default since #32125. Note that I also had created PR #31972 with improvements to "Action View Form Helpers" guide, but I'll rebase it after merging the current PR.
* | | | | Remove unused requiresRyuta Kamizono2018-08-251-3/+1
| | | | |
* | | | | Merge pull request #33723 from pinewong/patch-3Matthew Draper2018-08-251-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Clarify example of the test [ci skip]
| * | | | | Clarify example of the test [ci skip] 黄松2018-08-251-2/+2
|/ / / / / | | | | | | | | | | ActionDispatch::TestProcess::FixtureFile