mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Merge pull request #4822 from carlosantoniodasilva/strict-validation-3-2
Generate strict validation error messages with attribute name (3-2-stable)
This commit is contained in:
@@ -233,7 +233,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
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
require 'active_support/core_ext/hash/slice'
|
||||
|
||||
module ActiveModel
|
||||
|
||||
# == Active Model validates method
|
||||
module Validations
|
||||
module ClassMethods
|
||||
@@ -59,7 +58,7 @@ module ActiveModel
|
||||
#
|
||||
# validates :name, :'film/title' => true
|
||||
#
|
||||
# The validators hash can also handle regular expressions, ranges,
|
||||
# The validators hash can also handle regular expressions, ranges,
|
||||
# arrays and strings in shortcut form, e.g.
|
||||
#
|
||||
# validates :email, :format => /@/
|
||||
@@ -70,7 +69,7 @@ module ActiveModel
|
||||
# validator's initializer as +options[:in]+ while other types including
|
||||
# regular expressions and strings are passed as +options[:with]+
|
||||
#
|
||||
# Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+ and +:strict+
|
||||
# Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+ and +:strict+
|
||||
# can be given to one specific validator, as a hash:
|
||||
#
|
||||
# validates :password, :presence => { :if => :password_required? }, :confirmation => true
|
||||
@@ -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:
|
||||
|
||||
@@ -311,7 +311,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,4 +330,13 @@ class ValidationsTest < ActiveModel::TestCase
|
||||
Topic.new.valid?
|
||||
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
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user