root_domain 0.1.0 → 0.1.1

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 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
- ]