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:
parent
10834e975a
commit
124c97fbe2
@ -40,14 +40,14 @@ def define_accessors
|
||||
|
||||
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
|
||||
|
@ -25,14 +25,14 @@ def add_counter_cache_callbacks(reflection)
|
||||
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 @@ def add_touch_callbacks(reflection)
|
||||
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?
|
||||
|
@ -58,7 +58,7 @@ def define_readers
|
||||
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 @@ def define_writers
|
||||
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
|
||||
|
@ -28,7 +28,7 @@ def configure_dependency
|
||||
|
||||
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 @@ class << o
|
||||
|
||||
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 @@ def define_delete_all_dependency_method
|
||||
|
||||
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
|
||||
|
@ -45,7 +45,7 @@ def dependency_method_name
|
||||
|
||||
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 @@ def define_destroy_dependency_method
|
||||
|
||||
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
|
||||
|
@ -16,15 +16,15 @@ def define_accessors
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user