validators 3.1.0 → 3.4.0
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 +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +10 -0
- data/README.md +23 -8
- data/Rakefile +0 -1
- data/data/reserved_subdomains.txt +2830 -0
- data/lib/validators.rb +5 -4
- data/lib/validators/constants.rb +1 -1
- data/lib/validators/disposable_domains.rb +19 -0
- data/lib/validators/disposable_emails.rb +23 -0
- data/lib/validators/locale/en.yml +5 -2
- data/lib/validators/locale/pt-BR.yml +1 -0
- data/lib/validators/{reserved_hostnames.rb → reserved_subdomains.rb} +3 -5
- data/lib/validators/tld.rb +9 -5
- data/lib/validators/validates_email_format_of.rb +19 -4
- data/lib/validators/validates_subdomain.rb +69 -0
- data/lib/validators/validates_username.rb +15 -0
- data/lib/validators/version.rb +1 -1
- data/test/test_helper.rb +17 -2
- data/test/validators/disposable_email_test.rb +18 -5
- data/test/validators/validates_email_format_of_test.rb +4 -2
- data/test/validators/validates_subdomain_test.rb +75 -0
- data/test/validators/validates_url_format_of/with_tld_validation_test.rb +18 -0
- data/test/validators/validates_url_format_of/without_tld_validation_test.rb +18 -0
- data/test/validators/{validates_reserved_username_test.rb → validates_username_test.rb} +27 -4
- data/validators.gemspec +11 -1
- metadata +116 -22
- data/bin/sync-disposable-hostnames +0 -35
- data/bin/sync-tld +0 -17
- data/data/disposable.json +0 -57281
- data/data/reserved_hostnames.json +0 -1399
- data/data/tld.json +0 -1516
- data/lib/validators/disposable_hostnames.rb +0 -11
- data/lib/validators/validates_reserved_hostname.rb +0 -45
- data/lib/validators/validates_reserved_username.rb +0 -29
- data/test/validators/validates_reserved_hostname_test.rb +0 -40
@@ -14,4 +14,22 @@ class ValidatesurlFormatUrlWithTldValidationTest < Minitest::Test
|
|
14
14
|
assert user.valid?
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
test "rejects invalid TLD (alternative syntax)" do
|
19
|
+
user_model = Class.new do
|
20
|
+
include ActiveModel::Validations
|
21
|
+
attr_accessor :site_url
|
22
|
+
|
23
|
+
def self.name
|
24
|
+
"User"
|
25
|
+
end
|
26
|
+
|
27
|
+
validates :site_url, url: {tld: true}
|
28
|
+
end
|
29
|
+
|
30
|
+
user = user_model.new
|
31
|
+
user.site_url = "https://example.xy"
|
32
|
+
|
33
|
+
refute user.valid?
|
34
|
+
end
|
17
35
|
end
|
@@ -47,4 +47,22 @@ class ValidatesurlFormatUrlWithoutTldValidationTest < Minitest::Test
|
|
47
47
|
user = User.new(url: "")
|
48
48
|
refute user.valid?
|
49
49
|
end
|
50
|
+
|
51
|
+
test "accepts invalid TLD (alternative syntax)" do
|
52
|
+
user_model = Class.new do
|
53
|
+
include ActiveModel::Validations
|
54
|
+
attr_accessor :site_url
|
55
|
+
|
56
|
+
def self.name
|
57
|
+
"User"
|
58
|
+
end
|
59
|
+
|
60
|
+
validates :site_url, url: {tld: false}
|
61
|
+
end
|
62
|
+
|
63
|
+
user = user_model.new
|
64
|
+
user.site_url = "https://example.xy"
|
65
|
+
|
66
|
+
assert user.valid?
|
67
|
+
end
|
50
68
|
end
|
@@ -2,11 +2,23 @@
|
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
5
|
-
class
|
5
|
+
class ValidatesUsernameTest < Minitest::Test
|
6
|
+
test "rejects invalid username" do
|
7
|
+
model = build_model do
|
8
|
+
attr_accessor :username
|
9
|
+
validates_username :username
|
10
|
+
end
|
11
|
+
|
12
|
+
instance = model.new(username: "1234")
|
13
|
+
|
14
|
+
refute instance.valid?
|
15
|
+
assert_includes instance.errors[:username], "is invalid"
|
16
|
+
end
|
17
|
+
|
6
18
|
test "rejects reserved username" do
|
7
19
|
model = build_model do
|
8
20
|
attr_accessor :username
|
9
|
-
|
21
|
+
validates_username :username
|
10
22
|
end
|
11
23
|
|
12
24
|
instance = model.new(username: "www")
|
@@ -19,7 +31,7 @@ class ValidatesReservedUsernameTest < Minitest::Test
|
|
19
31
|
test "rejects reserved username with pattern" do
|
20
32
|
model = build_model do
|
21
33
|
attr_accessor :username
|
22
|
-
|
34
|
+
validates_username :username
|
23
35
|
end
|
24
36
|
|
25
37
|
instance = model.new(username: "www1234")
|
@@ -30,11 +42,22 @@ class ValidatesReservedUsernameTest < Minitest::Test
|
|
30
42
|
test "uses custom list" do
|
31
43
|
model = build_model do
|
32
44
|
attr_accessor :username
|
33
|
-
|
45
|
+
validates_username :username, in: %w[nope]
|
34
46
|
end
|
35
47
|
|
36
48
|
instance = model.new(username: "nope")
|
37
49
|
|
38
50
|
refute instance.valid?
|
39
51
|
end
|
52
|
+
|
53
|
+
test "ignores reserved username validation" do
|
54
|
+
model = build_model do
|
55
|
+
attr_accessor :username
|
56
|
+
validates_username :username, reserved: false
|
57
|
+
end
|
58
|
+
|
59
|
+
instance = model.new(username: "www")
|
60
|
+
|
61
|
+
assert instance.valid?
|
62
|
+
end
|
40
63
|
end
|
data/validators.gemspec
CHANGED
@@ -12,22 +12,32 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = "Add some nice ActiveModel/ActiveRecord validators."
|
13
13
|
s.description = s.summary
|
14
14
|
s.license = "MIT"
|
15
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
15
16
|
|
16
17
|
s.files = `git ls-files`.split("\n")
|
17
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin
|
19
|
+
s.executables = `git ls-files -- bin/*`
|
20
|
+
.split("\n")
|
21
|
+
.map {|f| File.basename(f) }
|
19
22
|
s.require_paths = ["lib"]
|
20
23
|
|
21
24
|
s.add_development_dependency "activerecord"
|
25
|
+
s.add_development_dependency "aitch"
|
22
26
|
s.add_development_dependency "cpf_cnpj"
|
27
|
+
s.add_development_dependency "email_data"
|
23
28
|
s.add_development_dependency "minitest-utils"
|
24
29
|
s.add_development_dependency "mocha"
|
30
|
+
s.add_development_dependency "nokogiri"
|
25
31
|
s.add_development_dependency "pry-meta"
|
26
32
|
s.add_development_dependency "rake"
|
33
|
+
s.add_development_dependency "root_domain"
|
27
34
|
s.add_development_dependency "rubocop"
|
28
35
|
s.add_development_dependency "rubocop-fnando"
|
29
36
|
s.add_development_dependency "simplecov"
|
30
37
|
s.add_development_dependency "simplecov-console"
|
38
|
+
s.add_development_dependency "simpleidn"
|
31
39
|
s.add_development_dependency "sqlite3", "~> 1.4"
|
32
40
|
s.add_development_dependency "sshkey"
|
41
|
+
s.add_development_dependency "whois"
|
42
|
+
s.add_development_dependency "whois-parser"
|
33
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aitch
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: cpf_cnpj
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: email_data
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: minitest-utils
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +94,20 @@ dependencies:
|
|
66
94
|
- - ">="
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: nokogiri
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
112
|
name: pry-meta
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +136,20 @@ dependencies:
|
|
94
136
|
- - ">="
|
95
137
|
- !ruby/object:Gem::Version
|
96
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: root_domain
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
97
153
|
- !ruby/object:Gem::Dependency
|
98
154
|
name: rubocop
|
99
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +206,20 @@ dependencies:
|
|
150
206
|
- - ">="
|
151
207
|
- !ruby/object:Gem::Version
|
152
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: simpleidn
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
153
223
|
- !ruby/object:Gem::Dependency
|
154
224
|
name: sqlite3
|
155
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,34 +248,58 @@ dependencies:
|
|
178
248
|
- - ">="
|
179
249
|
- !ruby/object:Gem::Version
|
180
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: whois
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
- !ruby/object:Gem::Dependency
|
266
|
+
name: whois-parser
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - ">="
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
type: :development
|
273
|
+
prerelease: false
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
275
|
+
requirements:
|
276
|
+
- - ">="
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: '0'
|
181
279
|
description: Add some nice ActiveModel/ActiveRecord validators.
|
182
280
|
email:
|
183
281
|
- fnando.vieira@gmail.com
|
184
|
-
executables:
|
185
|
-
- sync-disposable-hostnames
|
186
|
-
- sync-tld
|
282
|
+
executables: []
|
187
283
|
extensions: []
|
188
284
|
extra_rdoc_files: []
|
189
285
|
files:
|
286
|
+
- ".github/FUNDING.yml"
|
190
287
|
- ".gitignore"
|
191
288
|
- ".rubocop.yml"
|
192
289
|
- ".travis.yml"
|
193
290
|
- Gemfile
|
194
291
|
- README.md
|
195
292
|
- Rakefile
|
196
|
-
-
|
197
|
-
- bin/sync-tld
|
198
|
-
- data/disposable.json
|
199
|
-
- data/reserved_hostnames.json
|
200
|
-
- data/tld.json
|
293
|
+
- data/reserved_subdomains.txt
|
201
294
|
- lib/validators.rb
|
202
295
|
- lib/validators/constants.rb
|
203
|
-
- lib/validators/
|
296
|
+
- lib/validators/disposable_domains.rb
|
297
|
+
- lib/validators/disposable_emails.rb
|
204
298
|
- lib/validators/hostname.rb
|
205
299
|
- lib/validators/ip.rb
|
206
300
|
- lib/validators/locale/en.yml
|
207
301
|
- lib/validators/locale/pt-BR.yml
|
208
|
-
- lib/validators/
|
302
|
+
- lib/validators/reserved_subdomains.rb
|
209
303
|
- lib/validators/tld.rb
|
210
304
|
- lib/validators/validates_cnpj_format_of.rb
|
211
305
|
- lib/validators/validates_cpf_format_of.rb
|
@@ -214,11 +308,11 @@ files:
|
|
214
308
|
- lib/validators/validates_hostname_format_of.rb
|
215
309
|
- lib/validators/validates_ip_address.rb
|
216
310
|
- lib/validators/validates_ownership_of.rb
|
217
|
-
- lib/validators/validates_reserved_hostname.rb
|
218
|
-
- lib/validators/validates_reserved_username.rb
|
219
311
|
- lib/validators/validates_ssh_private_key.rb
|
220
312
|
- lib/validators/validates_ssh_public_key.rb
|
313
|
+
- lib/validators/validates_subdomain.rb
|
221
314
|
- lib/validators/validates_url_format_of.rb
|
315
|
+
- lib/validators/validates_username.rb
|
222
316
|
- lib/validators/version.rb
|
223
317
|
- test/schema.rb
|
224
318
|
- test/support/dates.rb
|
@@ -242,21 +336,21 @@ files:
|
|
242
336
|
- test/validators/validates_ip_address/ipv6_test.rb
|
243
337
|
- test/validators/validates_ip_address_test.rb
|
244
338
|
- test/validators/validates_ownership_of_test.rb
|
245
|
-
- test/validators/validates_reserved_hostname_test.rb
|
246
|
-
- test/validators/validates_reserved_username_test.rb
|
247
339
|
- test/validators/validates_ssh_private_key/bits_test.rb
|
248
340
|
- test/validators/validates_ssh_private_key/common_test.rb
|
249
341
|
- test/validators/validates_ssh_private_key/dsa_test.rb
|
250
342
|
- test/validators/validates_ssh_private_key/rsa_test.rb
|
251
343
|
- test/validators/validates_ssh_public_key_test.rb
|
344
|
+
- test/validators/validates_subdomain_test.rb
|
252
345
|
- test/validators/validates_url_format_of/with_tld_validation_test.rb
|
253
346
|
- test/validators/validates_url_format_of/without_tld_validation_test.rb
|
347
|
+
- test/validators/validates_username_test.rb
|
254
348
|
- validators.gemspec
|
255
349
|
homepage: http://rubygems.org/gems/validators
|
256
350
|
licenses:
|
257
351
|
- MIT
|
258
352
|
metadata: {}
|
259
|
-
post_install_message:
|
353
|
+
post_install_message:
|
260
354
|
rdoc_options: []
|
261
355
|
require_paths:
|
262
356
|
- lib
|
@@ -264,7 +358,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
264
358
|
requirements:
|
265
359
|
- - ">="
|
266
360
|
- !ruby/object:Gem::Version
|
267
|
-
version:
|
361
|
+
version: 2.3.0
|
268
362
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
363
|
requirements:
|
270
364
|
- - ">="
|
@@ -272,7 +366,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
272
366
|
version: '0'
|
273
367
|
requirements: []
|
274
368
|
rubygems_version: 3.1.2
|
275
|
-
signing_key:
|
369
|
+
signing_key:
|
276
370
|
specification_version: 4
|
277
371
|
summary: Add some nice ActiveModel/ActiveRecord validators.
|
278
372
|
test_files:
|
@@ -298,12 +392,12 @@ test_files:
|
|
298
392
|
- test/validators/validates_ip_address/ipv6_test.rb
|
299
393
|
- test/validators/validates_ip_address_test.rb
|
300
394
|
- test/validators/validates_ownership_of_test.rb
|
301
|
-
- test/validators/validates_reserved_hostname_test.rb
|
302
|
-
- test/validators/validates_reserved_username_test.rb
|
303
395
|
- test/validators/validates_ssh_private_key/bits_test.rb
|
304
396
|
- test/validators/validates_ssh_private_key/common_test.rb
|
305
397
|
- test/validators/validates_ssh_private_key/dsa_test.rb
|
306
398
|
- test/validators/validates_ssh_private_key/rsa_test.rb
|
307
399
|
- test/validators/validates_ssh_public_key_test.rb
|
400
|
+
- test/validators/validates_subdomain_test.rb
|
308
401
|
- test/validators/validates_url_format_of/with_tld_validation_test.rb
|
309
402
|
- test/validators/validates_url_format_of/without_tld_validation_test.rb
|
403
|
+
- test/validators/validates_username_test.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "open-uri"
|
5
|
-
require "json"
|
6
|
-
|
7
|
-
urls = %w[
|
8
|
-
https://raw.githubusercontent.com/ivolo/disposable-email-domains/master/index.json
|
9
|
-
https://raw.githubusercontent.com/andreis/disposable-email-domains/master/domains.json
|
10
|
-
https://raw.githubusercontent.com/FGRibreau/mailchecker/master/list.txt
|
11
|
-
https://raw.githubusercontent.com/willwhite/freemail/master/data/disposable.txt
|
12
|
-
]
|
13
|
-
|
14
|
-
domains = urls.each_with_object([]) do |url, buffer|
|
15
|
-
ext = File.extname(url)
|
16
|
-
|
17
|
-
result = case ext
|
18
|
-
when ".json"
|
19
|
-
JSON.parse(URI.open(url).read)
|
20
|
-
when ".txt"
|
21
|
-
URI.open(url).read.lines.map(&:chomp)
|
22
|
-
else
|
23
|
-
raise "Unknown extension"
|
24
|
-
end
|
25
|
-
|
26
|
-
buffer.push(*result)
|
27
|
-
end
|
28
|
-
|
29
|
-
domains.map!(&:downcase)
|
30
|
-
domains.uniq!
|
31
|
-
domains.sort!
|
32
|
-
|
33
|
-
File.open("./data/disposable.json", "w") do |file|
|
34
|
-
file << JSON.pretty_generate(domains)
|
35
|
-
end
|
data/bin/sync-tld
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "open-uri"
|
5
|
-
require "json"
|
6
|
-
|
7
|
-
tlds = URI.open("https://data.iana.org/TLD/tlds-alpha-by-domain.txt").read.lines
|
8
|
-
tlds.shift # remove update notice
|
9
|
-
|
10
|
-
tlds.map!(&:downcase)
|
11
|
-
tlds.map!(&:strip)
|
12
|
-
tlds.sort!
|
13
|
-
tlds.uniq!
|
14
|
-
|
15
|
-
File.open("./data/tld.json", "w") do |file|
|
16
|
-
file << JSON.pretty_generate(tlds)
|
17
|
-
end
|