aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorLauro Caetano <laurocaetano1@gmail.com>2013-12-03 18:30:13 -0200
committerLauro Caetano <laurocaetano1@gmail.com>2013-12-12 19:34:47 -0200
commitaa85bdba68eb981588cecfef9dea0c0fa3e1c673 (patch)
tree68bd2cd4280db4fb5dec47b4edfc760018849523 /activerecord/test/cases
parente87c3da2a291b54bce0be39ab2ec60ecd6d795a5 (diff)
downloadrails-aa85bdba68eb981588cecfef9dea0c0fa3e1c673.tar.gz
rails-aa85bdba68eb981588cecfef9dea0c0fa3e1c673.tar.bz2
rails-aa85bdba68eb981588cecfef9dea0c0fa3e1c673.zip
Use a whitelist to delegate methods to array
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/relation/delegation_test.rb89
1 files changed, 32 insertions, 57 deletions
diff --git a/activerecord/test/cases/relation/delegation_test.rb b/activerecord/test/cases/relation/delegation_test.rb
index 13677797cf..c5ad1e8976 100644
--- a/activerecord/test/cases/relation/delegation_test.rb
+++ b/activerecord/test/cases/relation/delegation_test.rb
@@ -6,22 +6,21 @@ module ActiveRecord
class DelegationTest < ActiveRecord::TestCase
fixtures :posts
- def assert_responds(target, method)
- assert target.respond_to?(method)
- assert_nothing_raised do
- method_arity = target.to_a.method(method).arity
+ def call_method(target, method)
+ method_arity = target.to_a.method(method).arity
- if method_arity.zero?
+ if method_arity.zero?
+ target.send(method)
+ elsif method_arity < 0
+ if method == :shuffle!
target.send(method)
- elsif method_arity < 0
- if method == :shuffle!
- target.send(method)
- else
- target.send(method, 1)
- end
else
- raise NotImplementedError
+ target.send(method, 1)
end
+ elsif method_arity == 1
+ target.send(method, 1)
+ else
+ raise NotImplementedError
end
end
end
@@ -31,31 +30,20 @@ module ActiveRecord
Post.first.comments
end
- [:map, :collect].each do |method|
- test "##{method} is delegated" do
- assert_responds(target, method)
- assert_equal(target.pluck(:body), target.send(method) {|post| post.body })
- end
-
- test "##{method}! is not delegated" do
- assert_deprecated do
- assert_responds(target, "#{method}!")
- end
+ [:&, :+, :[], :all?, :collect, :detect, :each, :each_cons,
+ :each_with_index, :flat_map, :group_by, :include?, :length,
+ :map, :none?, :one?, :reverse, :sample, :second, :sort, :sort_by,
+ :to_ary, :to_set, :to_xml, :to_yaml].each do |method|
+ test "association delegates #{method} to Array" do
+ assert_respond_to target, method
end
end
[:compact!, :flatten!, :reject!, :reverse!, :rotate!,
- :shuffle!, :slice!, :sort!, :sort_by!].each do |method|
- test "##{method} delegation is deprecated" do
- assert_deprecated do
- assert_responds(target, method)
- end
- end
- end
-
- [:select!, :uniq!].each do |method|
- test "##{method} is implemented" do
- assert_responds(target, method)
+ :shuffle!, :slice!, :sort!, :sort_by!, :delete_if,
+ :keep_if, :pop, :shift, :delete_at, :compact].each do |method|
+ test "#{method} is not delegated to Array" do
+ assert_raises(NoMethodError) { call_method(target, method) }
end
end
end
@@ -64,36 +52,23 @@ module ActiveRecord
fixtures :comments
def target
- Comment.where(body: 'Normal type')
+ Comment.all
end
- [:map, :collect].each do |method|
- test "##{method} is delegated" do
- assert_responds(target, method)
- assert_equal(target.pluck(:body), target.send(method) {|post| post.body })
- end
-
- test "##{method}! is not delegated" do
- assert_deprecated do
- assert_responds(target, "#{method}!")
- end
+ [:&, :+, :[], :all?, :collect, :detect, :each, :each_cons,
+ :each_with_index, :flat_map, :group_by, :include?, :length,
+ :map, :none?, :one?, :reverse, :sample, :second, :sort, :sort_by,
+ :to_ary, :to_set, :to_xml, :to_yaml].each do |method|
+ test "relation delegates #{method} to Array" do
+ assert_respond_to target, method
end
end
[:compact!, :flatten!, :reject!, :reverse!, :rotate!,
- :shuffle!, :slice!, :sort!, :sort_by!].each do |method|
- test "##{method} delegation is deprecated" do
- assert_deprecated do
- assert_responds(target, method)
- end
- end
- end
-
- [:select!, :uniq!].each do |method|
- test "##{method} triggers an immutable error" do
- assert_raises ActiveRecord::ImmutableRelation do
- assert_responds(target, method)
- end
+ :shuffle!, :slice!, :sort!, :sort_by!, :delete_if,
+ :keep_if, :pop, :shift, :delete_at, :compact].each do |method|
+ test "#{method} is not delegated to Array" do
+ assert_raises(NoMethodError) { call_method(target, method) }
end
end
end