1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Generate strict validation error messages with attribute name

This commit is contained in:
Carlos Antonio da Silva 2012-02-01 11:28:31 -02:00
parent 0b5edb32cf
commit 26861e9506
3 changed files with 19 additions and 11 deletions

View file

@ -224,7 +224,7 @@ module ActiveModel
def add(attribute, message = nil, options = {})
message = normalize_message(attribute, message, options)
if options[:strict]
raise ActiveModel::StrictValidationFailed, message
raise ActiveModel::StrictValidationFailed, full_message(attribute, message)
end
self[attribute] << message

View file

@ -1,7 +1,6 @@
require 'active_support/core_ext/hash/slice'
module ActiveModel
# == Active Model validates method
module Validations
module ClassMethods
@ -101,11 +100,11 @@ module ActiveModel
end
end
# This method is used to define validation that can not be corrected by end user
# and is considered exceptional.
# So each validator defined with bang or <tt>:strict</tt> option set to <tt>true</tt>
# will always raise <tt>ActiveModel::InternalValidationFailed</tt> instead of adding error
# when validation fails
# This method is used to define validation that cannot be corrected by end
# user and is considered exceptional. So each validator defined with bang
# or <tt>:strict</tt> option set to <tt>true</tt> will always raise
# <tt>ActiveModel::StrictValidationFailed</tt> instead of adding error
# when validation fails.
# See <tt>validates</tt> for more information about validation itself.
def validates!(*attributes)
options = attributes.extract_options!
@ -118,7 +117,7 @@ module ActiveModel
# When creating custom validators, it might be useful to be able to specify
# additional default keys. This can be done by overwriting this method.
def _validates_default_keys
[ :if, :unless, :on, :allow_blank, :allow_nil , :strict]
[:if, :unless, :on, :allow_blank, :allow_nil , :strict]
end
def _parse_validates_options(options) #:nodoc:

View file

@ -310,7 +310,7 @@ class ValidationsTest < ActiveModel::TestCase
end
def test_strict_validation_particular_validator
Topic.validates :title, :presence => {:strict => true}
Topic.validates :title, :presence => { :strict => true }
assert_raises ActiveModel::StrictValidationFailed do
Topic.new.valid?
end
@ -330,9 +330,18 @@ class ValidationsTest < ActiveModel::TestCase
end
end
def test_strict_validation_error_message
Topic.validates :title, :strict => true, :presence => true
exception = assert_raises(ActiveModel::StrictValidationFailed) do
Topic.new.valid?
end
assert_equal "Title can't be blank", exception.message
end
def test_does_not_modify_options_argument
options = {:presence => true}
options = { :presence => true }
Topic.validates :title, options
assert_equal({:presence => true}, options)
assert_equal({ :presence => true }, options)
end
end