Skip to content

Commit

Permalink
Deprecate Model#validate/validate_on_create/validate_on_update. Use M…
Browse files Browse the repository at this point in the history
…odel.validate :method and likewise
  • Loading branch information
lifo committed Mar 21, 2009
1 parent 3209332 commit d758d99
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 34 deletions.
9 changes: 0 additions & 9 deletions activemodel/lib/active_model/validations.rb
Expand Up @@ -82,10 +82,7 @@ def errors
# Runs all the specified validations and returns true if no errors were added otherwise false.
def valid?
errors.clear

run_callbacks(:validate)
validate if respond_to?(:validate)

errors.empty?
end

Expand All @@ -97,12 +94,6 @@ def invalid?
def get_attribute_value(attribute)
respond_to?(attribute.to_sym) ? send(attribute.to_sym) : instance_variable_get(:"@#{attribute}")
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

Expand Down
10 changes: 7 additions & 3 deletions activemodel/test/models/reply.rb
Expand Up @@ -4,17 +4,21 @@ class Reply < Topic
validate :errors_on_empty_content
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

def validate
def check_empty_title
errors[:title] << "Empty" unless attribute_present?("title")
end

def errors_on_empty_content
errors[:content] << "Empty" unless attribute_present?("content")
end

def validate_on_create
def check_content_mismatch
if attribute_present?("title") && attribute_present?("content") && content == "Mismatch"
errors[:title] << "is Content Mismatch"
end
Expand All @@ -24,7 +28,7 @@ def title_is_wrong_create
errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create"
end

def validate_on_update
def check_wrong_update
errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update"
end
end
27 changes: 14 additions & 13 deletions activerecord/lib/active_record/validations.rb
Expand Up @@ -164,14 +164,25 @@ def valid?

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?
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
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

errors.empty?
Expand All @@ -185,16 +196,6 @@ def errors
def get_attribute_value(attribute)
respond_to?(attribute.to_sym) ? send(attribute.to_sym) : self[attribute.to_sym]
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
Expand Down
34 changes: 34 additions & 0 deletions activerecord/test/cases/validations_test.rb
Expand Up @@ -16,6 +16,24 @@ class ProtectedPerson < ActiveRecord::Base
attr_protected :first_name
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
fixtures :topics, :developers

Expand Down Expand Up @@ -150,4 +168,20 @@ def test_validates_acceptance_of_as_database_column
assert_equal "Dan Brown", reply["author_name"]
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
9 changes: 6 additions & 3 deletions activerecord/test/models/company.rb
Expand Up @@ -146,10 +146,13 @@ def self.destroyed_account_ids
true
end

validate :check_empty_credit_limit

protected
def validate
errors.add_on_empty "credit_limit"
end

def check_empty_credit_limit
errors.add_on_empty "credit_limit"
end

private

Expand Down
9 changes: 6 additions & 3 deletions activerecord/test/models/company_in_module.rb
Expand Up @@ -52,10 +52,13 @@ class Account < ActiveRecord::Base
i.belongs_to :nested_unqualified_billing_firm, :class_name => 'Nested::Firm'
end

validate :check_empty_credit_limit

protected
def validate
errors.add_on_empty "credit_limit"
end

def check_empty_credit_limit
errors.add_on_empty "credit_limit"
end
end
end
end
10 changes: 7 additions & 3 deletions activerecord/test/models/reply.rb
Expand Up @@ -11,15 +11,19 @@ class Reply < Topic

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")
end

def errors_on_empty_content
errors[:content] << "Empty" unless attribute_present?("content")
end

def validate_on_create
def check_content_mismatch
if attribute_present?("title") && attribute_present?("content") && content == "Mismatch"
errors[:title] << "is Content Mismatch"
end
Expand All @@ -29,7 +33,7 @@ def title_is_wrong_create
errors[:title] << "is Wrong Create" if attribute_present?("title") && title == "Wrong Create"
end

def validate_on_update
def check_wrong_update
errors[:title] << "is Wrong Update" if attribute_present?("title") && title == "Wrong Update"
end
end
Expand Down

0 comments on commit d758d99

Please sign in to comment.