domain_name_validator 0.4.1 → 0.4.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/ChangeLog.md +7 -0
- data/Gemfile.lock +1 -1
- data/lib/domain_name_validator/validator.rb +27 -21
- data/lib/domain_name_validator/version.rb +1 -1
- data/spec/domain_name_validator_spec.rb +10 -0
- metadata +3 -3
data/ChangeLog.md
CHANGED
@@ -9,6 +9,13 @@
|
|
9
9
|
circumstances. This validation would, for example, reject a domain name
|
10
10
|
such as "test.domain".
|
11
11
|
|
12
|
+
* (0.4.1) Added "info" as a valid extra-long TLD. How i missed this one, I
|
13
|
+
have no idea.
|
14
|
+
|
15
|
+
* (0.4.2) Added a check for zero-length domain names, either empty strings
|
16
|
+
or Ruby nil values being passed in. In practice, these edge cases were
|
17
|
+
actually happening.
|
18
|
+
|
12
19
|
0.3 (2013-06-28)
|
13
20
|
----------------
|
14
21
|
|
data/Gemfile.lock
CHANGED
@@ -13,7 +13,7 @@ class DomainNameValidator
|
|
13
13
|
|
14
14
|
ERRS = {
|
15
15
|
:bogus_tld =>
|
16
|
-
'Malformed TLD',
|
16
|
+
'Malformed TLD: Could not possibly match any valid TLD',
|
17
17
|
:illegal_chars =>
|
18
18
|
'Domain label contains an illegal character',
|
19
19
|
:illegal_start =>
|
@@ -31,7 +31,9 @@ class DomainNameValidator
|
|
31
31
|
:min_level_size =>
|
32
32
|
'Minimum domain level limit of 2 not achieved',
|
33
33
|
:top_numerical =>
|
34
|
-
'The top-level domain (TLD) cannot be numerical'
|
34
|
+
'The top-level domain (TLD) cannot be numerical',
|
35
|
+
:zero_size =>
|
36
|
+
'Zero-length domain name'
|
35
37
|
}
|
36
38
|
|
37
39
|
# Validates the proper formatting of a normalized domain name, i.e. - a
|
@@ -48,27 +50,31 @@ class DomainNameValidator
|
|
48
50
|
# 6. A domain name cannot begin with a period.
|
49
51
|
|
50
52
|
def validate(dn, errs = [])
|
51
|
-
errs << ERRS[:
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
errs << ERRS[:
|
57
|
-
errs << ERRS[:
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
errs << ERRS[:zero_size] if dn.nil? || dn.size == 0
|
54
|
+
|
55
|
+
if errs.size == 0
|
56
|
+
errs << ERRS[:max_domain_size] if dn.size > MAX_DOMAIN_LENGTH
|
57
|
+
parts = dn.split('.')
|
58
|
+
errs << ERRS[:max_level_size] if parts.size > MAX_LEVELS
|
59
|
+
errs << ERRS[:min_level_size] if parts.size < MIN_LEVELS
|
60
|
+
parts.each do |p|
|
61
|
+
errs << ERRS[:max_label_size] if p.size > MAX_LABEL_LENGTH
|
62
|
+
errs << ERRS[:label_dash_begin] if p[0] == '-'
|
63
|
+
errs << ERRS[:label_dash_end] if p[-1] == '-'
|
64
|
+
errs << ERRS[:illegal_chars] unless p.match(/^[a-z0-9\-\_]+$/)
|
65
|
+
end
|
66
|
+
errs << ERRS[:top_numerical] if parts.last.match(/^[0-9]+$/)
|
67
|
+
if parts.last.size < MIN_TLD_LENGTH || parts.last.size > MAX_TLD_LENGTH
|
68
|
+
unless parts.last == 'arpa' ||
|
69
|
+
parts.last == 'aero' ||
|
70
|
+
parts.last == 'info' ||
|
71
|
+
parts.last == 'museum' ||
|
72
|
+
parts.last.match(/^xn--/)
|
73
|
+
errs << ERRS[:bogus_tld]
|
74
|
+
end
|
69
75
|
end
|
76
|
+
errs << ERRS[:illegal_start] if parts.first[0] == '.'
|
70
77
|
end
|
71
|
-
errs << ERRS[:illegal_start] if parts.first[0] == '.'
|
72
78
|
|
73
79
|
errs.size == 0 # TRUE if valid, FALSE otherwise
|
74
80
|
end
|
@@ -13,6 +13,16 @@ describe DomainNameValidator do
|
|
13
13
|
response.should be == true
|
14
14
|
end
|
15
15
|
|
16
|
+
it 'should fail when it finds nil instead of a domain name' do
|
17
|
+
response = @validator.validate(nil)
|
18
|
+
response.should be == false
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should fail when it finds an empty string instead of a domain name' do
|
22
|
+
response = @validator.validate("")
|
23
|
+
response.should be == false
|
24
|
+
end
|
25
|
+
|
16
26
|
it 'should fail when it finds a numeric top-level extension' do
|
17
27
|
response = @validator.validate('keenertech.123')
|
18
28
|
response.should be == false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: domain_name_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2013-07-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &28235004 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *28235004
|
25
25
|
description: Checks the validity of domain names.
|
26
26
|
email:
|
27
27
|
- dkeener@keenertech.com
|