From 010eda2eb516d237a7b5cf022b7dd2213ff77bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Strza=C5=82kowski?= Date: Sat, 17 Jul 2010 03:21:14 +0800 Subject: Removed warnings about method redefining --- activerecord/lib/active_record/associations.rb | 33 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index d67df64f59..a9d256a771 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1354,6 +1354,7 @@ module ActiveRecord end def association_accessor_methods(reflection, association_proxy_class) + remove_possible_method(reflection.name) define_method(reflection.name) do |*params| force_reload = params.first unless params.empty? association = association_instance_get(reflection.name) @@ -1371,12 +1372,16 @@ module ActiveRecord association.target.nil? ? nil : association end - define_method("loaded_#{reflection.name}?") do + method = "loaded_#{reflection.name}?" + remove_possible_method(method) + define_method(method) do association = association_instance_get(reflection.name) association && association.loaded? end - define_method("#{reflection.name}=") do |new_value| + method = "#{reflection.name}=" + remove_possible_method(method) + define_method(method) do |new_value| association = association_instance_get(reflection.name) if association.nil? || association.target != new_value @@ -1386,8 +1391,10 @@ module ActiveRecord association.replace(new_value) association_instance_set(reflection.name, new_value.nil? ? nil : association) end - - define_method("set_#{reflection.name}_target") do |target| + + method = "set_#{reflection.name}_target" + remove_possible_method(method) + define_method(method) do |target| return if target.nil? and association_proxy_class == BelongsToAssociation association = association_proxy_class.new(self, reflection) association.target = target @@ -1396,6 +1403,7 @@ module ActiveRecord end def collection_reader_method(reflection, association_proxy_class) + remove_possible_method(reflection.name) define_method(reflection.name) do |*params| force_reload = params.first unless params.empty? association = association_instance_get(reflection.name) @@ -1409,8 +1417,10 @@ module ActiveRecord association end - - define_method("#{reflection.name.to_s.singularize}_ids") do + + method = "#{reflection.name.to_s.singularize}_ids" + remove_possible_method(method) + define_method(method) do if send(reflection.name).loaded? || reflection.options[:finder_sql] send(reflection.name).map(&:id) else @@ -1436,8 +1446,10 @@ module ActiveRecord association.replace(new_value) association end - - define_method("#{reflection.name.to_s.singularize}_ids=") do |new_value| + + method = "#{reflection.name.to_s.singularize}_ids=" + remove_possible_method(method) + define_method(method) do |new_value| ids = (new_value || []).reject { |nid| nid.blank? }.map(&:to_i) send("#{reflection.name}=", reflection.klass.find(ids).index_by(&:id).values_at(*ids)) end @@ -1445,7 +1457,9 @@ module ActiveRecord end def association_constructor_method(constructor, reflection, association_proxy_class) - define_method("#{constructor}_#{reflection.name}") do |*params| + method = "#{constructor}_#{reflection.name}" + remove_possible_method(method) + define_method(method) do |*params| attributees = params.first unless params.empty? replace_existing = params[1].nil? ? true : params[1] association = association_instance_get(reflection.name) @@ -1487,6 +1501,7 @@ module ActiveRecord def add_touch_callbacks(reflection, touch_attribute) method_name = "belongs_to_touch_after_save_or_destroy_for_#{reflection.name}".to_sym + remove_possible_method(method_name) define_method(method_name) do association = send(reflection.name) -- cgit v1.2.3