aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-03-17 13:30:17 -0700
committerwycats <wycats@gmail.com>2010-03-17 13:56:33 -0700
commitb652aa81216f718f27ba257238d4c27dd54863b2 (patch)
tree6ef65a5e933cdfe1e4e1777c8b4e1a50ebf34515 /activemodel/lib
parentdb2d96a6ba9c8d6d07121853955abe46af350f87 (diff)
downloadrails-b652aa81216f718f27ba257238d4c27dd54863b2.tar.gz
rails-b652aa81216f718f27ba257238d4c27dd54863b2.tar.bz2
rails-b652aa81216f718f27ba257238d4c27dd54863b2.zip
cleaning up a bunch of method already defined warnings [#4209 state:resolved]
Signed-off-by: wycats <wycats@gmail.com>
Diffstat (limited to 'activemodel/lib')
-rw-r--r--activemodel/lib/active_model/attribute_methods.rb18
1 files changed, 15 insertions, 3 deletions
diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb
index 588976f1d4..7f2959fcde 100644
--- a/activemodel/lib/active_model/attribute_methods.rb
+++ b/activemodel/lib/active_model/attribute_methods.rb
@@ -90,13 +90,20 @@ module ActiveModel
# # => 'address_id'
def define_attr_method(name, value=nil, &block)
sing = singleton_class
- sing.send :alias_method, "original_#{name}", name
+ sing.class_eval <<-eorb, __FILE__, __LINE__ + 1
+ if method_defined?(:original_#{name})
+ undef :original_#{name}
+ end
+ alias_method :original_#{name}, :#{name}
+ eorb
if block_given?
sing.send :define_method, name, &block
else
# use eval instead of a block to work around a memory leak in dev
# mode in fcgi
- sing.class_eval "def #{name}; #{value.to_s.inspect}; end"
+ sing.class_eval <<-eorb, __FILE__, __LINE__ + 1
+ def #{name}; #{value.to_s.inspect}; end
+ eorb
end
end
@@ -257,8 +264,13 @@ module ActiveModel
if respond_to?(generate_method)
send(generate_method, attr_name)
else
+ method_name = matcher.method_name(attr_name)
+
generated_attribute_methods.module_eval <<-STR, __FILE__, __LINE__+1
- def #{matcher.method_name(attr_name)}(*args)
+ if method_defined?(:#{method_name})
+ undef :#{method_name}
+ end
+ def #{method_name}(*args)
send(:#{matcher.method_missing_target}, '#{attr_name}', *args)
end
STR