aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2011-02-05 16:00:57 -0800
committerCarl Lerche <me@carllerche.com>2011-02-05 16:00:57 -0800
commited7614aa7de2eaeba16c9af11cf09b4fd7ed6819 (patch)
treea3556b1e7add54b9463edfaa40037a8385308063 /activemodel
parent7176ade35b4d6b167873991e0851f3fb9d46ae3b (diff)
downloadrails-ed7614aa7de2eaeba16c9af11cf09b4fd7ed6819.tar.gz
rails-ed7614aa7de2eaeba16c9af11cf09b4fd7ed6819.tar.bz2
rails-ed7614aa7de2eaeba16c9af11cf09b4fd7ed6819.zip
Provide a way to specify alternate option keys for validates
Diffstat (limited to 'activemodel')
-rw-r--r--activemodel/lib/active_model/validations/validates.rb8
-rw-r--r--activemodel/test/cases/validations/validates_test.rb11
-rw-r--r--activemodel/test/models/topic.rb4
3 files changed, 22 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/validations/validates.rb b/activemodel/lib/active_model/validations/validates.rb
index 172ca70c19..7ff42de00b 100644
--- a/activemodel/lib/active_model/validations/validates.rb
+++ b/activemodel/lib/active_model/validations/validates.rb
@@ -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
diff --git a/activemodel/test/cases/validations/validates_test.rb b/activemodel/test/cases/validations/validates_test.rb
index 431d2fd623..779f6c8448 100644
--- a/activemodel/test/cases/validations/validates_test.rb
+++ b/activemodel/test/cases/validations/validates_test.rb
@@ -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
diff --git a/activemodel/test/models/topic.rb b/activemodel/test/models/topic.rb
index ff34565bdb..2f0bb95071 100644
--- a/activemodel/test/models/topic.rb
+++ b/activemodel/test/models/topic.rb
@@ -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