aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2010-03-08 16:08:46 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2010-03-08 16:20:54 -0800
commit60bbf16bfd60493c05bf9c9c70ec962a0c482155 (patch)
tree44ed4816878f307d11437665fa1a7b56c6682be0 /activesupport/test
parent47d252f9928568620844edce2161acd457c352c0 (diff)
downloadrails-60bbf16bfd60493c05bf9c9c70ec962a0c482155.tar.gz
rails-60bbf16bfd60493c05bf9c9c70ec962a0c482155.tar.bz2
rails-60bbf16bfd60493c05bf9c9c70ec962a0c482155.zip
class_attribute gets instance methods which delegate to but may override their class values as you'd expect. Disable instance writer methods with :instance_writer => false.
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/core_ext/class/attribute_test.rb35
1 files changed, 25 insertions, 10 deletions
diff --git a/activesupport/test/core_ext/class/attribute_test.rb b/activesupport/test/core_ext/class/attribute_test.rb
index ef84b9f255..06b4cf075f 100644
--- a/activesupport/test/core_ext/class/attribute_test.rb
+++ b/activesupport/test/core_ext/class/attribute_test.rb
@@ -2,13 +2,6 @@ require 'abstract_unit'
require 'active_support/core_ext/class/attribute'
class ClassAttributeTest < ActiveSupport::TestCase
- class Base
- class_attribute :setting
- end
-
- class Subclass < Base
- end
-
def setup
@klass = Class.new { class_attribute :setting }
@sub = Class.new(@klass)
@@ -40,8 +33,30 @@ class ClassAttributeTest < ActiveSupport::TestCase
assert_equal true, @klass.setting?
end
- test 'no instance delegates' do
- assert_raise(NoMethodError) { @klass.new.setting }
- assert_raise(NoMethodError) { @klass.new.setting? }
+ test 'instance reader delegates to class' do
+ assert_nil @klass.new.setting
+
+ @klass.setting = 1
+ assert_equal 1, @klass.new.setting
+ end
+
+ test 'instance override' do
+ object = @klass.new
+ object.setting = 1
+ assert_nil @klass.setting
+ @klass.setting = 2
+ assert_equal 1, object.setting
+ end
+
+ test 'instance query' do
+ object = @klass.new
+ assert_equal false, object.setting?
+ object.setting = 1
+ assert_equal true, object.setting?
+ end
+
+ test 'disabling instance writer' do
+ object = Class.new { class_attribute :setting, :instance_writer => false }.new
+ assert_raise(NoMethodError) { object.setting = 'boom' }
end
end