root_domain 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9604392f3bd2b810161f518225a1826f148dd9a139dd6e71577a414c0b89c3ef
4
- data.tar.gz: fe373334382a4ff5bc6a3439af994cede81288fac75593ea9c183ffd135819d8
3
+ metadata.gz: 289644bed4f6c5a3a393c27c3220acc86c823d6cc7592aa4b588b7aeec69bc83
4
+ data.tar.gz: b2a5e7c4cf351f611107289fa48bfc5b87a2c98e93e731a74454791bf2d93ea1
5
5
  SHA512:
6
- metadata.gz: 1bcb1c388c491eea1338434687444cfd18f865af3b9b986aa9add49061115466d8dcc353fef699e54dffde767538d3b4fc982c25157f7942f0ef83cb5c1f6bf8
7
- data.tar.gz: 99d5b89c1c8daee5bd218db7896af16fe1c8107a5af398ce098093099198f53044efc0b4778d9235a7123b16f95a780bd473231a8c8d251bb3d022e563d4c0dc
6
+ metadata.gz: 86825db89adb00560847ccf025483e1b759ee26bafed4261a90b0ba06b55ef7f8772365507b72f7b0950abda55bd1a2572a21c77d3d4a4703efe260d6ca34f58
7
+ data.tar.gz: 21002dbe083f78df85489277b643c385bc1fc8e8e3f7afb7fc9868e4bacd6bc8746ede22910306a9721652018586e2f98dd1caead89f13c2d569fe795e3d09e6
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ## v0.1.0
3
+ ## v0.1.1 - 2020-11-15
4
+
5
+ - [Changed] Data now comes from [email_data](https://github.com/fnando/email_data).
6
+
7
+ ## v0.1.0 - 2020-09-21
4
8
 
5
9
  - Initial release.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # root_domain
2
2
 
3
3
  If you ever worked with domain validation, you probably needed to extract the
4
- root domain. This means that, given some hostname, remove subdomains from the original input, taking into account not only official Internet [TLDs](https://en.wikipedia.org/wiki/Top-level_domain), but. [SLDs](https://en.wikipedia.org/wiki/Second-level_domain) too.
4
+ root domain. This means that, given some hostname, you must remove subdomains from the original input, taking into account not only official Internet [TLDs](https://en.wikipedia.org/wiki/Top-level_domain), but [SLDs](https://en.wikipedia.org/wiki/Second-level_domain) too.
5
5
 
6
6
  With root_domain, you can easily extract the root domain, expanding any input from punycode into ASCII entries.
7
7
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "email_data"
3
4
  require "simpleidn"
4
5
  require "json"
5
6
 
@@ -9,7 +10,7 @@ module RootDomain
9
10
  def self.call(input)
10
11
  input = SimpleIDN.to_ascii(input)
11
12
 
12
- find(slds, input) || find(tlds, input)
13
+ find(EmailData.slds, input) || find(EmailData.tlds, input)
13
14
  end
14
15
 
15
16
  def self.find(source, input)
@@ -23,12 +24,4 @@ module RootDomain
23
24
 
24
25
  nil
25
26
  end
26
-
27
- def self.slds
28
- @slds ||= JSON.parse(File.read("#{__dir__}/../data/slds.json"))
29
- end
30
-
31
- def self.tlds
32
- @tlds ||= JSON.parse(File.read("#{__dir__}/../data/tlds.json"))
33
- end
34
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RootDomain
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.description = spec.summary
14
14
  spec.homepage = "https://github.com/fnando/root_domain"
15
15
  spec.license = "MIT"
16
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
16
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = spec.homepage
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
+ spec.add_dependency "email_data"
31
32
  spec.add_dependency "simpleidn"
32
33
 
33
34
  spec.add_development_dependency "aitch"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: root_domain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-22 00:00:00.000000000 Z
11
+ date: 2020-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: email_data
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: simpleidn
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -142,10 +156,6 @@ files:
142
156
  - Rakefile
143
157
  - bin/console
144
158
  - bin/setup
145
- - bin/sync-data
146
- - data/cctld.json
147
- - data/slds.json
148
- - data/tlds.json
149
159
  - lib/root_domain.rb
150
160
  - lib/root_domain/version.rb
151
161
  - root_domain.gemspec
@@ -164,14 +174,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
174
  requirements:
165
175
  - - ">="
166
176
  - !ruby/object:Gem::Version
167
- version: 2.3.0
177
+ version: 2.7.0
168
178
  required_rubygems_version: !ruby/object:Gem::Requirement
169
179
  requirements:
170
180
  - - ">="
171
181
  - !ruby/object:Gem::Version
172
182
  version: '0'
173
183
  requirements: []
174
- rubygems_version: 3.1.2
184
+ rubygems_version: 3.1.4
175
185
  signing_key:
176
186
  specification_version: 4
177
187
  summary: Extract root domain from hosts (e.g. www.example will be extracted as example.com
@@ -1,105 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/inline"
5
-
6
- gemfile do
7
- gem "aitch"
8
- gem "simpleidn"
9
- end
10
-
11
- class ImportDomainSuffixes
12
- def call
13
- list = []
14
- list += build(country_tlds, cctld: true, tld: true)
15
- list += build(tlds, tld: true)
16
- list += build(slds)
17
-
18
- save_file(:cctld, country_tlds.sort)
19
- save_file(:tlds, tlds.sort)
20
- save_file(:slds, slds.sort)
21
- end
22
-
23
- def save_file(file, data)
24
- File.open("#{__dir__}/../data/#{file}.json", "w") do |io|
25
- io << JSON.pretty_generate(data)
26
- end
27
- end
28
-
29
- def build(suffixes, attrs = {})
30
- suffixes = suffixes
31
- .compact
32
- .map(&:strip)
33
- .reject(&:empty?)
34
- .map(&:downcase)
35
- .uniq
36
-
37
- suffixes.map do |suffix|
38
- name = SimpleIDN.to_ascii(suffix)
39
- attrs.merge(name: name, levels: name.split(".").size)
40
- end
41
- end
42
-
43
- def country_tlds
44
- @country_tlds ||= fetch_country_tlds
45
- end
46
-
47
- def tlds
48
- @tlds ||= fetch_tlds
49
- end
50
-
51
- def slds
52
- @slds ||= (fetch_slds + fetch_public_suffix)
53
- .compact
54
- .map {|sld| SimpleIDN.to_ascii(sld).gsub("!", "") }
55
- .uniq
56
- end
57
-
58
- def fetch_tlds
59
- url = "https://data.iana.org/TLD/tlds-alpha-by-domain.txt"
60
- response = Aitch.get(url)
61
- tlds = response.body.lines
62
- tlds.shift # remove update notice
63
- tlds
64
- .map(&:chomp)
65
- .map(&:downcase)
66
- .uniq
67
- end
68
-
69
- def fetch_country_tlds
70
- url = "https://github.com/samayo/country-json/raw/master/src/country-by-domain-tld.json"
71
- response = Aitch.get(url)
72
- country_tlds = JSON.parse(response.body, symbolize_names: true)
73
-
74
- country_tlds
75
- .map {|info| info[:tld][1..-1] if info[:tld] }
76
- .compact
77
- end
78
-
79
- def fetch_slds
80
- url = "https://www.quackit.com/domain-names/country_domain_extensions.cfm"
81
- response = Aitch.get(url)
82
- response.data.css("b")
83
- .map {|node| node.text.squeeze.downcase }
84
- .select {|sld| sld.start_with?(".") }
85
- .map {|sld| sld[/^\.([-a-z0-9.]+)/, 1] }
86
- .reject(&:nil?)
87
- .reject {|sld| sld.split(".").size < 2 }
88
- end
89
-
90
- def fetch_public_suffix
91
- url = "https://publicsuffix.org/list/public_suffix_list.dat"
92
- response = Aitch.get(url)
93
- content, _ = response.body.split("END ICANN DOMAINS")
94
-
95
- content
96
- .lines
97
- .map {|line| line.gsub(/^\*\./, "") }
98
- .map(&:strip)
99
- .reject(&:empty?)
100
- .reject {|line| line.start_with?("/") }
101
- .select {|line| line.include?(".") }
102
- end
103
- end
104
-
105
- ImportDomainSuffixes.new.call
@@ -1,237 +0,0 @@
1
- [
2
- "ad",
3
- "ae",
4
- "af",
5
- "ag",
6
- "ai",
7
- "al",
8
- "am",
9
- "an",
10
- "ao",
11
- "aq",
12
- "ar",
13
- "as",
14
- "at",
15
- "au",
16
- "aw",
17
- "az",
18
- "ba",
19
- "bb",
20
- "bd",
21
- "be",
22
- "bf",
23
- "bg",
24
- "bh",
25
- "bi",
26
- "bj",
27
- "bm",
28
- "bn",
29
- "bo",
30
- "br",
31
- "bs",
32
- "bt",
33
- "bv",
34
- "bw",
35
- "by",
36
- "bz",
37
- "ca",
38
- "cc",
39
- "cd",
40
- "cf",
41
- "cg",
42
- "ch",
43
- "ci",
44
- "ck",
45
- "cl",
46
- "cm",
47
- "cn",
48
- "co",
49
- "cr",
50
- "cu",
51
- "cv",
52
- "cx",
53
- "cy",
54
- "cz",
55
- "de",
56
- "dj",
57
- "dk",
58
- "dm",
59
- "do",
60
- "dz",
61
- "ec",
62
- "ee",
63
- "eg",
64
- "eh",
65
- "er",
66
- "es",
67
- "et",
68
- "fi",
69
- "fj",
70
- "fk",
71
- "fr",
72
- "ga",
73
- "gb",
74
- "gd",
75
- "ge",
76
- "gf",
77
- "gh",
78
- "gi",
79
- "gl",
80
- "gm",
81
- "gn",
82
- "gp",
83
- "gq",
84
- "gr",
85
- "gs",
86
- "gt",
87
- "gu",
88
- "gw",
89
- "gy",
90
- "hk",
91
- "hm",
92
- "hn",
93
- "hr",
94
- "ht",
95
- "hu",
96
- "id",
97
- "ie",
98
- "il",
99
- "in",
100
- "io",
101
- "iq",
102
- "ir",
103
- "is",
104
- "it",
105
- "jm",
106
- "jo",
107
- "jp",
108
- "ke",
109
- "kg",
110
- "kh",
111
- "ki",
112
- "km",
113
- "kn",
114
- "kp",
115
- "kr",
116
- "kw",
117
- "ky",
118
- "kz",
119
- "la",
120
- "lb",
121
- "lc",
122
- "li",
123
- "lk",
124
- "lr",
125
- "ls",
126
- "lt",
127
- "lu",
128
- "lv",
129
- "ly",
130
- "ma",
131
- "mc",
132
- "md",
133
- "mg",
134
- "mh",
135
- "mk",
136
- "ml",
137
- "mm",
138
- "mn",
139
- "mo",
140
- "mp",
141
- "mq",
142
- "mr",
143
- "ms",
144
- "mt",
145
- "mu",
146
- "mv",
147
- "mw",
148
- "mx",
149
- "my",
150
- "mz",
151
- "na",
152
- "nc",
153
- "ne",
154
- "nf",
155
- "ng",
156
- "ni",
157
- "nl",
158
- "no",
159
- "np",
160
- "nr",
161
- "nu",
162
- "nz",
163
- "om",
164
- "pa",
165
- "pe",
166
- "pf",
167
- "pg",
168
- "ph",
169
- "pk",
170
- "pl",
171
- "pm",
172
- "pn",
173
- "pr",
174
- "ps",
175
- "pt",
176
- "pw",
177
- "py",
178
- "qa",
179
- "re",
180
- "ro",
181
- "ru",
182
- "rw",
183
- "sa",
184
- "sb",
185
- "sc",
186
- "sd",
187
- "se",
188
- "sg",
189
- "sh",
190
- "si",
191
- "sj",
192
- "sk",
193
- "sl",
194
- "sm",
195
- "sn",
196
- "so",
197
- "sr",
198
- "ss",
199
- "st",
200
- "sv",
201
- "sy",
202
- "sz",
203
- "tc",
204
- "td",
205
- "tf",
206
- "tg",
207
- "th",
208
- "tj",
209
- "tk",
210
- "tl",
211
- "tm",
212
- "tn",
213
- "to",
214
- "tr",
215
- "tt",
216
- "tv",
217
- "tz",
218
- "ua",
219
- "ug",
220
- "us",
221
- "uy",
222
- "uz",
223
- "va",
224
- "vc",
225
- "ve",
226
- "vg",
227
- "vi",
228
- "vn",
229
- "vu",
230
- "wf",
231
- "ws",
232
- "ye",
233
- "yt",
234
- "za",
235
- "zm",
236
- "zw"
237
- ]