aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorŁukasz Strzałkowski <lukasz.strzalkowski@gmail.com>2010-07-17 17:42:17 +0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-07-19 23:44:50 +0800
commit661fd98aad027b6171253828ed89115f30fac46f (patch)
tree46fb324e4b68f98754a05faf1f3b72fc6af3f1e8 /activerecord
parent7637b7184a990ae51f3ab10e2af99ff88cb633ea (diff)
downloadrails-661fd98aad027b6171253828ed89115f30fac46f.tar.gz
rails-661fd98aad027b6171253828ed89115f30fac46f.tar.bz2
rails-661fd98aad027b6171253828ed89115f30fac46f.zip
Make use of redefine_method, removed some more redefining warnings
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations.rb39
-rw-r--r--activerecord/lib/active_record/fixtures.rb2
-rw-r--r--activerecord/lib/active_record/named_scope.rb2
-rw-r--r--activerecord/test/cases/adapters/mysql/active_schema_test.rb1
4 files changed, 15 insertions, 29 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index a9d256a771..7cddb9c601 100644
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1354,8 +1354,7 @@ module ActiveRecord
end
def association_accessor_methods(reflection, association_proxy_class)
- remove_possible_method(reflection.name)
- define_method(reflection.name) do |*params|
+ redefine_method(reflection.name) do |*params|
force_reload = params.first unless params.empty?
association = association_instance_get(reflection.name)
@@ -1372,16 +1371,12 @@ module ActiveRecord
association.target.nil? ? nil : association
end
- method = "loaded_#{reflection.name}?"
- remove_possible_method(method)
- define_method(method) do
+ redefine_method("loaded_#{reflection.name}?") do
association = association_instance_get(reflection.name)
association && association.loaded?
end
-
- method = "#{reflection.name}="
- remove_possible_method(method)
- define_method(method) do |new_value|
+
+ redefine_method("#{reflection.name}=") do |new_value|
association = association_instance_get(reflection.name)
if association.nil? || association.target != new_value
@@ -1392,9 +1387,7 @@ module ActiveRecord
association_instance_set(reflection.name, new_value.nil? ? nil : association)
end
- method = "set_#{reflection.name}_target"
- remove_possible_method(method)
- define_method(method) do |target|
+ redefine_method("set_#{reflection.name}_target") do |target|
return if target.nil? and association_proxy_class == BelongsToAssociation
association = association_proxy_class.new(self, reflection)
association.target = target
@@ -1403,8 +1396,7 @@ module ActiveRecord
end
def collection_reader_method(reflection, association_proxy_class)
- remove_possible_method(reflection.name)
- define_method(reflection.name) do |*params|
+ redefine_method(reflection.name) do |*params|
force_reload = params.first unless params.empty?
association = association_instance_get(reflection.name)
@@ -1418,9 +1410,7 @@ module ActiveRecord
association
end
- method = "#{reflection.name.to_s.singularize}_ids"
- remove_possible_method(method)
- define_method(method) do
+ redefine_method("#{reflection.name.to_s.singularize}_ids") do
if send(reflection.name).loaded? || reflection.options[:finder_sql]
send(reflection.name).map(&:id)
else
@@ -1440,16 +1430,14 @@ module ActiveRecord
collection_reader_method(reflection, association_proxy_class)
if writer
- define_method("#{reflection.name}=") do |new_value|
+ redefine_method("#{reflection.name}=") do |new_value|
# Loads proxy class instance (defined in collection_reader_method) if not already loaded
association = send(reflection.name)
association.replace(new_value)
association
end
- method = "#{reflection.name.to_s.singularize}_ids="
- remove_possible_method(method)
- define_method(method) do |new_value|
+ redefine_method("#{reflection.name.to_s.singularize}_ids=") 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
@@ -1457,9 +1445,7 @@ module ActiveRecord
end
def association_constructor_method(constructor, reflection, association_proxy_class)
- method = "#{constructor}_#{reflection.name}"
- remove_possible_method(method)
- define_method(method) do |*params|
+ redefine_method("#{constructor}_#{reflection.name}") do |*params|
attributees = params.first unless params.empty?
replace_existing = params[1].nil? ? true : params[1]
association = association_instance_get(reflection.name)
@@ -1500,9 +1486,8 @@ module ActiveRecord
end
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
+ method_name = :"belongs_to_touch_after_save_or_destroy_for_#{reflection.name}"
+ redefine_method(method_name) do
association = send(reflection.name)
if touch_attribute == true
diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb
index 5bf43b3a72..657303fd14 100644
--- a/activerecord/lib/active_record/fixtures.rb
+++ b/activerecord/lib/active_record/fixtures.rb
@@ -871,7 +871,7 @@ module ActiveRecord
table_names.each do |table_name|
table_name = table_name.to_s.tr('./', '_')
- define_method(table_name) do |*fixtures|
+ redefine_method(table_name) do |*fixtures|
force_reload = fixtures.pop if fixtures.last == true || fixtures.last == :reload
@fixture_cache[table_name] ||= {}
diff --git a/activerecord/lib/active_record/named_scope.rb b/activerecord/lib/active_record/named_scope.rb
index 849ec9c884..6596c695e2 100644
--- a/activerecord/lib/active_record/named_scope.rb
+++ b/activerecord/lib/active_record/named_scope.rb
@@ -105,7 +105,7 @@ module ActiveRecord
extension ? relation.extending(extension) : relation
end
- singleton_class.send :define_method, name, &scopes[name]
+ singleton_class.send(:redefine_method, name, &scopes[name])
end
def named_scope(*args, &block)
diff --git a/activerecord/test/cases/adapters/mysql/active_schema_test.rb b/activerecord/test/cases/adapters/mysql/active_schema_test.rb
index 6e6645511c..ed4efdc1c0 100644
--- a/activerecord/test/cases/adapters/mysql/active_schema_test.rb
+++ b/activerecord/test/cases/adapters/mysql/active_schema_test.rb
@@ -101,6 +101,7 @@ class ActiveSchemaTest < ActiveRecord::TestCase
#we need to actually modify some data, so we make execute point to the original method
ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
alias_method :execute_with_stub, :execute
+ remove_method :execute
alias_method :execute, :execute_without_stub
end
yield