mirror of
https://github.com/github/rails.git
synced 2026-01-09 22:58:09 -05:00
Provide a way to specify alternate option keys for validates
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user