From d677097eb6d49f75ef41dae2ee832d5e0a1d177d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@gmail.com>
Date: Wed, 29 Jun 2011 13:57:59 -0300
Subject: Fix configurable cristalization and tests.

---
 activesupport/lib/active_support/configurable.rb |  4 ++--
 activesupport/test/configurable_test.rb          | 22 ++++++++++++++++------
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/activesupport/lib/active_support/configurable.rb b/activesupport/lib/active_support/configurable.rb
index a94446acde..a2d2719de7 100644
--- a/activesupport/lib/active_support/configurable.rb
+++ b/activesupport/lib/active_support/configurable.rb
@@ -12,12 +12,12 @@ module ActiveSupport
 
     class Configuration < ActiveSupport::InheritableOptions
       def compile_methods!
-        self.class.compile_methods!(keys.reject {|key| respond_to?(key)})
+        self.class.compile_methods!(keys)
       end
 
       # compiles reader methods so we don't have to go through method_missing
       def self.compile_methods!(keys)
-        keys.each do |key|
+        keys.reject { |m| method_defined?(m) }.each do |key|
           class_eval <<-RUBY, __FILE__, __LINE__ + 1
             def #{key}; _get(#{key.inspect}); end
           RUBY
diff --git a/activesupport/test/configurable_test.rb b/activesupport/test/configurable_test.rb
index c6d8191298..2e5ea2c360 100644
--- a/activesupport/test/configurable_test.rb
+++ b/activesupport/test/configurable_test.rb
@@ -58,16 +58,26 @@ class ConfigurableActiveSupport < ActiveSupport::TestCase
     child  = Class.new(parent)
 
     parent.config.bar = :foo
-    assert !parent.config.respond_to?(:bar)
-    assert !child.config.respond_to?(:bar)
-    assert !child.new.config.respond_to?(:bar)
+    assert_method_not_defined parent.config, :bar
+    assert_method_not_defined child.config, :bar
+    assert_method_not_defined child.new.config, :bar
 
     parent.config.compile_methods!
     assert_equal :foo, parent.config.bar
     assert_equal :foo, child.new.config.bar
 
-    assert_respond_to parent.config, :bar
-    assert_respond_to child.config, :bar
-    assert_respond_to child.new.config, :bar
+    assert_method_defined parent.config, :bar
+    assert_method_defined child.config, :bar
+    assert_method_defined child.new.config, :bar
+  end
+
+  def assert_method_defined(object, method)
+    methods = object.public_methods.map(&:to_s)
+    assert methods.include?(method.to_s), "Expected #{methods.inspect} to include #{method.to_s.inspect}"
+  end
+
+  def assert_method_not_defined(object, method)
+    methods = object.public_methods.map(&:to_s)
+    assert !methods.include?(method.to_s), "Expected #{methods.inspect} to not include #{method.to_s.inspect}"
   end
 end
-- 
cgit v1.2.3