diff options
author | Carl Lerche <carllerche@mac.com> | 2010-04-01 17:18:24 -0700 |
---|---|---|
committer | Carl Lerche <carllerche@mac.com> | 2010-04-01 17:18:42 -0700 |
commit | ab281f511ccb3893ea077fe8a7bb78cdd2db0885 (patch) | |
tree | bd8f699175141c682f6d7489e543e7ad79d59159 /activesupport | |
parent | f0364d87f03d58312bcab1b2f17b5b56b6c72653 (diff) | |
download | rails-ab281f511ccb3893ea077fe8a7bb78cdd2db0885.tar.gz rails-ab281f511ccb3893ea077fe8a7bb78cdd2db0885.tar.bz2 rails-ab281f511ccb3893ea077fe8a7bb78cdd2db0885.zip |
Fix class_attribute so that it works with singleton classes.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/class/attribute.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/class/attribute_test.rb | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/class/attribute.rb b/activesupport/lib/active_support/core_ext/class/attribute.rb index 9631a7d242..577d5cbf45 100644 --- a/activesupport/lib/active_support/core_ext/class/attribute.rb +++ b/activesupport/lib/active_support/core_ext/class/attribute.rb @@ -50,7 +50,7 @@ class Class singleton_class.send(:define_method, attr) { value } end - define_method(attr) { self.class.send(attr) } + define_method(attr) { self.singleton_class.send(attr) } define_method(:"#{attr}?") { !!send(attr) } define_method(:"#{attr}=") do |value| singleton_class.remove_possible_method(attr) diff --git a/activesupport/test/core_ext/class/attribute_test.rb b/activesupport/test/core_ext/class/attribute_test.rb index 06b4cf075f..24aa5c0eba 100644 --- a/activesupport/test/core_ext/class/attribute_test.rb +++ b/activesupport/test/core_ext/class/attribute_test.rb @@ -59,4 +59,10 @@ class ClassAttributeTest < ActiveSupport::TestCase object = Class.new { class_attribute :setting, :instance_writer => false }.new assert_raise(NoMethodError) { object.setting = 'boom' } end + + test 'works well with singleton classes' do + object = @klass.new + object.singleton_class.setting = 'foo' + assert_equal 'foo', object.setting + end end |