From bca070ef2ddbbe7e093c340ec7722e4dca0f37a5 Mon Sep 17 00:00:00 2001 From: Caleb Land Date: Thu, 3 Feb 2011 13:46:03 -0500 Subject: allow spaces and other characters in attribute names [#4725 state:resolved] * define the dynamically defined methods with 'define_method' instead of def * wrap some string injected method names in quotes Signed-off-by: Santiago Pastorino --- activemodel/lib/active_model/attribute_methods.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'activemodel/lib') diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb index 34669c1542..f46fa3a5e2 100644 --- a/activemodel/lib/active_model/attribute_methods.rb +++ b/activemodel/lib/active_model/attribute_methods.rb @@ -230,8 +230,8 @@ module ActiveModel def alias_attribute(new_name, old_name) attribute_method_matchers.each do |matcher| module_eval <<-STR, __FILE__, __LINE__ + 1 - def #{matcher.method_name(new_name)}(*args) - send(:#{matcher.method_name(old_name)}, *args) + define_method(:'#{matcher.method_name(new_name)}') do |*args| + send(:'#{matcher.method_name(old_name)}', *args) end STR end @@ -277,8 +277,8 @@ module ActiveModel if method_defined?(:'#{method_name}') undef :'#{method_name}' end - def #{method_name}(*args) - send(:#{matcher.method_missing_target}, '#{attr_name}', *args) + define_method(:'#{method_name}') do |*args| + send(:'#{matcher.method_missing_target}', '#{attr_name}', *args) end STR end -- cgit v1.2.3