activevalidators 2.0.1 → 2.0.2
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/.travis.yml +6 -2
- data/activevalidators.gemspec +1 -3
- data/lib/active_model/validations/email_validator.rb +11 -0
- data/lib/active_model/validations/phone_validator.rb +1 -1
- data/lib/active_model/validations/postal_code_validator.rb +6 -5
- data/lib/active_validators/one_nine_shims/one_nine_string.rb +11 -0
- data/lib/activevalidators.rb +1 -0
- data/test/validations/email_test.rb +41 -1
- data/test/validations/postal_code_test.rb +1 -1
- metadata +61 -20
data/.travis.yml
CHANGED
data/activevalidators.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'activevalidators'
|
4
|
-
s.version = '2.0.
|
4
|
+
s.version = '2.0.2'
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.authors = ['Franck Verrot', 'Paco Guzmán', 'Oriol Gual', 'Garrett Bjerkhoel', 'Renato Riccieri Santos Zannon', 'Brian Moseley']
|
7
7
|
s.email = ['franck@verrot.fr']
|
@@ -9,8 +9,6 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.summary = %q{Collection of ActiveModel/ActiveRecord validations}
|
10
10
|
s.description = %q{ActiveValidators is a collection of ActiveModel/ActiveRecord validations}
|
11
11
|
|
12
|
-
s.required_ruby_version = '>= 1.9.2'
|
13
|
-
|
14
12
|
s.add_development_dependency 'bundler'
|
15
13
|
s.add_development_dependency 'minitest'
|
16
14
|
s.add_dependency 'rake' , '>= 0.8.7'
|
@@ -2,6 +2,10 @@ require 'mail'
|
|
2
2
|
module ActiveModel
|
3
3
|
module Validations
|
4
4
|
class EmailValidator < EachValidator
|
5
|
+
def check_validity!
|
6
|
+
raise ArgumentError, "Not a callable object #{options[:with].inspect}" unless options[:with] == nil || options[:with].respond_to?(:call)
|
7
|
+
end
|
8
|
+
|
5
9
|
def validate_each(record, attribute, value)
|
6
10
|
# takes from: https://github.com/hallelujah/valid_email
|
7
11
|
begin
|
@@ -24,6 +28,13 @@ module ActiveModel
|
|
24
28
|
rescue Exception => e
|
25
29
|
valid = false
|
26
30
|
end
|
31
|
+
|
32
|
+
if options[:with]
|
33
|
+
# technically the test suite will pass without the boolean coercion
|
34
|
+
# but we know the code is safer with it in place
|
35
|
+
valid &&= !!options[:with].call(mail)
|
36
|
+
end
|
37
|
+
|
27
38
|
record.errors.add attribute, (options[:message]) unless valid
|
28
39
|
end
|
29
40
|
end
|
@@ -3,7 +3,7 @@ module ActiveModel
|
|
3
3
|
class PhoneValidator < EachValidator
|
4
4
|
def validate_each(record, attribute, value)
|
5
5
|
country_code = Country.new(options[:country].to_s.upcase).country_code unless options[:country].blank?
|
6
|
-
record.errors.add(attribute, options[:message]) if value.blank? || ! (options[:country].blank? ? Phony.plausible?(value) : Phony.plausible?(value, cc
|
6
|
+
record.errors.add(attribute, options[:message]) if value.blank? || ! (options[:country].blank? ? Phony.plausible?(value) : Phony.plausible?(value, :cc => country_code) )
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
@@ -5,11 +5,11 @@ module ActiveModel
|
|
5
5
|
@value = value
|
6
6
|
unless country = options[:country]
|
7
7
|
if country_method = options[:country_method]
|
8
|
-
|
8
|
+
country = record.send(country_method)
|
9
9
|
else
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
country = 'us'
|
11
|
+
end
|
12
|
+
end
|
13
13
|
@formats = PostalCodeValidator.known_formats[country.to_s]
|
14
14
|
raise "No known postal code formats for country #{country}" unless @formats
|
15
15
|
record.errors.add(attribute) if value.blank? || !matches_any?
|
@@ -45,6 +45,7 @@ module ActiveModel
|
|
45
45
|
'ic' => ['###'],
|
46
46
|
'it' => ['#####'],
|
47
47
|
'jp' => ['###-####', '#######'],
|
48
|
+
'ky' => ['KY#-####'],
|
48
49
|
'li' => ['####'],
|
49
50
|
'lk' => ['#####'],
|
50
51
|
'lt' => ['LT-#####', '#####'],
|
@@ -84,7 +85,7 @@ module ActiveModel
|
|
84
85
|
private
|
85
86
|
|
86
87
|
def self.regexp_from(format)
|
87
|
-
Regexp.new '\A' + (Regexp.escape format).gsub(/[@#]/, '@' => '[[:alpha:]]', '#' => 'd') + '\z'
|
88
|
+
Regexp.new '\A' + ActiveValidators::OneNineShims::OneNineString.new(Regexp.escape format).gsub(/[@#]/, '@' => '[[:alpha:]]', '#' => 'd') + '\z'
|
88
89
|
end
|
89
90
|
end
|
90
91
|
end
|
data/lib/activevalidators.rb
CHANGED
@@ -54,6 +54,38 @@ describe "Email Validation" do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
describe "with: #<Proc>" do
|
58
|
+
it "rejects any false result" do
|
59
|
+
subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| false }})
|
60
|
+
subject.valid?.must_equal false
|
61
|
+
subject.errors.size.must_equal 1
|
62
|
+
end
|
63
|
+
|
64
|
+
it "accepts any true result" do
|
65
|
+
subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| true }})
|
66
|
+
subject.valid?.must_equal true
|
67
|
+
subject.errors.size.must_equal 0
|
68
|
+
end
|
69
|
+
|
70
|
+
it "passes in the parsed email address" do
|
71
|
+
subject = build_email_record({:email => "franck@hotmail.com"}, {:with => lambda {|email| not email.domain == "hotmail.com" }})
|
72
|
+
subject.valid?.must_equal false
|
73
|
+
subject.errors.size.must_equal 1
|
74
|
+
end
|
75
|
+
|
76
|
+
it "rejects a nil result" do
|
77
|
+
subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.com\Z/ }})
|
78
|
+
subject.valid?.must_equal false
|
79
|
+
subject.errors.size.must_equal 1
|
80
|
+
end
|
81
|
+
|
82
|
+
it "accepts a numerical result" do
|
83
|
+
subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.fr\Z/ }})
|
84
|
+
subject.valid?.must_equal true
|
85
|
+
subject.errors.size.must_equal 0
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
57
89
|
describe "for invalid emails" do
|
58
90
|
it "rejects invalid emails" do
|
59
91
|
subject = build_email_record :email => 'franck.fr'
|
@@ -75,9 +107,17 @@ describe "Email Validation" do
|
|
75
107
|
end
|
76
108
|
end
|
77
109
|
|
110
|
+
it "checks validity of the arguments" do
|
111
|
+
[3, "foo", 1..6].each do |wrong_argument|
|
112
|
+
assert_raises(ArgumentError,"Not a callable object #{wrong_argument.inspect}") do
|
113
|
+
TestRecord.validates :email, :email => { :with => wrong_argument }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
78
118
|
def build_email_record(attrs = {}, opts = {})
|
79
119
|
TestRecord.reset_callbacks(:validate)
|
80
|
-
TestRecord.validates :email, :email => { :strict => opts[:strict] }
|
120
|
+
TestRecord.validates :email, :email => { :strict => opts[:strict], :with => opts[:with] }
|
81
121
|
TestRecord.new attrs
|
82
122
|
end
|
83
123
|
end
|
@@ -28,7 +28,7 @@ describe "Postal Code Validation" do
|
|
28
28
|
formats.each do |format|
|
29
29
|
it "should validate format of postal code with #{format}" do
|
30
30
|
subject = build_postal_code_record :country => country
|
31
|
-
subject.postal_code = format.gsub(/[@#]/, '@' => 'A', '#' => '9')
|
31
|
+
subject.postal_code = ActiveValidators::OneNineShims::OneNineString.new(format).gsub(/[@#]/, '@' => 'A', '#' => '9')
|
32
32
|
subject.valid?.must_equal true
|
33
33
|
subject.errors.size.must_equal 0
|
34
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activevalidators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,11 +14,11 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-11-23 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: bundler
|
21
|
-
requirement:
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
22
22
|
none: false
|
23
23
|
requirements:
|
24
24
|
- - ! '>='
|
@@ -26,10 +26,15 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
type: :development
|
28
28
|
prerelease: false
|
29
|
-
version_requirements:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
30
35
|
- !ruby/object:Gem::Dependency
|
31
36
|
name: minitest
|
32
|
-
requirement:
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
33
38
|
none: false
|
34
39
|
requirements:
|
35
40
|
- - ! '>='
|
@@ -37,10 +42,15 @@ dependencies:
|
|
37
42
|
version: '0'
|
38
43
|
type: :development
|
39
44
|
prerelease: false
|
40
|
-
version_requirements:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
41
51
|
- !ruby/object:Gem::Dependency
|
42
52
|
name: rake
|
43
|
-
requirement:
|
53
|
+
requirement: !ruby/object:Gem::Requirement
|
44
54
|
none: false
|
45
55
|
requirements:
|
46
56
|
- - ! '>='
|
@@ -48,10 +58,15 @@ dependencies:
|
|
48
58
|
version: 0.8.7
|
49
59
|
type: :runtime
|
50
60
|
prerelease: false
|
51
|
-
version_requirements:
|
61
|
+
version_requirements: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.8.7
|
52
67
|
- !ruby/object:Gem::Dependency
|
53
68
|
name: activemodel
|
54
|
-
requirement:
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
55
70
|
none: false
|
56
71
|
requirements:
|
57
72
|
- - ! '>='
|
@@ -59,10 +74,15 @@ dependencies:
|
|
59
74
|
version: 3.0.0
|
60
75
|
type: :runtime
|
61
76
|
prerelease: false
|
62
|
-
version_requirements:
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.0.0
|
63
83
|
- !ruby/object:Gem::Dependency
|
64
84
|
name: phony
|
65
|
-
requirement:
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
66
86
|
none: false
|
67
87
|
requirements:
|
68
88
|
- - ~>
|
@@ -70,10 +90,15 @@ dependencies:
|
|
70
90
|
version: 1.7.4
|
71
91
|
type: :runtime
|
72
92
|
prerelease: false
|
73
|
-
version_requirements:
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.7.4
|
74
99
|
- !ruby/object:Gem::Dependency
|
75
100
|
name: countries
|
76
|
-
requirement:
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
77
102
|
none: false
|
78
103
|
requirements:
|
79
104
|
- - ~>
|
@@ -81,10 +106,15 @@ dependencies:
|
|
81
106
|
version: 0.8.2
|
82
107
|
type: :runtime
|
83
108
|
prerelease: false
|
84
|
-
version_requirements:
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ~>
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 0.8.2
|
85
115
|
- !ruby/object:Gem::Dependency
|
86
116
|
name: mail
|
87
|
-
requirement:
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
88
118
|
none: false
|
89
119
|
requirements:
|
90
120
|
- - ! '>='
|
@@ -92,10 +122,15 @@ dependencies:
|
|
92
122
|
version: '0'
|
93
123
|
type: :runtime
|
94
124
|
prerelease: false
|
95
|
-
version_requirements:
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
96
131
|
- !ruby/object:Gem::Dependency
|
97
132
|
name: date_validator
|
98
|
-
requirement:
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
99
134
|
none: false
|
100
135
|
requirements:
|
101
136
|
- - ! '>='
|
@@ -103,7 +138,12 @@ dependencies:
|
|
103
138
|
version: '0'
|
104
139
|
type: :runtime
|
105
140
|
prerelease: false
|
106
|
-
version_requirements:
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
none: false
|
143
|
+
requirements:
|
144
|
+
- - ! '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
107
147
|
description: ActiveValidators is a collection of ActiveModel/ActiveRecord validations
|
108
148
|
email:
|
109
149
|
- franck@verrot.fr
|
@@ -129,6 +169,7 @@ files:
|
|
129
169
|
- lib/active_model/validations/tracking_number_validator.rb
|
130
170
|
- lib/active_model/validations/twitter_validator.rb
|
131
171
|
- lib/active_model/validations/url_validator.rb
|
172
|
+
- lib/active_validators/one_nine_shims/one_nine_string.rb
|
132
173
|
- lib/activevalidators.rb
|
133
174
|
- test/test_helper.rb
|
134
175
|
- test/validations/credit_card_test.rb
|
@@ -154,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
195
|
requirements:
|
155
196
|
- - ! '>='
|
156
197
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
198
|
+
version: '0'
|
158
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
200
|
none: false
|
160
201
|
requirements:
|
@@ -163,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
204
|
version: '0'
|
164
205
|
requirements: []
|
165
206
|
rubyforge_project:
|
166
|
-
rubygems_version: 1.8.
|
207
|
+
rubygems_version: 1.8.23
|
167
208
|
signing_key:
|
168
209
|
specification_version: 3
|
169
210
|
summary: Collection of ActiveModel/ActiveRecord validations
|