aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r--activerecord/lib/active_record/associations/builder/association.rb10
-rw-r--r--activerecord/lib/active_record/associations/builder/belongs_to.rb10
-rw-r--r--activerecord/lib/active_record/associations/builder/has_many.rb11
-rw-r--r--activerecord/lib/active_record/associations/builder/has_one.rb13
4 files changed, 23 insertions, 21 deletions
diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb
index f45ab1aff4..c3f32b5ed9 100644
--- a/activerecord/lib/active_record/associations/builder/association.rb
+++ b/activerecord/lib/active_record/associations/builder/association.rb
@@ -77,6 +77,16 @@ module ActiveRecord::Associations::Builder
end
end
+ def check_valid_dependent!(dependent, valid_options)
+ unless valid_options.include?(dependent)
+ valid_options_message = valid_options.map(&:inspect).to_sentence(
+ words_connector: ', ', two_words_connector: ' or ', last_word_connector: ' or ')
+
+ raise ArgumentError, "The :dependent option expects either " \
+ "#{valid_options_message} (#{dependent.inspect})"
+ end
+ end
+
def dependent_restrict_raises?
ActiveRecord::Base.dependent_restrict_raises == true
end
diff --git a/activerecord/lib/active_record/associations/builder/belongs_to.rb b/activerecord/lib/active_record/associations/builder/belongs_to.rb
index 4bef996297..405dfc97b7 100644
--- a/activerecord/lib/active_record/associations/builder/belongs_to.rb
+++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb
@@ -72,16 +72,14 @@ module ActiveRecord::Associations::Builder
end
def configure_dependency
- if options[:dependent]
- unless options[:dependent].in?([:destroy, :delete])
- raise ArgumentError, "The :dependent option expects either :destroy or :delete (#{options[:dependent].inspect})"
- end
+ if dependent = options[:dependent]
+ check_valid_dependent! dependent, [:destroy, :delete]
- method_name = "belongs_to_dependent_#{options[:dependent]}_for_#{name}"
+ method_name = "belongs_to_dependent_#{dependent}_for_#{name}"
model.send(:class_eval, <<-eoruby, __FILE__, __LINE__ + 1)
def #{method_name}
association = #{name}
- association.#{options[:dependent]} if association
+ association.#{dependent} if association
end
eoruby
model.after_destroy method_name
diff --git a/activerecord/lib/active_record/associations/builder/has_many.rb b/activerecord/lib/active_record/associations/builder/has_many.rb
index 81df1fb135..d0bdfa7d9c 100644
--- a/activerecord/lib/active_record/associations/builder/has_many.rb
+++ b/activerecord/lib/active_record/associations/builder/has_many.rb
@@ -19,14 +19,11 @@ module ActiveRecord::Associations::Builder
private
def configure_dependency
- if options[:dependent]
- unless options[:dependent].in?([:destroy, :delete_all, :nullify, :restrict])
- raise ArgumentError, "The :dependent option expects either :destroy, :delete_all, " \
- ":nullify or :restrict (#{options[:dependent].inspect})"
- end
+ if dependent = options[:dependent]
+ check_valid_dependent! dependent, [:destroy, :delete_all, :nullify, :restrict]
+ dependent_restrict_deprecation_warning if dependent == :restrict
- dependent_restrict_deprecation_warning if options[:dependent] == :restrict
- send("define_#{options[:dependent]}_dependency_method")
+ send("define_#{dependent}_dependency_method")
model.before_destroy dependency_method_name
end
end
diff --git a/activerecord/lib/active_record/associations/builder/has_one.rb b/activerecord/lib/active_record/associations/builder/has_one.rb
index cdb45e8e58..cd6d9c871b 100644
--- a/activerecord/lib/active_record/associations/builder/has_one.rb
+++ b/activerecord/lib/active_record/associations/builder/has_one.rb
@@ -25,14 +25,11 @@ module ActiveRecord::Associations::Builder
private
def configure_dependency
- if options[:dependent]
- unless options[:dependent].in?([:destroy, :delete, :nullify, :restrict])
- raise ArgumentError, "The :dependent option expects either :destroy, :delete, " \
- ":nullify or :restrict (#{options[:dependent].inspect})"
- end
-
- dependent_restrict_deprecation_warning if options[:dependent] == :restrict
- send("define_#{options[:dependent]}_dependency_method")
+ if dependent = options[:dependent]
+ check_valid_dependent! dependent, [:destroy, :delete, :nullify, :restrict]
+ dependent_restrict_deprecation_warning if dependent == :restrict
+
+ send("define_#{dependent}_dependency_method")
model.before_destroy dependency_method_name
end
end