mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Provide a way to specify alternate option keys for validates
This commit is contained in:
parent
7176ade35b
commit
ed7614aa7d
3 changed files with 22 additions and 1 deletions
|
@ -81,7 +81,7 @@ module ActiveModel
|
|||
#
|
||||
def validates(*attributes)
|
||||
defaults = attributes.extract_options!
|
||||
validations = defaults.slice!(:if, :unless, :on, :allow_blank, :allow_nil)
|
||||
validations = defaults.slice!(*_validates_default_keys)
|
||||
|
||||
raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
|
||||
raise ArgumentError, "You need to supply at least one validation" if validations.empty?
|
||||
|
@ -103,6 +103,12 @@ module ActiveModel
|
|||
|
||||
protected
|
||||
|
||||
# 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 ]
|
||||
end
|
||||
|
||||
def _parse_validates_options(options) #:nodoc:
|
||||
case options
|
||||
when TrueClass
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# encoding: utf-8
|
||||
require 'cases/helper'
|
||||
require 'models/person'
|
||||
require 'models/topic'
|
||||
require 'models/person_with_validator'
|
||||
require 'validators/email_validator'
|
||||
require 'validators/namespace/email_validator'
|
||||
|
@ -11,6 +12,7 @@ class ValidatesTest < ActiveModel::TestCase
|
|||
|
||||
def reset_callbacks
|
||||
Person.reset_callbacks(:validate)
|
||||
Topic.reset_callbacks(:validate)
|
||||
PersonWithValidator.reset_callbacks(:validate)
|
||||
end
|
||||
|
||||
|
@ -139,4 +141,13 @@ class ValidatesTest < ActiveModel::TestCase
|
|||
person.valid?
|
||||
assert_equal ['does not appear to be like Mr.'], person.errors[:title]
|
||||
end
|
||||
|
||||
def test_defining_extra_default_keys_for_validates
|
||||
Topic.validates :title, :confirmation => true, :message => 'Y U NO CONFIRM'
|
||||
topic = Topic.new
|
||||
topic.title = "What's happening"
|
||||
topic.title_confirmation = "Not this"
|
||||
assert !topic.valid?
|
||||
assert_equal ['Y U NO CONFIRM'], topic.errors[:title]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,10 @@ class Topic
|
|||
include ActiveModel::Validations
|
||||
include ActiveModel::Validations::Callbacks
|
||||
|
||||
def self._validates_default_keys
|
||||
super | [ :message ]
|
||||
end
|
||||
|
||||
attr_accessor :title, :author_name, :content, :approved
|
||||
attr_accessor :after_validation_performed
|
||||
|
||||
|
|
Loading…
Reference in a new issue