activemodel 3.2.3 → 3.2.4.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +1 -1
- data/README.rdoc +2 -2
- data/lib/active_model/validations.rb +14 -0
- data/lib/active_model/validations/acceptance.rb +1 -2
- data/lib/active_model/validations/confirmation.rb +1 -2
- data/lib/active_model/validations/exclusion.rb +24 -18
- data/lib/active_model/validations/format.rb +33 -22
- data/lib/active_model/validations/inclusion.rb +21 -15
- data/lib/active_model/validations/length.rb +27 -18
- data/lib/active_model/validations/numericality.rb +22 -14
- data/lib/active_model/validations/presence.rb +16 -13
- data/lib/active_model/validations/with.rb +9 -12
- data/lib/active_model/version.rb +2 -2
- metadata +27 -23
data/CHANGELOG.md
CHANGED
data/README.rdoc
CHANGED
@@ -50,7 +50,7 @@ modules:
|
|
50
50
|
This generates +before_create+, +around_create+ and +after_create+
|
51
51
|
class methods that wrap your create method.
|
52
52
|
|
53
|
-
{Learn more}[link:classes/ActiveModel/
|
53
|
+
{Learn more}[link:classes/ActiveModel/Callbacks.html]
|
54
54
|
|
55
55
|
* Tracking value changes
|
56
56
|
|
@@ -192,7 +192,7 @@ The latest version of Active Model can be installed with RubyGems:
|
|
192
192
|
|
193
193
|
Source code can be downloaded as part of the Rails project on GitHub
|
194
194
|
|
195
|
-
* https://github.com/rails/rails/tree/
|
195
|
+
* https://github.com/rails/rails/tree/3-2-stable/activemodel
|
196
196
|
|
197
197
|
|
198
198
|
== License
|
@@ -165,6 +165,20 @@ module ActiveModel
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
+
# Clean the +Errors+ object if instance is duped
|
169
|
+
def initialize_dup(other) # :nodoc:
|
170
|
+
@errors = nil
|
171
|
+
end
|
172
|
+
|
173
|
+
# Backport dup from 1.9 so that #initialize_dup gets called
|
174
|
+
unless Object.respond_to?(:initialize_dup)
|
175
|
+
def dup # :nodoc:
|
176
|
+
copy = super
|
177
|
+
copy.initialize_dup(self)
|
178
|
+
copy
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
168
182
|
# Returns the +Errors+ object that holds all information about attribute error messages.
|
169
183
|
def errors
|
170
184
|
@errors ||= Errors.new(self)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module ActiveModel
|
2
|
-
|
3
2
|
# == Active Model Acceptance Validator
|
4
3
|
module Validations
|
5
4
|
class AcceptanceValidator < EachValidator
|
@@ -59,7 +58,7 @@ module ActiveModel
|
|
59
58
|
# The method, proc or string should return or evaluate to a true or
|
60
59
|
# false value.
|
61
60
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
62
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
61
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
63
62
|
def validates_acceptance_of(*attr_names)
|
64
63
|
validates_with AcceptanceValidator, _merge_attributes(attr_names)
|
65
64
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module ActiveModel
|
2
|
-
|
3
2
|
# == Active Model Confirmation Validator
|
4
3
|
module Validations
|
5
4
|
class ConfirmationValidator < EachValidator
|
@@ -59,7 +58,7 @@ module ActiveModel
|
|
59
58
|
# <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
|
60
59
|
# method, proc or string should return or evaluate to a true or false value.
|
61
60
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
62
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
61
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
63
62
|
def validates_confirmation_of(*attr_names)
|
64
63
|
validates_with ConfirmationValidator, _merge_attributes(attr_names)
|
65
64
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/range'
|
2
2
|
|
3
3
|
module ActiveModel
|
4
|
-
|
5
4
|
# == Active Model Exclusion Validator
|
6
5
|
module Validations
|
7
6
|
class ExclusionValidator < EachValidator
|
@@ -24,43 +23,50 @@ module ActiveModel
|
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible
|
28
|
-
# range for equality, so it may be slow for large ranges. The new
|
29
|
-
# uses the previous logic of comparing a value with the
|
26
|
+
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible
|
27
|
+
# values in the range for equality, so it may be slow for large ranges. The new
|
28
|
+
# <tt>Range#cover?</tt> uses the previous logic of comparing a value with the
|
29
|
+
# range endpoints.
|
30
30
|
def inclusion_method(enumerable)
|
31
31
|
enumerable.is_a?(Range) ? :cover? : :include?
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
module HelperMethods
|
36
|
-
# Validates that the value of the specified attribute is not in a particular
|
36
|
+
# Validates that the value of the specified attribute is not in a particular
|
37
|
+
# enumerable object.
|
37
38
|
#
|
38
39
|
# class Person < ActiveRecord::Base
|
39
40
|
# validates_exclusion_of :username, :in => %w( admin superuser ), :message => "You don't belong here"
|
40
41
|
# validates_exclusion_of :age, :in => 30..60, :message => "This site is only for under 30 and over 60"
|
41
42
|
# validates_exclusion_of :format, :in => %w( mov avi ), :message => "extension %{value} is not allowed"
|
42
|
-
# validates_exclusion_of :password, :in => lambda { |p| [p.username, p.first_name] },
|
43
|
+
# validates_exclusion_of :password, :in => lambda { |p| [p.username, p.first_name] },
|
44
|
+
# :message => "should not be the same as your username or first name"
|
43
45
|
# end
|
44
46
|
#
|
45
47
|
# Configuration options:
|
46
|
-
# * <tt>:in</tt> - An enumerable object of items that the value shouldn't be
|
47
|
-
# This can be supplied as a proc or lambda which returns an enumerable.
|
48
|
-
# is a range the test is performed with <tt>Range#cover?</tt>
|
48
|
+
# * <tt>:in</tt> - An enumerable object of items that the value shouldn't be
|
49
|
+
# part of. This can be supplied as a proc or lambda which returns an enumerable.
|
50
|
+
# If the enumerable is a range the test is performed with <tt>Range#cover?</tt>
|
49
51
|
# (backported in Active Support for 1.8), otherwise with <tt>include?</tt>.
|
50
52
|
# * <tt>:message</tt> - Specifies a custom error message (default is: "is reserved").
|
51
|
-
# * <tt>:allow_nil</tt> - If set to true, skips this validation if the attribute
|
52
|
-
#
|
53
|
+
# * <tt>:allow_nil</tt> - If set to true, skips this validation if the attribute
|
54
|
+
# is +nil+ (default is +false+).
|
55
|
+
# * <tt>:allow_blank</tt> - If set to true, skips this validation if the
|
56
|
+
# attribute is blank (default is +false+).
|
53
57
|
# * <tt>:on</tt> - Specifies when this validation is active. Runs in all
|
54
58
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
55
59
|
# and <tt>:update</tt>.
|
56
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the
|
57
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
60
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the
|
61
|
+
# validation should occur (e.g. <tt>:if => :allow_validation</tt>, or
|
62
|
+
# <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
63
|
+
# or string should return or evaluate to a true or false value.
|
64
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if
|
65
|
+
# the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
66
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
67
|
+
# proc or string should return or evaluate to a true or false value.
|
62
68
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
63
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
69
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
64
70
|
def validates_exclusion_of(*attr_names)
|
65
71
|
validates_with ExclusionValidator, _merge_attributes(attr_names)
|
66
72
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module ActiveModel
|
2
|
-
|
3
2
|
# == Active Model Format Validator
|
4
3
|
module Validations
|
5
4
|
class FormatValidator < EachValidator
|
@@ -42,50 +41,62 @@ module ActiveModel
|
|
42
41
|
end
|
43
42
|
|
44
43
|
module HelperMethods
|
45
|
-
# Validates whether the value of the specified attribute is of the correct form,
|
46
|
-
# You can require that the attribute
|
44
|
+
# Validates whether the value of the specified attribute is of the correct form,
|
45
|
+
# going by the regular expression provided. You can require that the attribute
|
46
|
+
# matches the regular expression:
|
47
47
|
#
|
48
48
|
# class Person < ActiveRecord::Base
|
49
49
|
# validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
|
50
50
|
# end
|
51
51
|
#
|
52
|
-
# Alternatively, you can require that the specified attribute does _not_ match
|
52
|
+
# Alternatively, you can require that the specified attribute does _not_ match
|
53
|
+
# the regular expression:
|
53
54
|
#
|
54
55
|
# class Person < ActiveRecord::Base
|
55
56
|
# validates_format_of :email, :without => /NOSPAM/
|
56
57
|
# end
|
57
58
|
#
|
58
|
-
# You can also provide a proc or lambda which will determine the regular
|
59
|
+
# You can also provide a proc or lambda which will determine the regular
|
60
|
+
# expression that will be used to validate the attribute.
|
59
61
|
#
|
60
62
|
# class Person < ActiveRecord::Base
|
61
63
|
# # Admin can have number as a first letter in their screen name
|
62
|
-
# validates_format_of :screen_name,
|
64
|
+
# validates_format_of :screen_name,
|
65
|
+
# :with => lambda{ |person| person.admin? ? /\A[a-z0-9][a-z0-9_\-]*\Z/i : /\A[a-z][a-z0-9_\-]*\Z/i }
|
63
66
|
# end
|
64
67
|
#
|
65
|
-
# Note: use <tt>\A</tt> and <tt>\Z</tt> to match the start and end of the string,
|
68
|
+
# Note: use <tt>\A</tt> and <tt>\Z</tt> to match the start and end of the string,
|
69
|
+
# <tt>^</tt> and <tt>$</tt> match the start/end of a line.
|
66
70
|
#
|
67
|
-
# You must pass either <tt>:with</tt> or <tt>:without</tt> as an option. In
|
68
|
-
# or a proc or lambda, or else an
|
71
|
+
# You must pass either <tt>:with</tt> or <tt>:without</tt> as an option. In
|
72
|
+
# addition, both must be a regular expression or a proc or lambda, or else an
|
73
|
+
# exception will be raised.
|
69
74
|
#
|
70
75
|
# Configuration options:
|
71
76
|
# * <tt>:message</tt> - A custom error message (default is: "is invalid").
|
72
|
-
# * <tt>:allow_nil</tt> - If set to true, skips this validation if the attribute
|
73
|
-
#
|
74
|
-
# * <tt>:
|
75
|
-
#
|
76
|
-
# * <tt>:
|
77
|
-
# This can be provided as a proc or lambda
|
77
|
+
# * <tt>:allow_nil</tt> - If set to true, skips this validation if the attribute
|
78
|
+
# is +nil+ (default is +false+).
|
79
|
+
# * <tt>:allow_blank</tt> - If set to true, skips this validation if the
|
80
|
+
# attribute is blank (default is +false+).
|
81
|
+
# * <tt>:with</tt> - Regular expression that if the attribute matches will
|
82
|
+
# result in a successful validation. This can be provided as a proc or lambda
|
83
|
+
# returning regular expression which will be called at runtime.
|
84
|
+
# * <tt>:without</tt> - Regular expression that if the attribute does not match
|
85
|
+
# will result in a successful validation. This can be provided as a proc or
|
86
|
+
# lambda returning regular expression which will be called at runtime.
|
78
87
|
# * <tt>:on</tt> - Specifies when this validation is active. Runs in all
|
79
88
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
80
89
|
# and <tt>:update</tt>.
|
81
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the
|
82
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
90
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the
|
91
|
+
# validation should occur (e.g. <tt>:if => :allow_validation</tt>, or
|
92
|
+
# <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
93
|
+
# or string should return or evaluate to a true or false value.
|
94
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if
|
95
|
+
# the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
96
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
97
|
+
# proc or string should return or evaluate to a true or false value.
|
87
98
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
88
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
99
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
89
100
|
def validates_format_of(*attr_names)
|
90
101
|
validates_with FormatValidator, _merge_attributes(attr_names)
|
91
102
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/range'
|
2
2
|
|
3
3
|
module ActiveModel
|
4
|
-
|
5
4
|
# == Active Model Inclusion Validator
|
6
5
|
module Validations
|
7
6
|
class InclusionValidator < EachValidator
|
@@ -24,16 +23,18 @@ module ActiveModel
|
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible
|
28
|
-
# range for equality, so it may be slow for large ranges. The new
|
29
|
-
# uses the previous logic of comparing a value with the
|
26
|
+
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible
|
27
|
+
# values in the range for equality, so it may be slow for large ranges. The new
|
28
|
+
# <tt>Range#cover?</tt> uses the previous logic of comparing a value with the
|
29
|
+
# range endpoints.
|
30
30
|
def inclusion_method(enumerable)
|
31
31
|
enumerable.is_a?(Range) ? :cover? : :include?
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
module HelperMethods
|
36
|
-
# Validates whether the value of the specified attribute is available in a
|
36
|
+
# Validates whether the value of the specified attribute is available in a
|
37
|
+
# particular enumerable object.
|
37
38
|
#
|
38
39
|
# class Person < ActiveRecord::Base
|
39
40
|
# validates_inclusion_of :gender, :in => %w( m f )
|
@@ -47,20 +48,25 @@ module ActiveModel
|
|
47
48
|
# supplied as a proc or lambda which returns an enumerable. If the enumerable
|
48
49
|
# is a range the test is performed with <tt>Range#cover?</tt>
|
49
50
|
# (backported in Active Support for 1.8), otherwise with <tt>include?</tt>.
|
50
|
-
# * <tt>:message</tt> - Specifies a custom error message (default is: "is not
|
51
|
-
#
|
52
|
-
# * <tt>:
|
51
|
+
# * <tt>:message</tt> - Specifies a custom error message (default is: "is not
|
52
|
+
# included in the list").
|
53
|
+
# * <tt>:allow_nil</tt> - If set to true, skips this validation if the attribute
|
54
|
+
# is +nil+ (default is +false+).
|
55
|
+
# * <tt>:allow_blank</tt> - If set to true, skips this validation if the
|
56
|
+
# attribute is blank (default is +false+).
|
53
57
|
# * <tt>:on</tt> - Specifies when this validation is active. Runs in all
|
54
58
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
55
59
|
# and <tt>:update</tt>.
|
56
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
57
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
60
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
61
|
+
# the validation should occur (e.g. <tt>:if => :allow_validation</tt>, or
|
62
|
+
# <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
63
|
+
# or string should return or evaluate to a true or false value.
|
64
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine
|
65
|
+
# if the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
66
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
67
|
+
# proc or string should return or evaluate to a true or false value.
|
62
68
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
63
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
69
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
64
70
|
def validates_inclusion_of(*attr_names)
|
65
71
|
validates_with InclusionValidator, _merge_attributes(attr_names)
|
66
72
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "active_support/core_ext/string/encoding"
|
2
2
|
|
3
3
|
module ActiveModel
|
4
|
-
|
5
4
|
# == Active Model Length Validator
|
6
5
|
module Validations
|
7
6
|
class LengthValidator < EachValidator
|
@@ -68,8 +67,8 @@ module ActiveModel
|
|
68
67
|
end
|
69
68
|
|
70
69
|
module HelperMethods
|
71
|
-
|
72
|
-
#
|
70
|
+
# Validates that the specified attribute matches the length restrictions supplied.
|
71
|
+
# Only one option can be used at a time:
|
73
72
|
#
|
74
73
|
# class Person < ActiveRecord::Base
|
75
74
|
# validates_length_of :first_name, :maximum => 30
|
@@ -79,35 +78,45 @@ module ActiveModel
|
|
79
78
|
# validates_length_of :user_name, :within => 6..20, :too_long => "pick a shorter name", :too_short => "pick a longer name"
|
80
79
|
# validates_length_of :zip_code, :minimum => 5, :too_short => "please enter at least 5 characters"
|
81
80
|
# validates_length_of :smurf_leader, :is => 4, :message => "papa is spelled with 4 characters... don't play me."
|
82
|
-
# validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least 100 words.",
|
81
|
+
# validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least 100 words.",
|
82
|
+
# :tokenizer => lambda { |str| str.scan(/\w+/) }
|
83
83
|
# end
|
84
84
|
#
|
85
85
|
# Configuration options:
|
86
86
|
# * <tt>:minimum</tt> - The minimum size of the attribute.
|
87
87
|
# * <tt>:maximum</tt> - The maximum size of the attribute.
|
88
88
|
# * <tt>:is</tt> - The exact size of the attribute.
|
89
|
-
# * <tt>:within</tt> - A range specifying the minimum and maximum size of the
|
89
|
+
# * <tt>:within</tt> - A range specifying the minimum and maximum size of the
|
90
|
+
# attribute.
|
90
91
|
# * <tt>:in</tt> - A synonym(or alias) for <tt>:within</tt>.
|
91
92
|
# * <tt>:allow_nil</tt> - Attribute may be +nil+; skip validation.
|
92
93
|
# * <tt>:allow_blank</tt> - Attribute may be blank; skip validation.
|
93
|
-
# * <tt>:too_long</tt> - The error message if the attribute goes over the
|
94
|
-
#
|
95
|
-
# * <tt>:
|
96
|
-
#
|
94
|
+
# * <tt>:too_long</tt> - The error message if the attribute goes over the
|
95
|
+
# maximum (default is: "is too long (maximum is %{count} characters)").
|
96
|
+
# * <tt>:too_short</tt> - The error message if the attribute goes under the
|
97
|
+
# minimum (default is: "is too short (min is %{count} characters)").
|
98
|
+
# * <tt>:wrong_length</tt> - The error message if using the <tt>:is</tt> method
|
99
|
+
# and the attribute is the wrong size (default is: "is the wrong length
|
100
|
+
# should be %{count} characters)").
|
101
|
+
# * <tt>:message</tt> - The error message to use for a <tt>:minimum</tt>,
|
102
|
+
# <tt>:maximum</tt>, or <tt>:is</tt> violation. An alias of the appropriate
|
103
|
+
# <tt>too_long</tt>/<tt>too_short</tt>/<tt>wrong_length</tt> message.
|
97
104
|
# * <tt>:on</tt> - Specifies when this validation is active. Runs in all
|
98
105
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
99
106
|
# and <tt>:update</tt>.
|
100
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
101
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
107
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
108
|
+
# the validation should occur (e.g. <tt>:if => :allow_validation</tt>, or
|
109
|
+
# <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
110
|
+
# or string should return or evaluate to a true or false value.
|
111
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine
|
112
|
+
# if the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
113
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
|
105
114
|
# method, proc or string should return or evaluate to a true or false value.
|
106
|
-
# * <tt>:tokenizer</tt> - Specifies how to split up the attribute string.
|
107
|
-
#
|
108
|
-
# Defaults to <tt>lambda{ |value| value.split(//) }</tt> which counts individual characters.
|
115
|
+
# * <tt>:tokenizer</tt> - Specifies how to split up the attribute string.
|
116
|
+
# (e.g. <tt>:tokenizer => lambda {|str| str.scan(/\w+/)}</tt> to count words
|
117
|
+
# as in above example). Defaults to <tt>lambda{ |value| value.split(//) }</tt> which counts individual characters.
|
109
118
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
110
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
119
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
111
120
|
def validates_length_of(*attr_names)
|
112
121
|
validates_with LengthValidator, _merge_attributes(attr_names)
|
113
122
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module ActiveModel
|
2
|
-
|
3
2
|
# == Active Model Numericality Validator
|
4
3
|
module Validations
|
5
4
|
class NumericalityValidator < EachValidator
|
@@ -93,22 +92,30 @@ module ActiveModel
|
|
93
92
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
94
93
|
# and <tt>:update</tt>.
|
95
94
|
# * <tt>:only_integer</tt> - Specifies whether the value has to be an integer, e.g. an integral value (default is +false+).
|
96
|
-
# * <tt>:allow_nil</tt> - Skip validation if attribute is +nil+ (default is
|
97
|
-
#
|
98
|
-
#
|
95
|
+
# * <tt>:allow_nil</tt> - Skip validation if attribute is +nil+ (default is
|
96
|
+
# +false+). Notice that for fixnum and float columns empty strings are
|
97
|
+
# converted to +nil+.
|
98
|
+
# * <tt>:greater_than</tt> - Specifies the value must be greater than the
|
99
|
+
# supplied value.
|
100
|
+
# * <tt>:greater_than_or_equal_to</tt> - Specifies the value must be greater
|
101
|
+
# than or equal the supplied value.
|
99
102
|
# * <tt>:equal_to</tt> - Specifies the value must be equal to the supplied value.
|
100
|
-
# * <tt>:less_than</tt> - Specifies the value must be less than the supplied
|
101
|
-
#
|
103
|
+
# * <tt>:less_than</tt> - Specifies the value must be less than the supplied
|
104
|
+
# value.
|
105
|
+
# * <tt>:less_than_or_equal_to</tt> - Specifies the value must be less than
|
106
|
+
# or equal the supplied value.
|
102
107
|
# * <tt>:odd</tt> - Specifies the value must be an odd number.
|
103
108
|
# * <tt>:even</tt> - Specifies the value must be an even number.
|
104
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine
|
105
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>,
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
109
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine
|
110
|
+
# if the validation should occur (e.g. <tt>:if => :allow_validation</tt>,
|
111
|
+
# or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method,
|
112
|
+
# proc or string should return or evaluate to a true or false value.
|
113
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine
|
114
|
+
# if the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
115
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
116
|
+
# proc or string should return or evaluate to a true or false value.
|
110
117
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
111
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
118
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
112
119
|
#
|
113
120
|
# The following checks can also be supplied with a proc or a symbol which corresponds to a method:
|
114
121
|
# * <tt>:greater_than</tt>
|
@@ -117,11 +124,12 @@ module ActiveModel
|
|
117
124
|
# * <tt>:less_than</tt>
|
118
125
|
# * <tt>:less_than_or_equal_to</tt>
|
119
126
|
#
|
127
|
+
# For example:
|
128
|
+
#
|
120
129
|
# class Person < ActiveRecord::Base
|
121
130
|
# validates_numericality_of :width, :less_than => Proc.new { |person| person.height }
|
122
131
|
# validates_numericality_of :width, :greater_than => :minimum_weight
|
123
132
|
# end
|
124
|
-
#
|
125
133
|
def validates_numericality_of(*attr_names)
|
126
134
|
validates_with NumericalityValidator, _merge_attributes(attr_names)
|
127
135
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/object/blank'
|
2
2
|
|
3
3
|
module ActiveModel
|
4
|
-
|
5
4
|
# == Active Model Presence Validator
|
6
5
|
module Validations
|
7
6
|
class PresenceValidator < EachValidator
|
@@ -11,7 +10,8 @@ module ActiveModel
|
|
11
10
|
end
|
12
11
|
|
13
12
|
module HelperMethods
|
14
|
-
# Validates that the specified attributes are not blank (as defined by
|
13
|
+
# Validates that the specified attributes are not blank (as defined by
|
14
|
+
# Object#blank?). Happens by default on save. Example:
|
15
15
|
#
|
16
16
|
# class Person < ActiveRecord::Base
|
17
17
|
# validates_presence_of :first_name
|
@@ -19,25 +19,28 @@ module ActiveModel
|
|
19
19
|
#
|
20
20
|
# The first_name attribute must be in the object and it cannot be blank.
|
21
21
|
#
|
22
|
-
# If you want to validate the presence of a boolean field (where the real values
|
23
|
-
# you will want to use <tt>validates_inclusion_of :field_name,
|
22
|
+
# If you want to validate the presence of a boolean field (where the real values
|
23
|
+
# are true and false), you will want to use <tt>validates_inclusion_of :field_name,
|
24
|
+
# :in => [true, false]</tt>.
|
24
25
|
#
|
25
|
-
# This is due to the way Object#blank? handles boolean values:
|
26
|
+
# This is due to the way Object#blank? handles boolean values:
|
27
|
+
# <tt>false.blank? # => true</tt>.
|
26
28
|
#
|
27
29
|
# Configuration options:
|
28
30
|
# * <tt>:message</tt> - A custom error message (default is: "can't be blank").
|
29
31
|
# * <tt>:on</tt> - Specifies when this validation is active. Runs in all
|
30
32
|
# validation contexts by default (+nil+), other options are <tt>:create</tt>
|
31
33
|
# and <tt>:update</tt>.
|
32
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
33
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
34
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
|
35
|
+
# the validation should occur (e.g. <tt>:if => :allow_validation</tt>, or
|
36
|
+
# <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
37
|
+
# or string should return or evaluate to a true or false value.
|
38
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine
|
39
|
+
# if the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
40
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
41
|
+
# proc or string should return or evaluate to a true or false value.
|
38
42
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
39
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
40
|
-
#
|
43
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
41
44
|
def validates_presence_of(*attr_names)
|
42
45
|
validates_with PresenceValidator, _merge_attributes(attr_names)
|
43
46
|
end
|
@@ -54,15 +54,14 @@ module ActiveModel
|
|
54
54
|
# (<tt>:create</tt> or <tt>:update</tt>
|
55
55
|
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine
|
56
56
|
# if the validation should occur (e.g. <tt>:if => :allow_validation</tt>,
|
57
|
-
# or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>).
|
58
|
-
#
|
59
|
-
# * <tt>:unless</tt> - Specifies a method, proc or string to call to
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
# The method, proc or string should return or evaluate to a true or false value.
|
57
|
+
# or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method,
|
58
|
+
# proc or string should return or evaluate to a true or false value.
|
59
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine
|
60
|
+
# if the validation should not occur (e.g. <tt>:unless => :skip_validation</tt>,
|
61
|
+
# or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The method,
|
62
|
+
# proc or string should return or evaluate to a true or false value.
|
64
63
|
# * <tt>:strict</tt> - Specifies whether validation should be strict.
|
65
|
-
# See <tt>ActiveModel::Validation#validates!</tt> for more information
|
64
|
+
# See <tt>ActiveModel::Validation#validates!</tt> for more information.
|
66
65
|
|
67
66
|
# If you pass any additional configuration options, they will be passed
|
68
67
|
# to the class and available as <tt>options</tt>:
|
@@ -77,7 +76,6 @@ module ActiveModel
|
|
77
76
|
# options[:my_custom_key] # => "my custom value"
|
78
77
|
# end
|
79
78
|
# end
|
80
|
-
#
|
81
79
|
def validates_with(*args, &block)
|
82
80
|
options = args.extract_options!
|
83
81
|
args.each do |klass|
|
@@ -128,12 +126,11 @@ module ActiveModel
|
|
128
126
|
# Standard configuration options (:on, :if and :unless), which are
|
129
127
|
# available on the class version of validates_with, should instead be
|
130
128
|
# placed on the <tt>validates</tt> method as these are applied and tested
|
131
|
-
# in the callback
|
129
|
+
# in the callback.
|
132
130
|
#
|
133
131
|
# If you pass any additional configuration options, they will be passed
|
134
132
|
# to the class and available as <tt>options</tt>, please refer to the
|
135
|
-
# class version of this method for more information
|
136
|
-
#
|
133
|
+
# class version of this method for more information.
|
137
134
|
def validates_with(*args, &block)
|
138
135
|
options = args.extract_options!
|
139
136
|
args.each do |klass|
|
data/lib/active_model/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 4070160679
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
|
9
|
+
- 4
|
10
|
+
- rc
|
11
|
+
- 1
|
12
|
+
version: 3.2.4.rc1
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- David Heinemeier Hansson
|
@@ -15,27 +17,30 @@ autorequire:
|
|
15
17
|
bindir: bin
|
16
18
|
cert_chain: []
|
17
19
|
|
18
|
-
date: 2012-
|
19
|
-
default_executable:
|
20
|
+
date: 2012-05-28 00:00:00 Z
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
+
name: activesupport
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
26
|
none: false
|
24
27
|
requirements:
|
25
28
|
- - "="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
hash:
|
30
|
+
hash: 4070160679
|
28
31
|
segments:
|
29
32
|
- 3
|
30
33
|
- 2
|
31
|
-
-
|
32
|
-
|
33
|
-
|
34
|
+
- 4
|
35
|
+
- rc
|
36
|
+
- 1
|
37
|
+
version: 3.2.4.rc1
|
34
38
|
type: :runtime
|
35
|
-
|
36
|
-
prerelease: false
|
39
|
+
version_requirements: *id001
|
37
40
|
- !ruby/object:Gem::Dependency
|
38
|
-
|
41
|
+
name: builder
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
44
|
none: false
|
40
45
|
requirements:
|
41
46
|
- - ~>
|
@@ -46,10 +51,8 @@ dependencies:
|
|
46
51
|
- 0
|
47
52
|
- 0
|
48
53
|
version: 3.0.0
|
49
|
-
requirement: *id002
|
50
54
|
type: :runtime
|
51
|
-
|
52
|
-
prerelease: false
|
55
|
+
version_requirements: *id002
|
53
56
|
description: A toolkit for building modeling frameworks like Active Record and Active Resource. Rich support for attributes, callbacks, validations, observers, serialization, internationalization, and testing.
|
54
57
|
email: david@loudthinking.com
|
55
58
|
executables: []
|
@@ -97,7 +100,6 @@ files:
|
|
97
100
|
- lib/active_model/validator.rb
|
98
101
|
- lib/active_model/version.rb
|
99
102
|
- lib/active_model.rb
|
100
|
-
has_rdoc: true
|
101
103
|
homepage: http://www.rubyonrails.org
|
102
104
|
licenses: []
|
103
105
|
|
@@ -120,16 +122,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
123
|
none: false
|
122
124
|
requirements:
|
123
|
-
- - "
|
125
|
+
- - ">"
|
124
126
|
- !ruby/object:Gem::Version
|
125
|
-
hash:
|
127
|
+
hash: 25
|
126
128
|
segments:
|
127
|
-
-
|
128
|
-
|
129
|
+
- 1
|
130
|
+
- 3
|
131
|
+
- 1
|
132
|
+
version: 1.3.1
|
129
133
|
requirements: []
|
130
134
|
|
131
135
|
rubyforge_project:
|
132
|
-
rubygems_version: 1.
|
136
|
+
rubygems_version: 1.8.22
|
133
137
|
signing_key:
|
134
138
|
specification_version: 3
|
135
139
|
summary: A toolkit for building modeling frameworks (part of Rails).
|