mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add support for namespaced validators
Includes test and documentation for new feature Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
This commit is contained in:
parent
0dc39cd8ee
commit
972011a2e5
3 changed files with 21 additions and 1 deletions
|
@ -55,6 +55,10 @@ module ActiveModel
|
|||
# validates :name, :title => true
|
||||
# end
|
||||
#
|
||||
# Additionally validator classes may be in another namespace and still used within any class.
|
||||
#
|
||||
# validates :name, :'file/title' => true
|
||||
#
|
||||
# The validators hash can also handle regular expressions, ranges,
|
||||
# arrays and strings in shortcut form, e.g.
|
||||
#
|
||||
|
@ -86,8 +90,10 @@ module ActiveModel
|
|||
defaults.merge!(:attributes => attributes)
|
||||
|
||||
validations.each do |key, options|
|
||||
key = "#{key.to_s.camelize}Validator"
|
||||
|
||||
begin
|
||||
validator = const_get("#{key.to_s.camelize}Validator")
|
||||
validator = key.include?('::') ? key.constantize : const_get(key)
|
||||
rescue NameError
|
||||
raise ArgumentError, "Unknown validator: '#{key}'"
|
||||
end
|
||||
|
|
|
@ -3,6 +3,7 @@ require 'cases/helper'
|
|||
require 'models/person'
|
||||
require 'models/person_with_validator'
|
||||
require 'validators/email_validator'
|
||||
require 'validators/namespace/email_validator'
|
||||
|
||||
class ValidatesTest < ActiveModel::TestCase
|
||||
setup :reset_callbacks
|
||||
|
@ -34,6 +35,13 @@ class ValidatesTest < ActiveModel::TestCase
|
|||
assert_equal ['is not an email'], person.errors[:karma]
|
||||
end
|
||||
|
||||
def test_validates_with_namespaced_validator_class
|
||||
Person.validates :karma, :'namespace/email' => true
|
||||
person = Person.new
|
||||
person.valid?
|
||||
assert_equal ['is not an email'], person.errors[:karma]
|
||||
end
|
||||
|
||||
def test_validates_with_if_as_local_conditions
|
||||
Person.validates :karma, :presence => true, :email => { :unless => :condition_is_true }
|
||||
person = Person.new
|
||||
|
|
6
activemodel/test/validators/namespace/email_validator.rb
Executable file
6
activemodel/test/validators/namespace/email_validator.rb
Executable file
|
@ -0,0 +1,6 @@
|
|||
require 'validators/email_validator'
|
||||
|
||||
module Namespace
|
||||
class EmailValidator < ::EmailValidator
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue