diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb index 2a99450a3d..21ddef6b75 100644 --- a/activemodel/lib/active_model/attribute_methods.rb +++ b/activemodel/lib/active_model/attribute_methods.rb @@ -108,9 +108,8 @@ module ActiveModel else # use eval instead of a block to work around a memory leak in dev # mode in fcgi - sing.class_eval <<-eorb, __FILE__, __LINE__ + 1 - def #{name}; #{value.nil? ? 'nil' : value.to_s.inspect}; end - eorb + value = value.nil? ? 'nil' : value.to_s + sing.send(:define_method, name) { value } end end diff --git a/activemodel/test/cases/attribute_methods_test.rb b/activemodel/test/cases/attribute_methods_test.rb index 13f29a8fd9..5cf905bc1f 100644 --- a/activemodel/test/cases/attribute_methods_test.rb +++ b/activemodel/test/cases/attribute_methods_test.rb @@ -7,7 +7,7 @@ class ModelWithAttributes class << self define_method(:bar) do - 'bar' + 'original bar' end end @@ -49,7 +49,7 @@ class ModelWithWeirdNamesAttributes class << self define_method(:'c?d') do - 'c?d' + 'original c?d' end end @@ -102,6 +102,7 @@ class AttributeMethodsTest < ActiveModel::TestCase ModelWithAttributes.define_attr_method(:bar, 'bar') assert_respond_to ModelWithAttributes, :bar + assert_equal "original bar", ModelWithAttributes.original_bar assert_equal "bar", ModelWithAttributes.bar end @@ -109,6 +110,7 @@ class AttributeMethodsTest < ActiveModel::TestCase ModelWithWeirdNamesAttributes.define_attr_method(:'c?d', 'c?d') assert_respond_to ModelWithWeirdNamesAttributes, :'c?d' + assert_equal "original c?d", ModelWithWeirdNamesAttributes.send('original_c?d') assert_equal "c?d", ModelWithWeirdNamesAttributes.send('c?d') end