avoid warnings

This change uses Module.redefine_method as defined in ActiveSupport.
Making Module.define_method public would be as clean in the code, and
would also emit warnings when redefining an association. That is pretty
messy given current tests, so I'm leaving it for someone else to decide
what approach is better.
This commit is contained in:
Josh Susser
2011-11-27 14:15:40 -08:00
parent 10834e975a
commit 124c97fbe2
6 changed files with 15 additions and 15 deletions

View File

@@ -40,14 +40,14 @@ module ActiveRecord::Associations::Builder
def define_readers
name = self.name
mixin.send(:define_method, name) do |*params|
mixin.redefine_method(name) do |*params|
association(name).reader(*params)
end
end
def define_writers
name = self.name
mixin.send(:define_method, "#{name}=") do |value|
mixin.redefine_method("#{name}=") do |value|
association(name).writer(value)
end
end

View File

@@ -25,14 +25,14 @@ module ActiveRecord::Associations::Builder
name = self.name
method_name = "belongs_to_counter_cache_after_create_for_#{name}"
mixin.send(:define_method, method_name) do
mixin.redefine_method(method_name) do
record = send(name)
record.class.increment_counter(cache_column, record.id) unless record.nil?
end
model.after_create(method_name)
method_name = "belongs_to_counter_cache_before_destroy_for_#{name}"
mixin.send(:define_method, method_name) do
mixin.redefine_method(method_name) do
record = send(name)
record.class.decrement_counter(cache_column, record.id) unless record.nil?
end
@@ -48,7 +48,7 @@ module ActiveRecord::Associations::Builder
method_name = "belongs_to_touch_after_save_or_destroy_for_#{name}"
touch = options[:touch]
mixin.send(:define_method, method_name) do
mixin.redefine_method(method_name) do
record = send(name)
unless record.nil?

View File

@@ -58,7 +58,7 @@ module ActiveRecord::Associations::Builder
super
name = self.name
mixin.send(:define_method, "#{name.to_s.singularize}_ids") do
mixin.redefine_method("#{name.to_s.singularize}_ids") do
association(name).ids_reader
end
end
@@ -67,7 +67,7 @@ module ActiveRecord::Associations::Builder
super
name = self.name
mixin.send(:define_method, "#{name.to_s.singularize}_ids=") do |ids|
mixin.redefine_method("#{name.to_s.singularize}_ids=") do |ids|
association(name).ids_writer(ids)
end
end

View File

@@ -28,7 +28,7 @@ module ActiveRecord::Associations::Builder
def define_destroy_dependency_method
name = self.name
mixin.send(:define_method, dependency_method_name) do
mixin.redefine_method(dependency_method_name) do
send(name).each do |o|
# No point in executing the counter update since we're going to destroy the parent anyway
counter_method = ('belongs_to_counter_cache_before_destroy_for_' + self.class.name.downcase).to_sym
@@ -45,7 +45,7 @@ module ActiveRecord::Associations::Builder
def define_delete_all_dependency_method
name = self.name
mixin.send(:define_method, dependency_method_name) do
mixin.redefine_method(dependency_method_name) do
send(name).delete_all
end
end
@@ -53,7 +53,7 @@ module ActiveRecord::Associations::Builder
def define_restrict_dependency_method
name = self.name
mixin.send(:define_method, dependency_method_name) do
mixin.redefine_method(dependency_method_name) do
raise ActiveRecord::DeleteRestrictionError.new(name) unless send(name).empty?
end
end

View File

@@ -45,7 +45,7 @@ module ActiveRecord::Associations::Builder
def define_destroy_dependency_method
name = self.name
mixin.send(:define_method, dependency_method_name) do
mixin.redefine_method(dependency_method_name) do
association(name).delete
end
end
@@ -54,7 +54,7 @@ module ActiveRecord::Associations::Builder
def define_restrict_dependency_method
name = self.name
mixin.send(:define_method, dependency_method_name) do
mixin.redefine_method(dependency_method_name) do
raise ActiveRecord::DeleteRestrictionError.new(name) unless send(name).nil?
end
end

View File

@@ -16,15 +16,15 @@ module ActiveRecord::Associations::Builder
def define_constructors
name = self.name
mixin.send(:define_method, "build_#{name}") do |*params, &block|
mixin.redefine_method("build_#{name}") do |*params, &block|
association(name).build(*params, &block)
end
mixin.send(:define_method, "create_#{name}") do |*params, &block|
mixin.redefine_method("create_#{name}") do |*params, &block|
association(name).create(*params, &block)
end
mixin.send(:define_method, "create_#{name}!") do |*params, &block|
mixin.redefine_method("create_#{name}!") do |*params, &block|
association(name).create!(*params, &block)
end
end