From 8309706239769c429bbd323ba4d36d8ef10bb2f1 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Thu, 7 Mar 2019 19:07:07 +0900 Subject: Delegate `only` query method to relation as with `except` I've found the skewness of delegation methods between `except` and `only` in a88b6f2. The `only` method is closely similar with `except` as `SpawnMethods`. https://github.com/rails/rails/blob/e056b9bfb07c4eb3bcc6672d885aadd72bec574f/activerecord/lib/active_record/relation/spawn_methods.rb#L53-L67 It is preferable both behaves the same way. --- activerecord/lib/active_record/querying.rb | 2 +- activerecord/test/cases/relation/delegation_test.rb | 2 +- activerecord/test/cases/relations_test.rb | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/querying.rb b/activerecord/lib/active_record/querying.rb index 36e2134c46..7a8d0cb663 100644 --- a/activerecord/lib/active_record/querying.rb +++ b/activerecord/lib/active_record/querying.rb @@ -14,7 +14,7 @@ module ActiveRecord :find_each, :find_in_batches, :in_batches, :select, :reselect, :order, :reorder, :group, :limit, :offset, :joins, :left_joins, :left_outer_joins, :where, :rewhere, :preload, :eager_load, :includes, :from, :lock, :readonly, :extending, :or, - :having, :create_with, :distinct, :references, :none, :unscope, :merge, :except, + :having, :create_with, :distinct, :references, :none, :unscope, :merge, :except, :only, :count, :average, :minimum, :maximum, :sum, :calculate, :pluck, :pick, :ids ].freeze # :nodoc: diff --git a/activerecord/test/cases/relation/delegation_test.rb b/activerecord/test/cases/relation/delegation_test.rb index d04c409cb5..172fa20bc3 100644 --- a/activerecord/test/cases/relation/delegation_test.rb +++ b/activerecord/test/cases/relation/delegation_test.rb @@ -48,7 +48,7 @@ module ActiveRecord ActiveRecord::Batches.public_instance_methods(false) + ActiveRecord::Calculations.public_instance_methods(false) + ActiveRecord::FinderMethods.public_instance_methods(false) - [:raise_record_not_found_exception!] + - ActiveRecord::SpawnMethods.public_instance_methods(false) - [:spawn, :merge!, :only] + + ActiveRecord::SpawnMethods.public_instance_methods(false) - [:spawn, :merge!] + ActiveRecord::QueryMethods.public_instance_methods(false).reject { |method| method.to_s.end_with?("=", "!", "value", "values", "clause") } - [:reverse_order, :arel, :extensions] + [ diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 85719cb8d0..36b4000018 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -1503,9 +1503,11 @@ class RelationTest < ActiveRecord::TestCase author_posts = relation.except(:order, :limit) assert_equal Post.where(author_id: 1).sort_by(&:id), author_posts.sort_by(&:id) + assert_equal author_posts.sort_by(&:id), relation.scoping { Post.except(:order, :limit).sort_by(&:id) } all_posts = relation.except(:where, :order, :limit) assert_equal Post.all.sort_by(&:id), all_posts.sort_by(&:id) + assert_equal all_posts.sort_by(&:id), relation.scoping { Post.except(:where, :order, :limit).sort_by(&:id) } end def test_only @@ -1514,9 +1516,11 @@ class RelationTest < ActiveRecord::TestCase author_posts = relation.only(:where) assert_equal Post.where(author_id: 1).sort_by(&:id), author_posts.sort_by(&:id) + assert_equal author_posts.sort_by(&:id), relation.scoping { Post.only(:where).sort_by(&:id) } all_posts = relation.only(:order) assert_equal Post.order("id ASC").to_a, all_posts.to_a + assert_equal all_posts.to_a, relation.scoping { Post.only(:order).to_a } end def test_anonymous_extension -- cgit v1.2.3