From 08a6b5753ed65244c793bab455c26454ab1a1dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hrvoje=20=C5=A0imi=C4=87?= Date: Sat, 14 Jul 2012 15:21:30 +0200 Subject: move method for dependent option check --- .../lib/active_record/associations/builder/association.rb | 13 +++++++++++++ .../lib/active_record/associations/builder/belongs_to.rb | 6 +++--- .../lib/active_record/associations/builder/has_many.rb | 7 +++---- .../lib/active_record/associations/builder/has_one.rb | 7 +++---- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb index f45ab1aff4..4086485ee2 100644 --- a/activerecord/lib/active_record/associations/builder/association.rb +++ b/activerecord/lib/active_record/associations/builder/association.rb @@ -77,6 +77,19 @@ module ActiveRecord::Associations::Builder end end + def print_valid_dependent_options(options) + options.map {|s| s.to_s.insert 0, ":" }. + to_sentence(:words_connector => ", ", + :two_words_connector => ' or ', + :last_word_connector => ' or ') + end + + def check_dependent_valid(valid_options) + return if valid_options.include?(options[:dependent]) + raise ArgumentError, "The :dependent option expects either " \ + "#{print_valid_dependent_options(valid_options)} (#{options[:dependent].inspect})" + 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..277bec6f72 100644 --- a/activerecord/lib/active_record/associations/builder/belongs_to.rb +++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb @@ -73,9 +73,8 @@ module ActiveRecord::Associations::Builder 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 + + check_dependent_valid [:destroy, :delete] method_name = "belongs_to_dependent_#{options[:dependent]}_for_#{name}" model.send(:class_eval, <<-eoruby, __FILE__, __LINE__ + 1) @@ -85,6 +84,7 @@ module ActiveRecord::Associations::Builder end eoruby model.after_destroy method_name + end end end diff --git a/activerecord/lib/active_record/associations/builder/has_many.rb b/activerecord/lib/active_record/associations/builder/has_many.rb index 81df1fb135..6920bf0633 100644 --- a/activerecord/lib/active_record/associations/builder/has_many.rb +++ b/activerecord/lib/active_record/associations/builder/has_many.rb @@ -20,14 +20,13 @@ module ActiveRecord::Associations::Builder 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 + + check_dependent_valid [:destroy, :delete_all, :nullify, :restrict] dependent_restrict_deprecation_warning if options[:dependent] == :restrict send("define_#{options[: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..442fd50b1d 100644 --- a/activerecord/lib/active_record/associations/builder/has_one.rb +++ b/activerecord/lib/active_record/associations/builder/has_one.rb @@ -26,14 +26,13 @@ module ActiveRecord::Associations::Builder 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 + + check_dependent_valid [:destroy, :delete, :nullify, :restrict] dependent_restrict_deprecation_warning if options[:dependent] == :restrict send("define_#{options[:dependent]}_dependency_method") model.before_destroy dependency_method_name + end end -- cgit v1.2.3