aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | | Refactor to extract defining column methods as `define_column_methods`Ryuta Kamizono2019-02-093-142/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It makes to ease to handle all short-hand methods (e.g. validates arguments etc).
* | | | | | Fix rubocop violationsyuuji.yaginuma2019-02-092-11/+9
| | | | | |
* | | | | | Remove redundant returning `object`Ryuta Kamizono2019-02-091-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | `object.transform_values!` returns `object` itself.
* | | | | | Use Ruby 2.4+ native transform_values(!)Kasper Timm Hansen2019-02-081-7/+2
| | | | | |
* | | | | | Delete uneeded blank fileGuillermo Iguaran2019-02-081-0/+0
| | | | | |
* | | | | | Add 'Hash#deep_transform_values', and 'Hash#deep_transform_values!'Guillermo Iguaran2019-02-085-0/+84
| | | | | |
* | | | | | Refactor to just use `Association#target=` in `associate_records_to_owner`Ryuta Kamizono2019-02-091-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Association#target=` invokes `loaded!`, so we no longer need to call the `loaded!` explicitly. Since Preloader is private API, we don't guarantee that it behaves like older version as long as using Preloader directly. But this refactoring fortunately also fix the Preloader compatibility issue #35195. Closes #35195.
* | | | | | Merge pull request #34618 from bogdanvlviv/fix-elapsed-time-calculationsKasper Timm Hansen2019-02-084-9/+9
|\ \ \ \ \ \ | | | | | | | | | | | | | | Fix elapsed time calculations
| * | | | | | Fix elapsed time calculationsbogdanvlviv2019-02-084-9/+9
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've found a few places in Rails code base where I think it makes sense to calculate elapsed time more precisely by using `Concurrent.monotonic_time`: - Fix calculation of elapsed time in `ActiveSupport::Cache::MemoryStore#prune` - Fix calculation of elapsed time in `ActiveRecord::ConnectionAdapters::ConnectionPool::Queue#wait_poll` - Fix calculation of elapsed time in `ActiveRecord::ConnectionAdapters::ConnectionPool#attempt_to_checkout_all_existing_connections` - Fix calculation of elapsed time in `ActiveRecord::ConnectionAdapters::Mysql2Adapter#explain` See https://docs.ruby-lang.org/en/2.5.0/Process.html#method-c-clock_gettime https://blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-way Related to 7c4542146f0dde962205e5a90839349631ae60fb
* | | | | | Merge pull request #35193 from kamipo/fix_exists_with_distinct_and_offsetRyuta Kamizono2019-02-082-4/+18
|\ \ \ \ \ \ | | | | | | | | | | | | | | Fix `relation.exists?` with giving both `distinct` and `offset`
| * | | | | | Fix `relation.exists?` with giving both `distinct` and `offset`Ryuta Kamizono2019-02-082-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `distinct` affects (reduces) rows of the result, so it is important part when both `distinct` and `offset` are given. Replacing SELECT clause to `1 AS one` and removing `distinct` and `order` is just optimization for the `exists?`, we should not apply the optimization for that case. Fixes #35191.
* | | | | | | Merge pull request #35178 from bogdan/has-many-sizeRyuta Kamizono2019-02-082-2/+17
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | Bugfix has_many association #size when ids reader is cached and assoc…
| * | | | | | Bugfix has_many association #size when ids reader is cached and association ↵Bogdan Gusiev2019-02-082-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | is changed
* | | | | | | Refactor extracting `current_scope_restoring_block` into the scoping classRyuta Kamizono2019-02-082-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Relation is not best place to do this.
* | | | | | | Merge pull request #35099 from yahonda/diag35098Ryuta Kamizono2019-02-082-3/+4
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Address test_belongs_to_does_not_use_order_by failure
| * | | | | | | Address `test_belongs_to_does_not_use_order_by` failure due to checking ↵Yasuo Honda2019-02-082-3/+4
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | order by for metadata queries Also, `test_has_one_does_not_use_order_by` should not check metadata queries. Fixes #35098
* | | | | | | Merge pull request #35187 from jhawthorn/db-selection-resolver_contextEileen M. Uchitelle2019-02-073-7/+8
|\ \ \ \ \ \ \ | |_|_|_|/ / / |/| | | | | | Finish rename of database_operations to database_resolver_context
| * | | | | | Update CHANGELOG for database_resolver_contextJohn Hawthorn2019-02-071-2/+2
| | | | | | |
| * | | | | | Rename database_operations config to *_contextJohn Hawthorn2019-02-072-5/+6
|/ / / / / /
* | | | | | Merge pull request #35182 from jhawthorn/db-selection-refactorEileen M. Uchitelle2019-02-073-19/+19
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | Improve naming in DatabaseSelector
| * | | | | Rename database selector operations to contextJohn Hawthorn2019-02-072-18/+18
| | | | | |
| * | | | | Rename resolver ivar to operations in ResolverJohn Hawthorn2019-02-061-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We're already in the resolver, we call this class "operations" in the middleware, so we should use the same naming here.
| * | | | | Rename Session.build to Session.callJohn Hawthorn2019-02-062-2/+2
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is more consistent with Resolver, which has build called. This allows using a Proc instead of a class, which could be nice if you need to vary switching logic based on the request in a more ad-hoc way (ie. check if it is an API request).
* | | | | Merge pull request #35186 from kamipo/fix_leaking_scope_on_relation_createRyuta Kamizono2019-02-075-6/+45
|\ \ \ \ \ | | | | | | | | | | | | Fix `relation.create` to avoid leaking scope to initialization block and callbacks
| * | | | | Fix `relation.create` to avoid leaking scope to initialization block and ↵Ryuta Kamizono2019-02-075-6/+45
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | callbacks `relation.create` populates scope attributes to new record by `scoping`, it is necessary to assign the scope attributes to the record and to find STI subclass from the scope attributes. But the effect of `scoping` is class global, it was caused undesired behavior that pollute all class level querying methods in initialization block and callbacks (`after_initialize`, `before_validation`, `before_save`, etc), which are user provided code. To avoid the leaking scope issue, restore the original current scope before initialization block and callbacks are invoked. Fixes #9894. Fixes #17577. Closes #31526.
* | | | | Refactor around scopingRyuta Kamizono2019-02-075-18/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't use `false` as special value to skip to find inherited scope, we could use `skip_inherited_scope = true`, and move `_scoping` back on Relation.
* | | | | Merge pull request #35036 from rails/av-base-subclassAaron Patterson2019-02-0619-66/+137
|\ \ \ \ \ | | | | | | | | | | | | Move compiled ERB to an AV::Base subclass
| * | | | | Fix deprecation warnings and call superAaron Patterson2019-02-061-2/+2
| | | | | |
| * | | | | Fix some typos!Aaron Patterson2019-02-062-1/+5
| | | | | |
| * | | | | Add a message to help allocate AV::Base instancesAaron Patterson2019-02-061-1/+5
| | | | | |
| * | | | | Deprecate finalizer configuration (it doesn't do anything)Aaron Patterson2019-02-064-0/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert "Remove finalizer and configuration" This reverts commit 9e7b4a3173788ea43b11e74a4d2f69a5f1565daa.
| * | | | | Rename method so it is more descriptiveAaron Patterson2019-02-061-3/+3
| | | | | |
| * | | | | Pull generated methods up in to the anonymous subclassAaron Patterson2019-02-063-19/+8
| | | | | | | | | | | | | | | | | | | | | | | | Then we don't need the extra module.
| * | | | | 🚨 Make the cops happy 🚨Aaron Patterson2019-02-063-3/+3
| | | | | |
| * | | | | Remove finalizer and configurationAaron Patterson2019-02-065-50/+0
| | | | | |
| * | | | | Regenerate AV::Base subclass when DetailsKey gets clearedAaron Patterson2019-02-062-3/+29
| | | | | |
| * | | | | Move templates to an anonymous subclass of AV::BaseAaron Patterson2019-02-0613-35/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now we can throw away the subclass and the generated methods will get GC'd too
* | | | | | Allow skipping incineration of processed emailsPratik2019-02-066-1/+23
| |/ / / / |/| | | |
* | | | | Merge pull request #35174 from ypresto/fix-concat-retvalRyuta Kamizono2019-02-064-35/+10
|\ \ \ \ \ | | | | | | | | | | | | Fix `CollectionProxy#concat` to return self by alias it to `#<<`
| * | | | | Fix `CollectionProxy#concat` to return self by alias it to `#<<`Yuya Tanaka2019-02-064-35/+10
| | | | | | | | | | | | | | | | | | | | | | | | Formerly it was returning arguments (`records` array).
* | | | | | Merge pull request #34971 from y-yagi/improve_railties_testYuji Yaginuma2019-02-062-4/+24
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | Improve execution time of railties' test
| * | | | | Preload all component gemsyuuji.yaginuma2019-02-061-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | To avoid running require individually.
| * | | | | Restrict frameworks to load in engine testyuuji.yaginuma2019-02-061-4/+22
| |/ / / / | | | | | | | | | | | | | | | | | | | | For avoid to affect tests. Also, `action_text:install` task execute `yarn add`. This is an expensive and should be avoided if it is not needed.
* | | | | Merge pull request #35173 from betterzega/masterYuji Yaginuma2019-02-061-1/+1
|\ \ \ \ \ | |/ / / / |/| | | | Update terminal-to-html inline images url in ScreenshotHelper documentation
| * | | | Update terminal-to-html inline images url in ScreenshotHelperbetterzega2019-02-051-1/+1
|/ / / /
* | | | Merge pull request #35162 from silppuri/fix-incorrectly-matching-unachored-pathsAaron Patterson2019-02-053-12/+18
|\ \ \ \ | |/ / / |/| | | Fix incorrectly matching unanchored paths
| * | | Restrict matching with word boundary or end of stringPetri Avikainen2019-02-052-12/+12
| | | |
| * | | Define word boundary for unanchored path regexpPetri Avikainen2019-02-053-12/+18
| | | |
* | | | Merge pull request #35171 from rails/speed-up-partialsAaron Patterson2019-02-053-19/+41
|\ \ \ \ | | | | | | | | | | Speed up partial rendering by caching "variable" calculation
| * | | | Speed up partial rendering by caching "variable" calculationAaron Patterson2019-02-053-19/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit speeds up rendering partials by caching the variable name calculation on the template. The variable name is based on the "virtual path" used for looking up the template. The same virtual path information lives on the template, so we can just ask the cached template object for the variable. This benchmark takes a couple files, so I'll cat them below: ``` [aaron@TC ~/g/r/actionview (speed-up-partials)]$ cat render_benchmark.rb require "benchmark/ips" require "action_view" require "action_pack" require "action_controller" class TestController < ActionController::Base end TestController.view_paths = [File.expand_path("test/benchmarks")] controller_view = TestController.new.view_context result = Benchmark.ips do |x| x.report("render") do controller_view.render("many_partials") end end [aaron@TC ~/g/r/actionview (speed-up-partials)]$ cat test/benchmarks/test/_many_partials.html.erb Looping: <ul> <% 100.times do |i| %> <%= render partial: "list_item", locals: { i: i } %> <% end %> </ul> [aaron@TC ~/g/r/actionview (speed-up-partials)]$ cat test/benchmarks/test/_list_item.html.erb <li>Number: <%= i %></li> ``` Benchmark results (master): ``` [aaron@TC ~/g/r/actionview (master)]$ be ruby render_benchmark.rb Warming up -------------------------------------- render 41.000 i/100ms Calculating ------------------------------------- render 424.269 (± 3.5%) i/s - 2.132k in 5.031455s ``` Benchmark results (this branch): ``` [aaron@TC ~/g/r/actionview (speed-up-partials)]$ be ruby render_benchmark.rb Warming up -------------------------------------- render 50.000 i/100ms Calculating ------------------------------------- render 521.862 (± 3.8%) i/s - 2.650k in 5.085885s ```