提交 d758d996 编写于 作者: P Pratik Naik

Deprecate Model#validate/validate_on_create/validate_on_update. Use...

Deprecate Model#validate/validate_on_create/validate_on_update. Use Model.validate :method and likewise
上级 32093320
...@@ -82,10 +82,7 @@ def errors ...@@ -82,10 +82,7 @@ def errors
# Runs all the specified validations and returns true if no errors were added otherwise false. # Runs all the specified validations and returns true if no errors were added otherwise false.
def valid? def valid?
errors.clear errors.clear
run_callbacks(:validate) run_callbacks(:validate)
validate if respond_to?(:validate)
errors.empty? errors.empty?
end end
...@@ -97,12 +94,6 @@ def invalid? ...@@ -97,12 +94,6 @@ def invalid?
def get_attribute_value(attribute) def get_attribute_value(attribute)
respond_to?(attribute.to_sym) ? send(attribute.to_sym) : instance_variable_get(:"@#{attribute}") respond_to?(attribute.to_sym) ? send(attribute.to_sym) : instance_variable_get(:"@#{attribute}")
end end
protected
# Overwrite this method for validation checks on all saves and use <tt>Errors.add(field, msg)</tt> for invalid attributes.
def validate
end
end end
end end
......
...@@ -4,9 +4,13 @@ class Reply < Topic ...@@ -4,9 +4,13 @@ class Reply < Topic
validate :errors_on_empty_content validate :errors_on_empty_content
validate_on_create :title_is_wrong_create validate_on_create :title_is_wrong_create
validate :check_empty_title
validate_on_create :check_content_mismatch
validate_on_update :check_wrong_update
attr_accessible :title, :author_name, :author_email_address, :written_on, :content, :last_read attr_accessible :title, :author_name, :author_email_address, :written_on, :content, :last_read
def validate def check_empty_title
errors[:title] << "Empty" unless attribute_present?("title") errors[:title] << "Empty" unless attribute_present?("title")
end end
...@@ -14,7 +18,7 @@ def errors_on_empty_content ...@@ -14,7 +18,7 @@ def errors_on_empty_content
errors[:content] << "Empty" unless attribute_present?("content") errors[:content] << "Empty" unless attribute_present?("content")
end end
def validate_on_create def check_content_mismatch
if attribute_present?("title") && attribute_present?("content") && content == "Mismatch" if attribute_present?("title") && attribute_present?("content") && content == "Mismatch"
errors[:title] << "is Content Mismatch" errors[:title] << "is Content Mismatch"
end end
...@@ -24,7 +28,7 @@ def title_is_wrong_create ...@@ -24,7 +28,7 @@ def title_is_wrong_create
errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create" errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create"
end end
def validate_on_update def check_wrong_update
errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update" errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update"
end end
end end
...@@ -164,14 +164,25 @@ def valid? ...@@ -164,14 +164,25 @@ def valid?
run_callbacks(:validate) run_callbacks(:validate)
validate if respond_to?(:validate) if respond_to?(:validate)
ActiveSupport::Deprecation.warn("Base#validate has been deprecated, please use Base.validate :method instead")
validate
end
if new_record? if new_record?
run_callbacks(:validate_on_create) run_callbacks(:validate_on_create)
validate_on_create if respond_to?(:validate_on_create)
if respond_to?(:validate_on_create)
ActiveSupport::Deprecation.warn("Base#validate_on_create has been deprecated, please use Base.validate_on_create :method instead")
validate_on_create
end
else else
run_callbacks(:validate_on_update) run_callbacks(:validate_on_update)
validate_on_update if respond_to?(:validate_on_update)
if respond_to?(:validate_on_update)
ActiveSupport::Deprecation.warn("Base#validate_on_update has been deprecated, please use Base.validate_on_update :method instead")
validate_on_update
end
end end
errors.empty? errors.empty?
...@@ -185,16 +196,6 @@ def errors ...@@ -185,16 +196,6 @@ def errors
def get_attribute_value(attribute) def get_attribute_value(attribute)
respond_to?(attribute.to_sym) ? send(attribute.to_sym) : self[attribute.to_sym] respond_to?(attribute.to_sym) ? send(attribute.to_sym) : self[attribute.to_sym]
end end
protected
# Overwrite this method for validation checks used only on creation.
def validate_on_create
end
# Overwrite this method for validation checks used only on updates.
def validate_on_update
end
end end
end end
......
...@@ -16,6 +16,24 @@ class ProtectedPerson < ActiveRecord::Base ...@@ -16,6 +16,24 @@ class ProtectedPerson < ActiveRecord::Base
attr_protected :first_name attr_protected :first_name
end end
class DeprecatedPerson < ActiveRecord::Base
set_table_name 'people'
protected
def validate
errors[:name] << "always invalid"
end
def validate_on_create
errors[:name] << "invalid on create"
end
def validate_on_update
errors[:name] << "invalid on update"
end
end
class ValidationsTest < ActiveRecord::TestCase class ValidationsTest < ActiveRecord::TestCase
fixtures :topics, :developers fixtures :topics, :developers
...@@ -150,4 +168,20 @@ def test_validates_acceptance_of_as_database_column ...@@ -150,4 +168,20 @@ def test_validates_acceptance_of_as_database_column
assert_equal "Dan Brown", reply["author_name"] assert_equal "Dan Brown", reply["author_name"]
end end
end end
def test_deprecated_validation_instance_methods
tom = DeprecatedPerson.new
assert_deprecated do
assert tom.invalid?
assert_equal ["always invalid", "invalid on create"], tom.errors[:name]
end
tom.save(false)
assert_deprecated do
assert tom.invalid?
assert_equal ["always invalid", "invalid on update"], tom.errors[:name]
end
end
end end
...@@ -146,10 +146,13 @@ def self.destroyed_account_ids ...@@ -146,10 +146,13 @@ def self.destroyed_account_ids
true true
end end
validate :check_empty_credit_limit
protected protected
def validate
errors.add_on_empty "credit_limit" def check_empty_credit_limit
end errors.add_on_empty "credit_limit"
end
private private
......
...@@ -52,10 +52,13 @@ class Account < ActiveRecord::Base ...@@ -52,10 +52,13 @@ class Account < ActiveRecord::Base
i.belongs_to :nested_unqualified_billing_firm, :class_name => 'Nested::Firm' i.belongs_to :nested_unqualified_billing_firm, :class_name => 'Nested::Firm'
end end
validate :check_empty_credit_limit
protected protected
def validate
errors.add_on_empty "credit_limit" def check_empty_credit_limit
end errors.add_on_empty "credit_limit"
end
end end
end end
end end
...@@ -11,7 +11,11 @@ class Reply < Topic ...@@ -11,7 +11,11 @@ class Reply < Topic
attr_accessible :title, :author_name, :author_email_address, :written_on, :content, :last_read attr_accessible :title, :author_name, :author_email_address, :written_on, :content, :last_read
def validate validate :check_empty_title
validate_on_create :check_content_mismatch
validate_on_update :check_wrong_update
def check_empty_title
errors[:title] << "Empty" unless attribute_present?("title") errors[:title] << "Empty" unless attribute_present?("title")
end end
...@@ -19,7 +23,7 @@ def errors_on_empty_content ...@@ -19,7 +23,7 @@ def errors_on_empty_content
errors[:content] << "Empty" unless attribute_present?("content") errors[:content] << "Empty" unless attribute_present?("content")
end end
def validate_on_create def check_content_mismatch
if attribute_present?("title") && attribute_present?("content") && content == "Mismatch" if attribute_present?("title") && attribute_present?("content") && content == "Mismatch"
errors[:title] << "is Content Mismatch" errors[:title] << "is Content Mismatch"
end end
...@@ -29,7 +33,7 @@ def title_is_wrong_create ...@@ -29,7 +33,7 @@ def title_is_wrong_create
errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create" errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create"
end end
def validate_on_update def check_wrong_update
errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update" errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update"
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册