Fix class_attribute so that it works with singleton classes.

This commit is contained in:
Carl Lerche 2010-04-01 17:18:24 -07:00
parent f0364d87f0
commit ab281f511c
2 changed files with 7 additions and 1 deletions

@ -50,7 +50,7 @@ def class_attribute(*attrs)
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)

@ -59,4 +59,10 @@ def setup
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