diff options
author | Kabari Hendrick <kabari@gmail.com> | 2010-03-14 01:33:45 -0600 |
---|---|---|
committer | wycats <wycats@gmail.com> | 2010-03-27 02:07:04 -0700 |
commit | b081948bb3e1a6874f133140bf07e7fb9d3359d9 (patch) | |
tree | ba4ad456cf94d4e563c539f2249f5a4555836fea /activesupport | |
parent | 334983eca042b5016d3d79d7ed5761b60ba871ed (diff) | |
download | rails-b081948bb3e1a6874f133140bf07e7fb9d3359d9.tar.gz rails-b081948bb3e1a6874f133140bf07e7fb9d3359d9.tar.bz2 rails-b081948bb3e1a6874f133140bf07e7fb9d3359d9.zip |
fixing inconsistency with cattr_reader and matter_reader [#4172 state:resolved]
Signed-off-by: wycats <wycats@gmail.com>
Diffstat (limited to 'activesupport')
4 files changed, 30 insertions, 11 deletions
diff --git a/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb b/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb index 1602a609eb..83d154be5c 100644 --- a/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb +++ b/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb @@ -10,8 +10,8 @@ require 'active_support/core_ext/array/extract_options' # Person.hair_colors = [:brown, :black, :blonde, :red] class Class def cattr_reader(*syms) + options = syms.extract_options! syms.flatten.each do |sym| - next if sym.is_a?(Hash) class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} # unless defined? @@hair_colors @@#{sym} = nil # @@hair_colors = nil @@ -20,11 +20,14 @@ class Class def self.#{sym} # def self.hair_colors @@#{sym} # @@hair_colors end # end - # - def #{sym} # def hair_colors - @@#{sym} # @@hair_colors - end # end EOS + unless options[:instance_reader] == false + class_eval(<<-EOS, __FILE__, __LINE__) + def #{sym} # def hair_colors + @@#{sym} # @@hair_colors + end # end + EOS + end end end diff --git a/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb b/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb index 131b512944..c315fd5812 100644 --- a/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +++ b/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb @@ -2,7 +2,7 @@ require 'active_support/core_ext/array/extract_options' class Module def mattr_reader(*syms) - syms.extract_options! + options = syms.extract_options! syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} # unless defined? @@pagination_options @@ -12,11 +12,15 @@ class Module def self.#{sym} # def self.pagination_options @@#{sym} # @@pagination_options end # end - - def #{sym} # def pagination_options - @@#{sym} # @@pagination_options - end # end EOS + + unless options[:instance_reader] == false + class_eval(<<-EOS, __FILE__, __LINE__) + def #{sym} # def hair_colors + @@#{sym} # @@hair_colors + end # end + EOS + end end end diff --git a/activesupport/test/core_ext/class/attribute_accessor_test.rb b/activesupport/test/core_ext/class/attribute_accessor_test.rb index 2214ba9894..0f579d12e5 100644 --- a/activesupport/test/core_ext/class/attribute_accessor_test.rb +++ b/activesupport/test/core_ext/class/attribute_accessor_test.rb @@ -5,7 +5,8 @@ class ClassAttributeAccessorTest < Test::Unit::TestCase def setup @class = Class.new do cattr_accessor :foo - cattr_accessor :bar, :instance_writer => false + cattr_accessor :bar, :instance_writer => false + cattr_reader :shaq, :instance_reader => false end @object = @class.new end @@ -29,4 +30,9 @@ class ClassAttributeAccessorTest < Test::Unit::TestCase assert @object.respond_to?(:bar) assert !@object.respond_to?(:bar=) end + + def test_should_not_create_instance_reader + assert @class.respond_to?(:shaq) + assert !@object.respond_to?(:shaq) + end end diff --git a/activesupport/test/core_ext/module/attribute_accessor_test.rb b/activesupport/test/core_ext/module/attribute_accessor_test.rb index bd9461e62c..263e78feaa 100644 --- a/activesupport/test/core_ext/module/attribute_accessor_test.rb +++ b/activesupport/test/core_ext/module/attribute_accessor_test.rb @@ -6,6 +6,7 @@ class ModuleAttributeAccessorTest < Test::Unit::TestCase m = @module = Module.new do mattr_accessor :foo mattr_accessor :bar, :instance_writer => false + mattr_reader :shaq, :instance_reader => false end @class = Class.new @class.instance_eval { include m } @@ -31,4 +32,9 @@ class ModuleAttributeAccessorTest < Test::Unit::TestCase assert @object.respond_to?(:bar) assert !@object.respond_to?(:bar=) end + + def test_should_not_create_instance_reader + assert @module.respond_to?(:shaq) + assert !@object.respond_to?(:shaq) + end end |