提交 ed7614aa 编写于 作者: C Carl Lerche

Provide a way to specify alternate option keys for validates

上级 7176ade3
......@@ -81,7 +81,7 @@ module ClassMethods
#
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 @@ def validates(*attributes)
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
......
# 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 @@ def test_validates_with_included_validator_and_wildcard_shortcut
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册