From 7517a88ddc9e3b7351260f1a5f8d3a8bf7a48aab Mon Sep 17 00:00:00 2001 From: Krekoten' Marjan Date: Sat, 4 Sep 2010 12:56:16 +0300 Subject: [PATCH] Fix 'warning: method redefined' --- .../core_ext/module/attr_accessor_with_default.rb | 8 +++--- .../module/attr_accessor_with_default_test.rb | 22 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb b/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb index bfedbbb..62a5b03 100644 --- a/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb +++ b/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb @@ -22,10 +22,10 @@ class Module raise 'Default value or block required' unless !default.nil? || block define_method(sym, block_given? ? block : Proc.new { default }) module_eval(<<-EVAL, __FILE__, __LINE__ + 1) - def #{sym}=(value) # def age=(value) - class << self; attr_reader :#{sym} end # class << self; attr_reader :age end - @#{sym} = value # @age = value - end # end + def #{sym}=(value) # def age=(value) + class << self; attr_accessor :#{sym} end # class << self; attr_accessor :age end + @#{sym} = value # @age = value + end # end EVAL end end diff --git a/activesupport/test/core_ext/module/attr_accessor_with_default_test.rb b/activesupport/test/core_ext/module/attr_accessor_with_default_test.rb index 9494ca9..5b42934 100644 --- a/activesupport/test/core_ext/module/attr_accessor_with_default_test.rb +++ b/activesupport/test/core_ext/module/attr_accessor_with_default_test.rb @@ -28,4 +28,26 @@ class AttrAccessorWithDefaultTest < Test::Unit::TestCase def test_invalid_args assert_raise(RuntimeError) {@target.attr_accessor_with_default :foo} end + + def test_no_warning_method_redefined + @target.attr_accessor_with_default(:foo, :bar) + result = capture_stderr do + @instance.foo = :bar + @instance.foo = :bar + end + assert_not_match /warning: method redefined/, result + end + + private + + def capture_stderr + buffer = StringIO.new + old, $stderr = $stderr, buffer + begin + yield + ensure + $stderr = old + end + buffer.string + end end -- 1.7.2