Permalink
Browse files

define_attr_method correctly defines methods with invalid identifiers

  • Loading branch information...
1 parent fda45f4 commit c834a751d2acbd55b580cbba2e96dd29c5d9a452 @spastorino spastorino committed Mar 17, 2011
@@ -108,9 +108,8 @@ def define_attr_method(name, value=nil, &block)
else
# use eval instead of a block to work around a memory leak in dev
@dmitry

dmitry Mar 17, 2011

Contributor

Forgot to cleanup comment?

@spastorino

spastorino Mar 17, 2011

Owner

dmitry, hey thanks for pointing me to this. I saw this yeah I have to try a few more things and do another commit.

# 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
@@ -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,13 +102,15 @@ 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
test '#define_attr_method generates attribute method with invalid identifier characters' do
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

0 comments on commit c834a75

Please sign in to comment.