From 95c609357e78106e9673931d3f60d8ff3cc0a0cd Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Thu, 16 Oct 2008 23:17:49 +0200 Subject: [PATCH] Ensure association proxy responds to private class methods defined in associated class. [#1083] --- .../associations/association_collection.rb | 4 ++-- .../cases/associations/has_many_associations_test.rb | 10 ++++++++-- activerecord/test/models/company.rb | 8 ++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index 09a80be266..b7f37e53f7 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -320,8 +320,8 @@ module ActiveRecord exists?(record) end - def proxy_respond_to?(method) - super || @reflection.klass.respond_to?(method) + def proxy_respond_to?(method, include_private = false) + super || @reflection.klass.respond_to?(method, include_private) end protected diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index dada2d1603..8d97b30c74 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -1081,8 +1081,14 @@ class HasManyAssociationsTest < ActiveRecord::TestCase end def test_sending_new_to_association_proxy_should_have_same_effect_as_calling_new - clients_assoc = companies(:first_firm).clients - assert_equal clients_assoc.new.attributes, clients_assoc.send(:new).attributes + client_association = companies(:first_firm).clients + assert_equal client_association.new.attributes, client_association.send(:new).attributes + end + + def test_respond_to_private_class_methods + client_association = companies(:first_firm).clients + assert !client_association.respond_to?(:private_method) + assert client_association.respond_to?(:private_method, true) end end diff --git a/activerecord/test/models/company.rb b/activerecord/test/models/company.rb index 62d20861f3..0e3fafa37c 100644 --- a/activerecord/test/models/company.rb +++ b/activerecord/test/models/company.rb @@ -112,6 +112,14 @@ class Client < Company def rating? query_attribute :rating end + + class << self + private + + def private_method + "darkness" + end + end end