1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

define_attr_method correctly defines methods with invalid identifiers

This commit is contained in:
Santiago Pastorino 2011-03-16 21:19:35 -03:00
parent fda45f4fc4
commit c834a751d2
2 changed files with 6 additions and 5 deletions

View file

@ -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

View file

@ -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