activevalidators 4.0.2 → 4.0.3
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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +7 -2
- data/ChangeLog.md +8 -0
- data/Rakefile +0 -4
- data/activevalidators.gemspec +1 -1
- data/certs/franckverrot.pem +23 -19
- data/lib/active_validators/active_model/validations/email_validator.rb +5 -0
- data/lib/active_validators/active_model/validations/url_validator.rb +21 -8
- data/test/test_helper.rb +2 -7
- data/test/validations/url_test.rb +34 -0
- metadata +26 -22
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: d79bea4382e56e4bf80508436b9f06c66a005a2b4a6ab609ac002ecdfc9a5dc6
|
|
4
|
+
data.tar.gz: 830a533ecac989ea80ad219372c02b5566b0b590d74fae108e8b30a873bc1e7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 981eeeb402816fb4f723f21e2e96376b1f36978567fabb625c1ec4c3ecc33e3fdcb655b69657600a96ca669dcf26057ca7a2f488cbeec3a35fe33c38435e0660
|
|
7
|
+
data.tar.gz: 25c1cc1548e7a7a114f2871248602dcb7e75671abe49cdd264ce47632fa06b05a8eda289dfa2e14f26e4ebca5b8e19e95f90e14aadb4aed7f9e9fed6b6b25ae7
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data.tar.gz.sig
CHANGED
|
Binary file
|
data/.travis.yml
CHANGED
data/ChangeLog.md
CHANGED
data/Rakefile
CHANGED
|
@@ -12,10 +12,6 @@ Rake::TestTask.new do |t|
|
|
|
12
12
|
t.warning = true
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
# -*- encoding: utf-8 -*-
|
|
16
|
-
$:.unshift File.expand_path("../lib", __FILE__)
|
|
17
|
-
require 'activevalidators'
|
|
18
|
-
|
|
19
15
|
def gemspec
|
|
20
16
|
@gemspec ||= begin
|
|
21
17
|
file = File.expand_path('../activevalidators.gemspec', __FILE__)
|
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 = '4.0.
|
|
4
|
+
s.version = '4.0.3'
|
|
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', 'Serj L aka Loremaster']
|
|
7
7
|
s.email = ['franck@verrot.fr']
|
data/certs/franckverrot.pem
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZmcmFu
|
|
3
|
+
Y2svREM9dmVycm90L0RDPWZyMB4XDTE3MTExOTIxMTgyNVoXDTE4MTExOTIxMTgy
|
|
4
|
+
NVowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
|
|
5
|
+
hvcNAQEBBQADggGPADCCAYoCggGBANjZ/7L2ECEQAVOYvMl0JOwyVXKRCsLnVrmP
|
|
6
|
+
mcwpCMFL0ennkpLJcqiDNsm0b/RkJHSLu3FMoYrIU5KoaP7iMIsLGv846aw2wSNI
|
|
7
|
+
G5XWGnRY9dWVu7Gz2OZbsDi18WT94Y/s2yf+orPLAiaJb451decYEpHqLTiaJhhJ
|
|
8
|
+
xHckJixfDVwZGJpow7rrJAJMbU9ZCJFUFAfNpgkOqhbBU4Ehi1umbC/ZBsVDiRVa
|
|
9
|
+
ZjfNhe7kgx6jo3EfPY4izPW2IKkpk7nJKNfZnM2r0cnpPJbhyH1m5fsikBD5tRNe
|
|
10
|
+
YxJpxDPf8UBTTXqoeSSQygiHWWZVbH3zj2jWzi5T0do5PbZcCeoIKR4TyOgbOgBW
|
|
11
|
+
Ra7bm9uVXo6MQWpp0aeC/X+F2Y/dFjXAP/TPL89ownd3XZUaNDdZfS6aKBMG3a5C
|
|
12
|
+
gcRLMt1hOJchslGNtvkq5W4Wq8hw+zNHzTMpRkIsYTbvlJCDxXRKR3jwPDTRvNAl
|
|
13
|
+
aemBW1g3yerHeDQr6GtxKEvhmHdw/wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
|
|
14
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUgG77cLAMzowManymHX63DbvfR5IwGwYDVR0RBBQw
|
|
15
|
+
EoEQZnJhbmNrQHZlcnJvdC5mcjAbBgNVHRIEFDASgRBmcmFuY2tAdmVycm90LmZy
|
|
16
|
+
MA0GCSqGSIb3DQEBCwUAA4IBgQB86Y8WM2ipynprTUdKBmO/i5kPev+pQjLQqPXI
|
|
17
|
+
zzfv57KP8gg2sODWEdmNkSkeIvdx60pTENVsumaTPf6H4GKm0UXoUWkiXxyn1Pw+
|
|
18
|
+
u+LjMqNhsZC/GniX76EwqyfXWr67ycxvNZjx76Kd9NvaHmVpoZMx94I4AkMQ/DLs
|
|
19
|
+
xVOAKKocMUfYSOS9XBRSaBID35ct8IpOS8+AFTf/d1j9ZVRz+8FAwhUOqIJeV2Ze
|
|
20
|
+
CxU5fLhrkxlQYRbXlmJpmR/4ri3vGvBpfx6GbS/vfjIX+FGaPXVdANtQmoChT3y+
|
|
21
|
+
ZDTx0AmIrPp/g89SEoyrrRxy6BbhV7Jl68mwlS7v9EAaHVlQy2rhfB8RAO/ViuAl
|
|
22
|
+
GVIuVSzE95Lb2Q+vxbLgk/fHcdoGDIB7SglNmP9b1d55AgQGnajipEukmy+smZko
|
|
23
|
+
ZRwmWlrt39rxEcCGo4aKqwxpPeewNg7hjiCFkf2fO0XHvk+kyMr0JmF8GbS6oyj5
|
|
24
|
+
cWLdZ4BYV1Mwu0NmUxVnvmrCRV8=
|
|
21
25
|
-----END CERTIFICATE-----
|
|
@@ -40,6 +40,16 @@ module ActiveModel
|
|
|
40
40
|
super
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
# Public: Validate URL, if it fails adds an error.
|
|
44
|
+
#
|
|
45
|
+
# Returns nothing.
|
|
46
|
+
def validate_each(record, attribute, value)
|
|
47
|
+
uri = as_uri(value)
|
|
48
|
+
tld_requirement_fullfilled = check_tld_requirement(value)
|
|
49
|
+
record.errors.add(attribute) unless uri && value.to_s =~ uri_regexp && tld_requirement_fullfilled
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
43
53
|
# Internal: Ensures that at least one protocol is defined. If the protocols
|
|
44
54
|
# are empty it throws an ArgumentError.
|
|
45
55
|
#
|
|
@@ -66,6 +76,17 @@ module ActiveModel
|
|
|
66
76
|
@uri_regexp ||= /\A#{URI::Parser.new.make_regexp(protocols)}\z/
|
|
67
77
|
end
|
|
68
78
|
|
|
79
|
+
# Internal: Checks if the tld requirements are fullfilled
|
|
80
|
+
#
|
|
81
|
+
# When :require_tld option is set to true, the url will be searched for
|
|
82
|
+
# a dot anywhere inside the host except the first or last position
|
|
83
|
+
#
|
|
84
|
+
# Returns a boolean value.
|
|
85
|
+
def check_tld_requirement(value)
|
|
86
|
+
host = URI.parse(value.to_s).host rescue value
|
|
87
|
+
options[:require_tld] === true ? host =~ /.(\.)\w+/ : true
|
|
88
|
+
end
|
|
89
|
+
|
|
69
90
|
# Internal: Tries to convert supplied string into URI,
|
|
70
91
|
# if not possible returns nil => invalid URI.
|
|
71
92
|
#
|
|
@@ -73,14 +94,6 @@ module ActiveModel
|
|
|
73
94
|
def as_uri(value)
|
|
74
95
|
URI.parse(value.to_s) rescue nil if value.present?
|
|
75
96
|
end
|
|
76
|
-
|
|
77
|
-
# Public: Validate URL, if it fails adds an error.
|
|
78
|
-
#
|
|
79
|
-
# Returns nothing.
|
|
80
|
-
def validate_each(record, attribute, value)
|
|
81
|
-
uri = as_uri(value)
|
|
82
|
-
record.errors.add(attribute) unless uri && value.to_s =~ uri_regexp
|
|
83
|
-
end
|
|
84
97
|
end
|
|
85
98
|
end
|
|
86
99
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
gem 'minitest'
|
|
2
2
|
require 'minitest/autorun'
|
|
3
3
|
require 'minitest/mock'
|
|
4
|
-
require 'active_support/test_case'
|
|
5
|
-
|
|
6
|
-
# silence warnings
|
|
7
4
|
old_w, $-w = $-w, false
|
|
8
|
-
|
|
9
|
-
require 'activevalidators'
|
|
10
|
-
|
|
11
|
-
# unsilence warnings
|
|
5
|
+
require 'active_support/test_case'
|
|
12
6
|
$-w = old_w
|
|
7
|
+
require 'activevalidators'
|
|
13
8
|
|
|
14
9
|
class TestRecord
|
|
15
10
|
include ActiveModel::Validations
|
|
@@ -8,6 +8,12 @@ describe "Url Validation" do
|
|
|
8
8
|
TestRecord.new
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
+
def build_url_record_require_tld
|
|
12
|
+
TestRecord.reset_callbacks(:validate)
|
|
13
|
+
TestRecord.validates :url, :url => { :require_tld => true }
|
|
14
|
+
TestRecord.new
|
|
15
|
+
end
|
|
16
|
+
|
|
11
17
|
def build_ftp_record
|
|
12
18
|
TestRecord.reset_callbacks(:validate)
|
|
13
19
|
TestRecord.validates :url, :url => 'ftp'
|
|
@@ -49,6 +55,13 @@ describe "Url Validation" do
|
|
|
49
55
|
subject.valid?.must_equal true
|
|
50
56
|
subject.errors.size.must_equal 0
|
|
51
57
|
end
|
|
58
|
+
|
|
59
|
+
it "accepts urls with tld when tld validation is required" do
|
|
60
|
+
subject = build_url_record_require_tld
|
|
61
|
+
subject.url = 'http://verrot.fr'
|
|
62
|
+
subject.valid?.must_equal true
|
|
63
|
+
subject.errors.size.must_equal 0
|
|
64
|
+
end
|
|
52
65
|
end
|
|
53
66
|
|
|
54
67
|
describe "for invalid urls" do
|
|
@@ -93,5 +106,26 @@ describe "Url Validation" do
|
|
|
93
106
|
subject.valid?.must_equal false
|
|
94
107
|
subject.errors.size.must_equal 1
|
|
95
108
|
end
|
|
109
|
+
|
|
110
|
+
it "rejects urls that have no tld but required tld validation" do
|
|
111
|
+
subject = build_url_record_require_tld
|
|
112
|
+
subject.url = 'http://verrot'
|
|
113
|
+
subject.valid?.must_equal false
|
|
114
|
+
subject.errors.size.must_equal 1
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "will not accept domains that end with a dot as a tld" do
|
|
118
|
+
subject = build_url_record_require_tld
|
|
119
|
+
subject.url = 'http://verrot.'
|
|
120
|
+
subject.valid?.must_equal false
|
|
121
|
+
subject.errors.size.must_equal 1
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "will not accept domains that start with a dot as a tld" do
|
|
125
|
+
subject = build_url_record_require_tld
|
|
126
|
+
subject.url = 'http://.verrot'
|
|
127
|
+
subject.valid?.must_equal false
|
|
128
|
+
subject.errors.size.must_equal 1
|
|
129
|
+
end
|
|
96
130
|
end
|
|
97
131
|
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: 4.0.
|
|
4
|
+
version: 4.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Franck Verrot
|
|
@@ -16,27 +16,31 @@ bindir: bin
|
|
|
16
16
|
cert_chain:
|
|
17
17
|
- |
|
|
18
18
|
-----BEGIN CERTIFICATE-----
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZmcmFu
|
|
20
|
+
Y2svREM9dmVycm90L0RDPWZyMB4XDTE3MTExOTIxMTgyNVoXDTE4MTExOTIxMTgy
|
|
21
|
+
NVowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
|
|
22
|
+
hvcNAQEBBQADggGPADCCAYoCggGBANjZ/7L2ECEQAVOYvMl0JOwyVXKRCsLnVrmP
|
|
23
|
+
mcwpCMFL0ennkpLJcqiDNsm0b/RkJHSLu3FMoYrIU5KoaP7iMIsLGv846aw2wSNI
|
|
24
|
+
G5XWGnRY9dWVu7Gz2OZbsDi18WT94Y/s2yf+orPLAiaJb451decYEpHqLTiaJhhJ
|
|
25
|
+
xHckJixfDVwZGJpow7rrJAJMbU9ZCJFUFAfNpgkOqhbBU4Ehi1umbC/ZBsVDiRVa
|
|
26
|
+
ZjfNhe7kgx6jo3EfPY4izPW2IKkpk7nJKNfZnM2r0cnpPJbhyH1m5fsikBD5tRNe
|
|
27
|
+
YxJpxDPf8UBTTXqoeSSQygiHWWZVbH3zj2jWzi5T0do5PbZcCeoIKR4TyOgbOgBW
|
|
28
|
+
Ra7bm9uVXo6MQWpp0aeC/X+F2Y/dFjXAP/TPL89ownd3XZUaNDdZfS6aKBMG3a5C
|
|
29
|
+
gcRLMt1hOJchslGNtvkq5W4Wq8hw+zNHzTMpRkIsYTbvlJCDxXRKR3jwPDTRvNAl
|
|
30
|
+
aemBW1g3yerHeDQr6GtxKEvhmHdw/wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
|
|
31
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUgG77cLAMzowManymHX63DbvfR5IwGwYDVR0RBBQw
|
|
32
|
+
EoEQZnJhbmNrQHZlcnJvdC5mcjAbBgNVHRIEFDASgRBmcmFuY2tAdmVycm90LmZy
|
|
33
|
+
MA0GCSqGSIb3DQEBCwUAA4IBgQB86Y8WM2ipynprTUdKBmO/i5kPev+pQjLQqPXI
|
|
34
|
+
zzfv57KP8gg2sODWEdmNkSkeIvdx60pTENVsumaTPf6H4GKm0UXoUWkiXxyn1Pw+
|
|
35
|
+
u+LjMqNhsZC/GniX76EwqyfXWr67ycxvNZjx76Kd9NvaHmVpoZMx94I4AkMQ/DLs
|
|
36
|
+
xVOAKKocMUfYSOS9XBRSaBID35ct8IpOS8+AFTf/d1j9ZVRz+8FAwhUOqIJeV2Ze
|
|
37
|
+
CxU5fLhrkxlQYRbXlmJpmR/4ri3vGvBpfx6GbS/vfjIX+FGaPXVdANtQmoChT3y+
|
|
38
|
+
ZDTx0AmIrPp/g89SEoyrrRxy6BbhV7Jl68mwlS7v9EAaHVlQy2rhfB8RAO/ViuAl
|
|
39
|
+
GVIuVSzE95Lb2Q+vxbLgk/fHcdoGDIB7SglNmP9b1d55AgQGnajipEukmy+smZko
|
|
40
|
+
ZRwmWlrt39rxEcCGo4aKqwxpPeewNg7hjiCFkf2fO0XHvk+kyMr0JmF8GbS6oyj5
|
|
41
|
+
cWLdZ4BYV1Mwu0NmUxVnvmrCRV8=
|
|
38
42
|
-----END CERTIFICATE-----
|
|
39
|
-
date: 2017-
|
|
43
|
+
date: 2017-11-19 00:00:00.000000000 Z
|
|
40
44
|
dependencies:
|
|
41
45
|
- !ruby/object:Gem::Dependency
|
|
42
46
|
name: bundler
|
|
@@ -246,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
246
250
|
version: '0'
|
|
247
251
|
requirements: []
|
|
248
252
|
rubyforge_project:
|
|
249
|
-
rubygems_version: 2.6.
|
|
253
|
+
rubygems_version: 2.6.14
|
|
250
254
|
signing_key:
|
|
251
255
|
specification_version: 4
|
|
252
256
|
summary: Collection of ActiveModel/ActiveRecord validations
|
metadata.gz.sig
CHANGED
|
Binary file
|