diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2008-10-16 23:17:49 +0200 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-10-16 23:17:49 +0200 |
commit | 95c609357e78106e9673931d3f60d8ff3cc0a0cd (patch) | |
tree | 82f682f2129f41e6829ef17aeb899843f11c3e71 | |
parent | 9cb5400871b660e2c6d1654346650f07bb52a0c0 (diff) | |
download | rails-95c609357e78106e9673931d3f60d8ff3cc0a0cd.tar.gz rails-95c609357e78106e9673931d3f60d8ff3cc0a0cd.tar.bz2 rails-95c609357e78106e9673931d3f60d8ff3cc0a0cd.zip |
Ensure association proxy responds to private class methods defined in associated class. [#1083]
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 |