diff options
author | Hrvoje Šimić <shime.ferovac@gmail.com> | 2012-07-14 15:21:30 +0200 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-08-01 11:33:12 -0300 |
commit | 08a6b5753ed65244c793bab455c26454ab1a1dc5 (patch) | |
tree | 0f64c7847ec5d07ee3f915aa6d2e02b56c837c1f | |
parent | c10202208982bfa02ffd16d1614992228391d781 (diff) | |
download | rails-08a6b5753ed65244c793bab455c26454ab1a1dc5.tar.gz rails-08a6b5753ed65244c793bab455c26454ab1a1dc5.tar.bz2 rails-08a6b5753ed65244c793bab455c26454ab1a1dc5.zip |
move method for dependent option check
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 |