dm-validations 1.1.0 → 1.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -8
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/dm-validations.gemspec +29 -139
- data/lib/dm-validations.rb +51 -103
- data/lib/dm-validations/auto_validate.rb +104 -61
- data/lib/dm-validations/context.rb +66 -0
- data/lib/dm-validations/contextual_validators.rb +164 -53
- data/lib/dm-validations/formats/email.rb +41 -23
- data/lib/dm-validations/formats/url.rb +6 -1
- data/lib/dm-validations/support/object.rb +13 -0
- data/lib/dm-validations/validation_errors.rb +27 -19
- data/lib/dm-validations/validators/absent_field_validator.rb +11 -11
- data/lib/dm-validations/validators/acceptance_validator.rb +15 -13
- data/lib/dm-validations/validators/block_validator.rb +12 -11
- data/lib/dm-validations/validators/confirmation_validator.rb +23 -16
- data/lib/dm-validations/validators/format_validator.rb +45 -23
- data/lib/dm-validations/validators/generic_validator.rb +85 -38
- data/lib/dm-validations/validators/length_validator.rb +61 -26
- data/lib/dm-validations/validators/method_validator.rb +13 -17
- data/lib/dm-validations/validators/numeric_validator.rb +35 -35
- data/lib/dm-validations/validators/primitive_validator.rb +11 -12
- data/lib/dm-validations/validators/required_field_validator.rb +11 -13
- data/lib/dm-validations/validators/uniqueness_validator.rb +15 -14
- data/lib/dm-validations/validators/within_validator.rb +30 -12
- data/spec/fixtures/bill_of_landing.rb +5 -0
- data/spec/fixtures/llama_spaceship.rb +15 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +10 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +6 -2
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +6 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +5 -2
- data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +13 -5
- data/spec/integration/format_validator/url_format_validator_spec.rb +28 -2
- data/spec/integration/required_field_validator/association_spec.rb +5 -1
- data/spec/public/resource_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/contextual_validators/emptiness_spec.rb +10 -10
- data/spec/unit/contextual_validators/execution_spec.rb +4 -4
- data/spec/unit/validators/within_validator_spec.rb +23 -0
- metadata +81 -146
- data/lib/dm-validations/support/context.rb +0 -93
@@ -7,7 +7,12 @@ module DataMapper
|
|
7
7
|
|
8
8
|
def self.included(base)
|
9
9
|
DataMapper::Validations::FormatValidator::FORMATS.merge!(
|
10
|
-
:email_address => [
|
10
|
+
:email_address => [
|
11
|
+
EmailAddress,
|
12
|
+
lambda { |field, value|
|
13
|
+
'%s is not a valid email address'.t(value)
|
14
|
+
}
|
15
|
+
]
|
11
16
|
)
|
12
17
|
end
|
13
18
|
|
@@ -17,28 +22,41 @@ module DataMapper
|
|
17
22
|
# 99% of the time you do not want to allow these email addresses
|
18
23
|
# in a public web application.
|
19
24
|
EmailAddress = begin
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
25
|
+
if (RUBY_VERSION == '1.9.2' && RUBY_ENGINE == 'jruby' && JRUBY_VERSION <= '1.6.3') || RUBY_VERSION == '1.9.3'
|
26
|
+
# There is an obscure bug in jruby 1.6 that prevents matching
|
27
|
+
# on unicode properties here. Remove this logic branch once
|
28
|
+
# a stable jruby release fixes this.
|
29
|
+
#
|
30
|
+
# http://jira.codehaus.org/browse/JRUBY-5622
|
31
|
+
#
|
32
|
+
# There is a similar bug in preview releases of 1.9.3
|
33
|
+
#
|
34
|
+
# http://redmine.ruby-lang.org/issues/5126
|
35
|
+
letter = 'a-zA-Z'
|
36
|
+
else
|
37
|
+
letter = 'a-zA-Z\p{L}' # Changed from RFC2822 to include unicode chars
|
38
|
+
end
|
39
|
+
digit = '0-9'
|
40
|
+
atext = "[#{letter}#{digit}\!\#\$\%\&\'\*+\/\=\?\^\_\`\{\|\}\~\-]"
|
41
|
+
dot_atom_text = "#{atext}+([.]#{atext}*)+"
|
42
|
+
dot_atom = dot_atom_text
|
43
|
+
no_ws_ctl = '\x01-\x08\x11\x12\x14-\x1f\x7f'
|
44
|
+
qtext = "[^#{no_ws_ctl}\\x0d\\x22\\x5c]" # Non-whitespace, non-control character except for \ and "
|
45
|
+
text = '[\x01-\x09\x11\x12\x14-\x7f]'
|
46
|
+
quoted_pair = "(\\x5c#{text})"
|
47
|
+
qcontent = "(?:#{qtext}|#{quoted_pair})"
|
48
|
+
quoted_string = "[\"]#{qcontent}+[\"]"
|
49
|
+
atom = "#{atext}+"
|
50
|
+
word = "(?:#{atom}|#{quoted_string})"
|
51
|
+
obs_local_part = "#{word}([.]#{word})*"
|
52
|
+
local_part = "(?:#{dot_atom}|#{quoted_string}|#{obs_local_part})"
|
53
|
+
dtext = "[#{no_ws_ctl}\\x21-\\x5a\\x5e-\\x7e]"
|
54
|
+
dcontent = "(?:#{dtext}|#{quoted_pair})"
|
55
|
+
domain_literal = "\\[#{dcontent}+\\]"
|
56
|
+
obs_domain = "#{atom}([.]#{atom})+"
|
57
|
+
domain = "(?:#{dot_atom}|#{domain_literal}|#{obs_domain})"
|
58
|
+
addr_spec = "#{local_part}\@#{domain}"
|
59
|
+
pattern = /\A#{addr_spec}\z/u
|
42
60
|
end
|
43
61
|
|
44
62
|
end # module Email
|
@@ -7,7 +7,12 @@ module DataMapper
|
|
7
7
|
|
8
8
|
def self.included(base)
|
9
9
|
DataMapper::Validations::FormatValidator::FORMATS.merge!(
|
10
|
-
:url => [
|
10
|
+
:url => [
|
11
|
+
Url,
|
12
|
+
lambda { |field, value|
|
13
|
+
'%s is not a valid URL'.t(value)
|
14
|
+
}
|
15
|
+
]
|
11
16
|
)
|
12
17
|
end
|
13
18
|
|
@@ -1,4 +1,17 @@
|
|
1
1
|
class Object
|
2
|
+
# If receiver is callable, calls it and returns result.
|
3
|
+
# If not, just returns receiver itself
|
4
|
+
#
|
5
|
+
# @return [Object]
|
6
|
+
# @api private
|
7
|
+
def try_call(*args)
|
8
|
+
if self.respond_to?(:call)
|
9
|
+
self.call(*args)
|
10
|
+
else
|
11
|
+
self
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
2
15
|
def validatable?
|
3
16
|
false
|
4
17
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
3
|
#
|
6
4
|
# @author Guy van den Berg
|
7
5
|
# @since 0.9
|
@@ -56,24 +54,31 @@ module DataMapper
|
|
56
54
|
errors.clear
|
57
55
|
end
|
58
56
|
|
59
|
-
# Add a validation error. Use the field_name :general if the errors
|
60
|
-
# not apply to a specific field of the Resource.
|
57
|
+
# Add a validation error. Use the field_name :general if the errors
|
58
|
+
# does not apply to a specific field of the Resource.
|
59
|
+
#
|
60
|
+
# @param [Symbol] field_name
|
61
|
+
# The name of the field that caused the error
|
61
62
|
#
|
62
|
-
# @param [
|
63
|
-
#
|
63
|
+
# @param [String] message
|
64
|
+
# The message to add
|
64
65
|
def add(field_name, message)
|
65
66
|
# see 6abe8fff in extlib, but don't enforce
|
66
67
|
# it unless Edge version is installed
|
67
68
|
if message.respond_to?(:try_call)
|
68
|
-
|
69
69
|
# DM resource
|
70
|
-
message = if resource.respond_to?(:model) &&
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
70
|
+
message = if (resource.respond_to?(:model) &&
|
71
|
+
resource.model.respond_to?(:properties))
|
72
|
+
message.try_call(
|
73
|
+
resource,
|
74
|
+
resource.model.properties[field_name]
|
75
|
+
)
|
76
|
+
else
|
77
|
+
# pure Ruby object
|
78
|
+
message.try_call(resource)
|
79
|
+
end
|
76
80
|
end
|
81
|
+
|
77
82
|
(errors[field_name] ||= []) << message
|
78
83
|
end
|
79
84
|
|
@@ -86,18 +91,20 @@ module DataMapper
|
|
86
91
|
|
87
92
|
# Return validation errors for a particular field_name.
|
88
93
|
#
|
89
|
-
# @param [Symbol] field_name
|
94
|
+
# @param [Symbol] field_name
|
95
|
+
# The name of the field you want an error for.
|
96
|
+
#
|
90
97
|
# @return [Array<DataMapper::Validations::Error>]
|
91
|
-
#
|
98
|
+
# Array of validation errors or empty array, if there are no errors
|
99
|
+
# on given field
|
92
100
|
def on(field_name)
|
93
101
|
errors_for_field = errors[field_name]
|
94
102
|
DataMapper::Ext.blank?(errors_for_field) ? nil : errors_for_field.uniq
|
95
103
|
end
|
96
104
|
|
97
105
|
def each
|
98
|
-
errors.
|
99
|
-
|
100
|
-
yield(v)
|
106
|
+
errors.each_value do |v|
|
107
|
+
yield(v) unless DataMapper::Ext.blank?(v)
|
101
108
|
end
|
102
109
|
end
|
103
110
|
|
@@ -114,12 +121,13 @@ module DataMapper
|
|
114
121
|
end
|
115
122
|
|
116
123
|
def [](property_name)
|
117
|
-
if property_errors = errors[property_name.to_sym]
|
124
|
+
if (property_errors = errors[property_name.to_sym])
|
118
125
|
property_errors
|
119
126
|
end
|
120
127
|
end
|
121
128
|
|
122
129
|
private
|
130
|
+
|
123
131
|
def errors
|
124
132
|
@errors
|
125
133
|
end
|
@@ -1,29 +1,31 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
3
|
#
|
6
4
|
# @author Guy van den Berg
|
7
5
|
# @since 0.9
|
8
6
|
class AbsenceValidator < GenericValidator
|
7
|
+
|
9
8
|
def call(target)
|
10
9
|
value = target.validation_property_value(field_name)
|
11
10
|
return true if DataMapper::Ext.blank?(value)
|
12
11
|
|
13
|
-
error_message =
|
14
|
-
|
12
|
+
error_message = (
|
13
|
+
self.options[:message] || ValidationErrors.default_error_message(
|
14
|
+
:absent, field_name
|
15
|
+
)
|
16
|
+
)
|
15
17
|
|
18
|
+
add_error(target, error_message, field_name)
|
16
19
|
false
|
17
20
|
end
|
21
|
+
|
18
22
|
end # class AbsenceValidator
|
19
23
|
|
20
24
|
module ValidatesAbsence
|
21
|
-
|
22
25
|
extend Deprecate
|
23
26
|
|
24
|
-
|
25
|
-
#
|
26
|
-
# #blank? method.
|
27
|
+
# Validates that the specified attribute is "blank" via the
|
28
|
+
# attribute's #blank? method.
|
27
29
|
#
|
28
30
|
# @note
|
29
31
|
# dm-core's support lib adds the #blank? method to many classes,
|
@@ -47,12 +49,10 @@ module DataMapper
|
|
47
49
|
# end
|
48
50
|
#
|
49
51
|
def validates_absence_of(*fields)
|
50
|
-
|
51
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::AbsenceValidator)
|
52
|
+
validators.add(AbsenceValidator, *fields)
|
52
53
|
end
|
53
54
|
|
54
55
|
deprecate :validates_absent, :validates_absence_of
|
55
|
-
|
56
56
|
end # module ValidatesAbsent
|
57
57
|
end # module Validations
|
58
58
|
end # module DataMapper
|
@@ -1,8 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
|
-
#
|
6
3
|
# @author Martin Kihlgren
|
7
4
|
# @since 0.9
|
8
5
|
class AcceptanceValidator < GenericValidator
|
@@ -19,7 +16,11 @@ module DataMapper
|
|
19
16
|
def call(target)
|
20
17
|
return true if valid?(target)
|
21
18
|
|
22
|
-
error_message =
|
19
|
+
error_message = (
|
20
|
+
@options[:message] || ValidationErrors.default_error_message(
|
21
|
+
:accepted, field_name
|
22
|
+
)
|
23
|
+
)
|
23
24
|
add_error(target, error_message, field_name)
|
24
25
|
|
25
26
|
false
|
@@ -36,20 +37,22 @@ module DataMapper
|
|
36
37
|
def allow_nil?(value)
|
37
38
|
@options[:allow_nil] && value.nil?
|
38
39
|
end
|
40
|
+
|
39
41
|
end # class AcceptanceValidator
|
40
42
|
|
41
43
|
module ValidatesAcceptance
|
42
44
|
extend Deprecate
|
43
45
|
|
44
|
-
|
45
|
-
#
|
46
|
+
# Validates that the attributes's value is in the set of accepted
|
47
|
+
# values.
|
48
|
+
#
|
49
|
+
# @option [Boolean] :allow_nil (true)
|
50
|
+
# true if nil is allowed, false if not allowed.
|
46
51
|
#
|
47
|
-
# @option :
|
48
|
-
#
|
49
|
-
# @option :accept<Array> a list of accepted values.
|
50
|
-
# Default are ["1", 1, "true", true, "t"]).
|
52
|
+
# @option [Array] :accept (["1", 1, "true", true, "t"])
|
53
|
+
# A list of accepted values.
|
51
54
|
#
|
52
|
-
# @example
|
55
|
+
# @example Usage
|
53
56
|
# require 'dm-validations'
|
54
57
|
#
|
55
58
|
# class Page
|
@@ -66,8 +69,7 @@ module DataMapper
|
|
66
69
|
# # terms_accepted is one of ["1", 1, "true", true, "t"]
|
67
70
|
#
|
68
71
|
def validates_acceptance_of(*fields)
|
69
|
-
|
70
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::AcceptanceValidator)
|
72
|
+
validators.add(AcceptanceValidator, *fields)
|
71
73
|
end
|
72
74
|
|
73
75
|
deprecate :validates_is_accepted, :validates_acceptance_of
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
|
-
#
|
6
3
|
# @author teamon
|
7
4
|
# @since 0.9
|
8
5
|
module ValidatesWithBlock
|
9
|
-
|
10
|
-
##
|
11
6
|
# Validate using the given block. The block given needs to return:
|
12
7
|
# [result::<Boolean>, Error Message::<String>]
|
13
8
|
#
|
@@ -46,15 +41,21 @@ module DataMapper
|
|
46
41
|
def validates_with_block(*fields, &block)
|
47
42
|
@__validates_with_block_count ||= 0
|
48
43
|
@__validates_with_block_count += 1
|
44
|
+
|
49
45
|
# create method and pass it to MethodValidator
|
50
|
-
|
46
|
+
unless block_given?
|
47
|
+
raise ArgumentError, 'You need to pass a block to validates_with_block method'
|
48
|
+
end
|
49
|
+
|
51
50
|
method_name = "__validates_with_block_#{@__validates_with_block_count}".to_sym
|
52
|
-
define_method(method_name, block)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
define_method(method_name, &block)
|
52
|
+
|
53
|
+
options = fields.last.is_a?(Hash) ? fields.last.pop.dup : {}
|
54
|
+
options[:method] = method_name
|
55
|
+
fields = [method_name] if fields.empty?
|
57
56
|
|
57
|
+
validators.add(MethodValidator, *fields + [options])
|
58
|
+
end
|
58
59
|
end # module ValidatesWithMethod
|
59
60
|
end # module Validations
|
60
61
|
end # module DataMapper
|
@@ -1,9 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module DataMapper
|
3
3
|
module Validations
|
4
|
-
|
5
|
-
##
|
6
|
-
#
|
7
4
|
# @author Guy van den Berg
|
8
5
|
# @since 0.9
|
9
6
|
class ConfirmationValidator < GenericValidator
|
@@ -13,13 +10,19 @@ module DataMapper
|
|
13
10
|
|
14
11
|
set_optional_by_default
|
15
12
|
|
16
|
-
@confirm_field_name
|
13
|
+
@confirm_field_name = (
|
14
|
+
options[:confirm] || "#{field_name}_confirmation"
|
15
|
+
).to_sym
|
17
16
|
end
|
18
17
|
|
19
18
|
def call(target)
|
20
19
|
return true if valid?(target)
|
21
20
|
|
22
|
-
error_message =
|
21
|
+
error_message = (
|
22
|
+
@options[:message] || ValidationErrors.default_error_message(
|
23
|
+
:confirmation, field_name
|
24
|
+
)
|
25
|
+
)
|
23
26
|
add_error(target, error_message, field_name)
|
24
27
|
|
25
28
|
false
|
@@ -38,23 +41,28 @@ module DataMapper
|
|
38
41
|
confirm_value = target.instance_variable_get("@#{@confirm_field_name}")
|
39
42
|
value == confirm_value
|
40
43
|
end
|
44
|
+
|
41
45
|
end # class ConfirmationValidator
|
42
46
|
|
43
47
|
module ValidatesConfirmation
|
44
48
|
extend Deprecate
|
45
49
|
|
46
50
|
##
|
47
|
-
# Validates that the given attribute is confirmed by another
|
48
|
-
# A common use case scenario is when you require a user to
|
49
|
-
# password, for which you use both password and
|
50
|
-
# attributes.
|
51
|
+
# Validates that the given attribute is confirmed by another
|
52
|
+
# attribute. A common use case scenario is when you require a user to
|
53
|
+
# confirm their password, for which you use both password and
|
54
|
+
# password_confirmation attributes.
|
55
|
+
#
|
56
|
+
# @option [Boolean] :allow_nil (true)
|
57
|
+
# true or false.
|
58
|
+
#
|
59
|
+
# @option [Boolean] :allow_blank (true)
|
60
|
+
# true or false.
|
51
61
|
#
|
52
|
-
# @option :
|
53
|
-
#
|
54
|
-
# @option :confirm<Symbol> the attribute that you want to validate
|
55
|
-
# against (default is firstattr_confirmation)
|
62
|
+
# @option [Symbol] :confirm (firstattr_confirmation)
|
63
|
+
# The attribute that you want to validate against.
|
56
64
|
#
|
57
|
-
# @example
|
65
|
+
# @example Usage
|
58
66
|
# require 'dm-validations'
|
59
67
|
#
|
60
68
|
# class Page
|
@@ -74,8 +82,7 @@ module DataMapper
|
|
74
82
|
# # email == email_repeated
|
75
83
|
#
|
76
84
|
def validates_confirmation_of(*fields)
|
77
|
-
|
78
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::ConfirmationValidator)
|
85
|
+
validators.add(ConfirmationValidator, *fields)
|
79
86
|
end
|
80
87
|
|
81
88
|
deprecate :validates_is_confirmed, :validates_confirmation_of
|
@@ -8,13 +8,12 @@ module DataMapper
|
|
8
8
|
module Validations
|
9
9
|
class UnknownValidationFormat < ::ArgumentError; end
|
10
10
|
|
11
|
-
##
|
12
|
-
#
|
13
11
|
# @author Guy van den Berg
|
14
12
|
# @since 0.9
|
15
13
|
class FormatValidator < GenericValidator
|
16
14
|
|
17
15
|
FORMATS = {}
|
16
|
+
|
18
17
|
include DataMapper::Validations::Format::Email
|
19
18
|
include DataMapper::Validations::Format::Url
|
20
19
|
|
@@ -29,9 +28,17 @@ module DataMapper
|
|
29
28
|
|
30
29
|
value = target.validation_property_value(field_name)
|
31
30
|
|
32
|
-
error_message =
|
33
|
-
|
34
|
-
|
31
|
+
error_message = (
|
32
|
+
@options[:message] || ValidationErrors.default_error_message(
|
33
|
+
:invalid, field_name
|
34
|
+
)
|
35
|
+
)
|
36
|
+
|
37
|
+
add_error(
|
38
|
+
target,
|
39
|
+
error_message.try_call(humanized_field_name, value),
|
40
|
+
field_name
|
41
|
+
)
|
35
42
|
false
|
36
43
|
end
|
37
44
|
|
@@ -43,37 +50,54 @@ module DataMapper
|
|
43
50
|
|
44
51
|
validation = @options[:as] || @options[:with]
|
45
52
|
|
46
|
-
|
47
|
-
|
53
|
+
if validation.is_a?(Symbol) && !FORMATS.has_key?(validation)
|
54
|
+
raise("No such predefined format '#{validation}'")
|
55
|
+
end
|
56
|
+
|
57
|
+
validator = if validation.is_a?(Symbol)
|
58
|
+
FORMATS[validation][0]
|
59
|
+
else
|
60
|
+
validation
|
61
|
+
end
|
48
62
|
|
49
63
|
case validator
|
50
64
|
when Proc then validator.call(value)
|
51
|
-
when Regexp then
|
65
|
+
when Regexp then value ? value.to_s =~ validator : false
|
52
66
|
else
|
53
|
-
raise
|
67
|
+
raise(UnknownValidationFormat, "Can't determine how to validate #{target.class}##{field_name} with #{validator.inspect}")
|
54
68
|
end
|
69
|
+
rescue Encoding::CompatibilityError
|
70
|
+
# This is to work around a bug in jruby - see formats/email.rb
|
71
|
+
false
|
55
72
|
end
|
56
|
-
end # class FormatValidator
|
57
73
|
|
74
|
+
end # class FormatValidator
|
58
75
|
|
59
76
|
module ValidatesFormat
|
60
77
|
extend Deprecate
|
61
78
|
|
62
|
-
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
79
|
+
# Validates that the attribute is in the specified format. You may
|
80
|
+
# use the :as (or :with, it's an alias) option to specify the
|
81
|
+
# pre-defined format that you want to validate against. You may also
|
82
|
+
# specify your own format via a Proc or Regexp passed to the the :as
|
83
|
+
# or :with options.
|
84
|
+
#
|
85
|
+
# @option [Boolean] :allow_nil (true)
|
86
|
+
# true or false.
|
87
|
+
#
|
88
|
+
# @option [Boolean] :allow_blank (true)
|
89
|
+
# true or false.
|
67
90
|
#
|
68
|
-
# @option
|
69
|
-
#
|
70
|
-
#
|
71
|
-
# @option
|
91
|
+
# @option [Format, Proc, Regexp] :as
|
92
|
+
# The pre-defined format, Proc or Regexp to validate against.
|
93
|
+
#
|
94
|
+
# @option [Format, Proc, Regexp] :with
|
95
|
+
# An alias for :as.
|
72
96
|
#
|
73
97
|
# :email_address (format is specified in DataMapper::Validations::Format::Email - note that unicode emails will *not* be matched under MRI1.8.7)
|
74
98
|
# :url (format is specified in DataMapper::Validations::Format::Url)
|
75
99
|
#
|
76
|
-
# @example
|
100
|
+
# @example Usage
|
77
101
|
# require 'dm-validations'
|
78
102
|
#
|
79
103
|
# class Page
|
@@ -91,12 +115,10 @@ module DataMapper
|
|
91
115
|
# # zip_code is a string of 5 digits
|
92
116
|
#
|
93
117
|
def validates_format_of(*fields)
|
94
|
-
|
95
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::FormatValidator)
|
118
|
+
validators.add(FormatValidator, *fields)
|
96
119
|
end
|
97
120
|
|
98
121
|
deprecate :validates_format, :validates_format_of
|
99
|
-
|
100
122
|
end # module ValidatesFormat
|
101
123
|
end # module Validations
|
102
124
|
end # module DataMapper
|