validates_as_email_address 0.1.0 → 0.1.1
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.rdoc +5 -0
- data/Rakefile +1 -1
- data/lib/validates_as_email_address/rfc_1035.rb +4 -3
- data/test/factory.rb +5 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/validates_as_email_address_test.rb +33 -27
- metadata +2 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
== master
|
2
2
|
|
3
|
+
== 0.1.1 / 2008-10-25
|
4
|
+
|
5
|
+
* Fix major performance hit on long domains when in strict mode
|
6
|
+
* Fix single-character/digit domains not being allowed in strict mode
|
7
|
+
|
3
8
|
== 0.1.0 / 2008-09-07
|
4
9
|
|
5
10
|
* Allow all options to be passed to format/length validations so that future options can be defined without changing this plugin
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ require 'rake/contrib/sshpublisher'
|
|
5
5
|
|
6
6
|
spec = Gem::Specification.new do |s|
|
7
7
|
s.name = 'validates_as_email_address'
|
8
|
-
s.version = '0.1.
|
8
|
+
s.version = '0.1.1'
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.summary = 'Adds support for validating the format/length of email addresses'
|
11
11
|
|
@@ -2,13 +2,14 @@ module PluginAWeek #:nodoc:
|
|
2
2
|
module ValidatesAsEmailAddress
|
3
3
|
# The standard describing the format of domains
|
4
4
|
module RFC1035
|
5
|
-
# Matches domain according to the RFC 1035 standard
|
5
|
+
# Matches domain according to the RFC 1035 standard, with the exception
|
6
|
+
# that domains can start with a letter *or* digit
|
6
7
|
Domain = begin
|
7
8
|
digit = "[\\d]"
|
8
9
|
letter = "[\\x61-\\x7a\\x41-\\x5a]"
|
9
10
|
let_dig = "(?:#{letter}|#{digit})"
|
10
|
-
|
11
|
-
label = "#{let_dig}(
|
11
|
+
let_dig_hyp = "(?:#{let_dig}|[\\x2d])"
|
12
|
+
label = "#{let_dig}(?:#{let_dig_hyp}*#{let_dig})?"
|
12
13
|
subdomain = "(?:#{label}\\.)*#{label}"
|
13
14
|
domain = "(?:#{subdomain}|\\x20)"
|
14
15
|
|
data/test/factory.rb
CHANGED
@@ -13,12 +13,16 @@ module Factory
|
|
13
13
|
def valid_attributes_for(model, attributes = {})
|
14
14
|
name = model.to_s.underscore
|
15
15
|
send("#{name}_attributes", attributes)
|
16
|
+
attributes.stringify_keys!
|
16
17
|
attributes
|
17
18
|
end
|
18
19
|
|
19
20
|
# Build an unsaved record
|
20
21
|
def new_record(model, *args)
|
21
|
-
|
22
|
+
attributes = valid_attributes_for(model, *args)
|
23
|
+
record = model.new(attributes)
|
24
|
+
attributes.each {|attr, value| record.send("#{attr}=", value) if model.accessible_attributes && !model.accessible_attributes.include?(attr) || model.protected_attributes && model.protected_attributes.include?(attr)}
|
25
|
+
record
|
22
26
|
end
|
23
27
|
|
24
28
|
# Build and save/reload a record
|
data/test/test_helper.rb
CHANGED
@@ -9,10 +9,16 @@ class ValidatesAsEmailAddressByDefaultTest < Test::Unit::TestCase
|
|
9
9
|
user = new_user(:email => 'a@')
|
10
10
|
assert !user.valid?
|
11
11
|
assert_equal 2, Array(user.errors.on(:email)).size
|
12
|
+
|
13
|
+
user.email = 'a@a'
|
14
|
+
assert user.valid?
|
12
15
|
end
|
13
16
|
|
14
17
|
def test_should_not_allow_email_addresses_longer_than_320_characters
|
15
|
-
user = new_user(:email => 'a@' + 'a' *
|
18
|
+
user = new_user(:email => 'a@' + 'a' * 318)
|
19
|
+
assert user.valid?
|
20
|
+
|
21
|
+
user.email += 'a'
|
16
22
|
assert !user.valid?
|
17
23
|
assert_equal 1, Array(user.errors.on(:email)).size
|
18
24
|
end
|
@@ -45,8 +51,8 @@ class ValidatesAsEmailAddressByDefaultTest < Test::Unit::TestCase
|
|
45
51
|
def test_should_not_allow_illegal_rfc1035_formats
|
46
52
|
[
|
47
53
|
'test@[127.0.0.1]',
|
48
|
-
'test@-
|
49
|
-
'test@
|
54
|
+
'test@-domain-not-starting-with-letter.com',
|
55
|
+
'test@domain-not-ending-with-alphanum-.com'
|
50
56
|
].each do |address|
|
51
57
|
user = new_user(:email => address)
|
52
58
|
assert !user.valid?, "#{address} should be illegal."
|
@@ -66,34 +72,34 @@ class ValidatesAsEmailAddressTest < Test::Unit::TestCase
|
|
66
72
|
def test_should_allow_minimum_length
|
67
73
|
User.validates_as_email_address :email, :minimum => 8
|
68
74
|
|
69
|
-
user = new_user(:email => 'a@
|
75
|
+
user = new_user(:email => 'a@' + 'a' * 6)
|
70
76
|
assert user.valid?
|
71
77
|
|
72
|
-
user
|
78
|
+
user.email.chop!
|
73
79
|
assert !user.valid?
|
74
80
|
end
|
75
81
|
|
76
82
|
def test_should_not_check_maximum_length_if_minimum_length_defined
|
77
83
|
User.validates_as_email_address :email, :minimum => 10
|
78
84
|
|
79
|
-
user = new_user(:email => 'a@' + 'a' *
|
85
|
+
user = new_user(:email => 'a@' + 'a' * 319)
|
80
86
|
assert user.valid?
|
81
87
|
end
|
82
88
|
|
83
89
|
def test_should_allow_maximum_length
|
84
90
|
User.validates_as_email_address :email, :maximum => 8
|
85
91
|
|
86
|
-
user = new_user(:email => 'a@
|
92
|
+
user = new_user(:email => 'a@' + 'a' * 6)
|
87
93
|
assert user.valid?
|
88
94
|
|
89
|
-
user
|
95
|
+
user.email += 'a'
|
90
96
|
assert !user.valid?
|
91
97
|
end
|
92
98
|
|
93
99
|
def test_should_not_check_minimum_length_if_maximum_length_defined
|
94
100
|
User.validates_as_email_address :email, :maximum => 8
|
95
101
|
|
96
|
-
user = new_user(:email => 'a@
|
102
|
+
user = new_user(:email => 'a@')
|
97
103
|
assert !user.valid?
|
98
104
|
assert_equal 1, Array(user.errors.on(:email)).size
|
99
105
|
end
|
@@ -101,52 +107,52 @@ class ValidatesAsEmailAddressTest < Test::Unit::TestCase
|
|
101
107
|
def test_should_allow_exact_length
|
102
108
|
User.validates_as_email_address :email, :is => 8
|
103
109
|
|
104
|
-
user = new_user(:email => 'a@
|
110
|
+
user = new_user(:email => 'a@' + 'a' * 6)
|
105
111
|
assert user.valid?
|
106
112
|
|
107
|
-
user
|
113
|
+
user.email.chop!
|
108
114
|
assert !user.valid?
|
109
115
|
|
110
|
-
user
|
116
|
+
user.email += 'aa'
|
111
117
|
assert !user.valid?
|
112
118
|
end
|
113
119
|
|
114
120
|
def test_should_allow_within_range
|
115
|
-
User.validates_as_email_address :email, :within => 8..
|
121
|
+
User.validates_as_email_address :email, :within => 8..9
|
116
122
|
|
117
|
-
user = new_user(:email => 'a@a
|
123
|
+
user = new_user(:email => 'a@' + 'a' * 5)
|
118
124
|
assert !user.valid?
|
119
125
|
|
120
|
-
user
|
126
|
+
user.email += 'a'
|
121
127
|
assert user.valid?
|
122
128
|
|
123
|
-
user
|
129
|
+
user.email += 'a'
|
124
130
|
assert user.valid?
|
125
131
|
|
126
|
-
user
|
132
|
+
user.email += 'a'
|
127
133
|
assert !user.valid?
|
128
134
|
end
|
129
135
|
|
130
136
|
def test_should_allow_in_range
|
131
|
-
User.validates_as_email_address :email, :in => 8..
|
137
|
+
User.validates_as_email_address :email, :in => 8..9
|
132
138
|
|
133
|
-
user = new_user(:email => 'a@a
|
139
|
+
user = new_user(:email => 'a@' + 'a' * 5)
|
134
140
|
assert !user.valid?
|
135
141
|
|
136
|
-
user
|
142
|
+
user.email += 'a'
|
137
143
|
assert user.valid?
|
138
144
|
|
139
|
-
user
|
145
|
+
user.email += 'a'
|
140
146
|
assert user.valid?
|
141
147
|
|
142
|
-
user
|
148
|
+
user.email += 'a'
|
143
149
|
assert !user.valid?
|
144
150
|
end
|
145
151
|
|
146
152
|
def test_should_allow_too_long_message
|
147
153
|
User.validates_as_email_address :email, :too_long => 'custom'
|
148
154
|
|
149
|
-
user = new_user(:email => 'a@' + 'a' *
|
155
|
+
user = new_user(:email => 'a@' + 'a' * 319)
|
150
156
|
user.valid?
|
151
157
|
|
152
158
|
assert_equal 'custom', Array(user.errors.on(:email)).last
|
@@ -171,9 +177,9 @@ class ValidatesAsEmailAddressTest < Test::Unit::TestCase
|
|
171
177
|
end
|
172
178
|
|
173
179
|
def test_should_allow_wrong_format_message
|
174
|
-
User.validates_as_email_address :email, :
|
180
|
+
User.validates_as_email_address :email, :wrong_format => 'custom'
|
175
181
|
|
176
|
-
user = new_user(:email => 'a
|
182
|
+
user = new_user(:email => 'a@!')
|
177
183
|
user.valid?
|
178
184
|
|
179
185
|
assert_equal 'custom', Array(user.errors.on(:email)).first
|
@@ -224,8 +230,8 @@ class ValidatesAsEmailAddressUnrestrictedTest < Test::Unit::TestCase
|
|
224
230
|
def test_should_allow_illegal_rfc1035_formats
|
225
231
|
[
|
226
232
|
'test@[127.0.0.1]',
|
227
|
-
'test@-
|
228
|
-
'test@
|
233
|
+
'test@-domain-not-starting-with-letter.com',
|
234
|
+
'test@domain-not-ending-with-alphanum-.com'
|
229
235
|
].each do |address|
|
230
236
|
user = new_user(:email => address)
|
231
237
|
assert user.valid?, "#{address} should be legal."
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_as_email_address
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Pfeifer
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-26 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|