public_suffix 3.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 +7 -0
- data/.gitignore +11 -0
- data/.rubocop.yml +36 -0
- data/.rubocop_defaults.yml +179 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +31 -0
- data/.yardopts +1 -0
- data/2.0-Upgrade.md +52 -0
- data/CHANGELOG.md +353 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +22 -0
- data/README.md +202 -0
- data/Rakefile +51 -0
- data/bin/console +15 -0
- data/data/list.txt +12966 -0
- data/lib/public_suffix.rb +179 -0
- data/lib/public_suffix/domain.rb +235 -0
- data/lib/public_suffix/errors.rb +41 -0
- data/lib/public_suffix/list.rb +247 -0
- data/lib/public_suffix/rule.rb +350 -0
- data/lib/public_suffix/version.rb +13 -0
- data/public_suffix.gemspec +25 -0
- data/test/.empty +2 -0
- data/test/acceptance_test.rb +129 -0
- data/test/benchmarks/bm_find.rb +66 -0
- data/test/benchmarks/bm_find_all.rb +102 -0
- data/test/benchmarks/bm_names.rb +91 -0
- data/test/benchmarks/bm_select.rb +26 -0
- data/test/benchmarks/bm_select_incremental.rb +25 -0
- data/test/benchmarks/bm_valid.rb +101 -0
- data/test/profilers/domain_profiler.rb +12 -0
- data/test/profilers/find_profiler.rb +12 -0
- data/test/profilers/find_profiler_jp.rb +12 -0
- data/test/profilers/initialization_profiler.rb +11 -0
- data/test/profilers/list_profsize.rb +11 -0
- data/test/profilers/object_binsize.rb +57 -0
- data/test/psl_test.rb +52 -0
- data/test/test_helper.rb +18 -0
- data/test/tests.txt +98 -0
- data/test/unit/domain_test.rb +106 -0
- data/test/unit/errors_test.rb +25 -0
- data/test/unit/list_test.rb +241 -0
- data/test/unit/public_suffix_test.rb +188 -0
- data/test/unit/rule_test.rb +222 -0
- metadata +151 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class PublicSuffix::RuleTest < Minitest::Test
|
6
|
+
|
7
|
+
def test_factory_should_return_rule_normal
|
8
|
+
rule = PublicSuffix::Rule.factory("com")
|
9
|
+
assert_instance_of PublicSuffix::Rule::Normal, rule
|
10
|
+
|
11
|
+
rule = PublicSuffix::Rule.factory("verona.it")
|
12
|
+
assert_instance_of PublicSuffix::Rule::Normal, rule
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_factory_should_return_rule_exception
|
16
|
+
rule = PublicSuffix::Rule.factory("!british-library.uk")
|
17
|
+
assert_instance_of PublicSuffix::Rule::Exception, rule
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_factory_should_return_rule_wildcard
|
21
|
+
rule = PublicSuffix::Rule.factory("*.do")
|
22
|
+
assert_instance_of PublicSuffix::Rule::Wildcard, rule
|
23
|
+
|
24
|
+
rule = PublicSuffix::Rule.factory("*.sch.uk")
|
25
|
+
assert_instance_of PublicSuffix::Rule::Wildcard, rule
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def test_default_returns_default_wildcard
|
30
|
+
default = PublicSuffix::Rule.default
|
31
|
+
assert_equal PublicSuffix::Rule::Wildcard.build("*"), default
|
32
|
+
assert_equal %w( example tldnotlisted ), default.decompose("example.tldnotlisted")
|
33
|
+
assert_equal %w( www.example tldnotlisted ), default.decompose("www.example.tldnotlisted")
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
class PublicSuffix::RuleBaseTest < Minitest::Test
|
40
|
+
|
41
|
+
class ::PublicSuffix::Rule::Test < ::PublicSuffix::Rule::Base
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup
|
45
|
+
@klass = PublicSuffix::Rule::Base
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def test_initialize
|
50
|
+
rule = @klass.new(value: "verona.it")
|
51
|
+
assert_instance_of @klass, rule
|
52
|
+
assert_equal "verona.it", rule.value
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def test_equality_with_self
|
57
|
+
rule = PublicSuffix::Rule::Base.new(value: "foo")
|
58
|
+
assert_equal rule, rule
|
59
|
+
end
|
60
|
+
|
61
|
+
# rubocop:disable Style/SingleLineMethods
|
62
|
+
def test_equality_with_internals
|
63
|
+
assert_equal @klass.new(value: "foo"), @klass.new(value: "foo")
|
64
|
+
refute_equal @klass.new(value: "foo"), @klass.new(value: "bar")
|
65
|
+
refute_equal @klass.new(value: "foo"), PublicSuffix::Rule::Test.new(value: "foo")
|
66
|
+
refute_equal @klass.new(value: "foo"), PublicSuffix::Rule::Test.new(value: "bar")
|
67
|
+
refute_equal @klass.new(value: "foo"), Class.new { def name; foo; end }.new
|
68
|
+
end
|
69
|
+
# rubocop:enable Style/SingleLineMethods
|
70
|
+
|
71
|
+
def test_match
|
72
|
+
[
|
73
|
+
# standard match
|
74
|
+
[PublicSuffix::Rule.factory("uk"), "uk", true],
|
75
|
+
[PublicSuffix::Rule.factory("uk"), "example.uk", true],
|
76
|
+
[PublicSuffix::Rule.factory("uk"), "example.co.uk", true],
|
77
|
+
[PublicSuffix::Rule.factory("co.uk"), "example.co.uk", true],
|
78
|
+
|
79
|
+
# FIXME
|
80
|
+
# [PublicSuffix::Rule.factory("*.com"), "com", false],
|
81
|
+
[PublicSuffix::Rule.factory("*.com"), "example.com", true],
|
82
|
+
[PublicSuffix::Rule.factory("*.com"), "foo.example.com", true],
|
83
|
+
[PublicSuffix::Rule.factory("!example.com"), "com", false],
|
84
|
+
[PublicSuffix::Rule.factory("!example.com"), "example.com", true],
|
85
|
+
[PublicSuffix::Rule.factory("!example.com"), "foo.example.com", true],
|
86
|
+
|
87
|
+
# TLD mismatch
|
88
|
+
[PublicSuffix::Rule.factory("gk"), "example.uk", false],
|
89
|
+
[PublicSuffix::Rule.factory("gk"), "example.co.uk", false],
|
90
|
+
[PublicSuffix::Rule.factory("co.uk"), "uk", false],
|
91
|
+
|
92
|
+
# general mismatch
|
93
|
+
[PublicSuffix::Rule.factory("uk.co"), "example.co.uk", false],
|
94
|
+
[PublicSuffix::Rule.factory("go.uk"), "example.co.uk", false],
|
95
|
+
[PublicSuffix::Rule.factory("co.uk"), "uk", false],
|
96
|
+
|
97
|
+
# partial matches/mismatches
|
98
|
+
[PublicSuffix::Rule.factory("co"), "example.co.uk", false],
|
99
|
+
[PublicSuffix::Rule.factory("example"), "example.uk", false],
|
100
|
+
[PublicSuffix::Rule.factory("le.it"), "example.it", false],
|
101
|
+
[PublicSuffix::Rule.factory("le.it"), "le.it", true],
|
102
|
+
[PublicSuffix::Rule.factory("le.it"), "foo.le.it", true],
|
103
|
+
|
104
|
+
].each do |rule, input, expected|
|
105
|
+
assert_equal expected, rule.match?(input)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
def test_parts
|
111
|
+
assert_raises(NotImplementedError) { @klass.new(value: "com").parts }
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_decompose
|
115
|
+
assert_raises(NotImplementedError) { @klass.new(value: "com").decompose("google.com") }
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
class PublicSuffix::RuleNormalTest < Minitest::Test
|
122
|
+
|
123
|
+
def setup
|
124
|
+
@klass = PublicSuffix::Rule::Normal
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
def test_build
|
129
|
+
rule = @klass.build("verona.it")
|
130
|
+
assert_instance_of @klass, rule
|
131
|
+
assert_equal "verona.it", rule.value
|
132
|
+
assert_equal "verona.it", rule.rule
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
def test_length
|
137
|
+
assert_equal 1, @klass.build("com").length
|
138
|
+
assert_equal 2, @klass.build("co.com").length
|
139
|
+
assert_equal 3, @klass.build("mx.co.com").length
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_parts
|
143
|
+
assert_equal %w(com), @klass.build("com").parts
|
144
|
+
assert_equal %w(co com), @klass.build("co.com").parts
|
145
|
+
assert_equal %w(mx co com), @klass.build("mx.co.com").parts
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_decompose
|
149
|
+
assert_equal [nil, nil], @klass.build("com").decompose("com")
|
150
|
+
assert_equal %w( example com ), @klass.build("com").decompose("example.com")
|
151
|
+
assert_equal %w( foo.example com ), @klass.build("com").decompose("foo.example.com")
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
class PublicSuffix::RuleExceptionTest < Minitest::Test
|
158
|
+
|
159
|
+
def setup
|
160
|
+
@klass = PublicSuffix::Rule::Exception
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
def test_initialize
|
165
|
+
rule = @klass.build("!british-library.uk")
|
166
|
+
assert_instance_of @klass, rule
|
167
|
+
assert_equal "british-library.uk", rule.value
|
168
|
+
assert_equal "!british-library.uk", rule.rule
|
169
|
+
end
|
170
|
+
|
171
|
+
|
172
|
+
def test_length
|
173
|
+
assert_equal 2, @klass.build("!british-library.uk").length
|
174
|
+
assert_equal 3, @klass.build("!foo.british-library.uk").length
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_parts
|
178
|
+
assert_equal %w( uk ), @klass.build("!british-library.uk").parts
|
179
|
+
assert_equal %w( tokyo jp ), @klass.build("!metro.tokyo.jp").parts
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_decompose
|
183
|
+
assert_equal [nil, nil], @klass.build("!british-library.uk").decompose("uk")
|
184
|
+
assert_equal %w( british-library uk ), @klass.build("!british-library.uk").decompose("british-library.uk")
|
185
|
+
assert_equal %w( foo.british-library uk ), @klass.build("!british-library.uk").decompose("foo.british-library.uk")
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
class PublicSuffix::RuleWildcardTest < Minitest::Test
|
192
|
+
|
193
|
+
def setup
|
194
|
+
@klass = PublicSuffix::Rule::Wildcard
|
195
|
+
end
|
196
|
+
|
197
|
+
|
198
|
+
def test_initialize
|
199
|
+
rule = @klass.build("*.aichi.jp")
|
200
|
+
assert_instance_of @klass, rule
|
201
|
+
assert_equal "aichi.jp", rule.value
|
202
|
+
assert_equal "*.aichi.jp", rule.rule
|
203
|
+
end
|
204
|
+
|
205
|
+
|
206
|
+
def test_length
|
207
|
+
assert_equal 2, @klass.build("*.uk").length
|
208
|
+
assert_equal 3, @klass.build("*.co.uk").length
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_parts
|
212
|
+
assert_equal %w( uk ), @klass.build("*.uk").parts
|
213
|
+
assert_equal %w( co uk ), @klass.build("*.co.uk").parts
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_decompose
|
217
|
+
assert_equal [nil, nil], @klass.build("*.do").decompose("nic.do")
|
218
|
+
assert_equal %w( google co.uk ), @klass.build("*.uk").decompose("google.co.uk")
|
219
|
+
assert_equal %w( foo.google co.uk ), @klass.build("*.uk").decompose("foo.google.co.uk")
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: public_suffix
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simone Carletti
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-06-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mocha
|
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'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: PublicSuffix can parse and decompose a domain name into top level domain,
|
56
|
+
domain and subdomains.
|
57
|
+
email:
|
58
|
+
- weppos@weppos.net
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files:
|
62
|
+
- LICENSE.txt
|
63
|
+
files:
|
64
|
+
- ".gitignore"
|
65
|
+
- ".rubocop.yml"
|
66
|
+
- ".rubocop_defaults.yml"
|
67
|
+
- ".ruby-gemset"
|
68
|
+
- ".travis.yml"
|
69
|
+
- ".yardopts"
|
70
|
+
- 2.0-Upgrade.md
|
71
|
+
- CHANGELOG.md
|
72
|
+
- Gemfile
|
73
|
+
- LICENSE.txt
|
74
|
+
- README.md
|
75
|
+
- Rakefile
|
76
|
+
- bin/console
|
77
|
+
- data/list.txt
|
78
|
+
- lib/public_suffix.rb
|
79
|
+
- lib/public_suffix/domain.rb
|
80
|
+
- lib/public_suffix/errors.rb
|
81
|
+
- lib/public_suffix/list.rb
|
82
|
+
- lib/public_suffix/rule.rb
|
83
|
+
- lib/public_suffix/version.rb
|
84
|
+
- public_suffix.gemspec
|
85
|
+
- test/.empty
|
86
|
+
- test/acceptance_test.rb
|
87
|
+
- test/benchmarks/bm_find.rb
|
88
|
+
- test/benchmarks/bm_find_all.rb
|
89
|
+
- test/benchmarks/bm_names.rb
|
90
|
+
- test/benchmarks/bm_select.rb
|
91
|
+
- test/benchmarks/bm_select_incremental.rb
|
92
|
+
- test/benchmarks/bm_valid.rb
|
93
|
+
- test/profilers/domain_profiler.rb
|
94
|
+
- test/profilers/find_profiler.rb
|
95
|
+
- test/profilers/find_profiler_jp.rb
|
96
|
+
- test/profilers/initialization_profiler.rb
|
97
|
+
- test/profilers/list_profsize.rb
|
98
|
+
- test/profilers/object_binsize.rb
|
99
|
+
- test/psl_test.rb
|
100
|
+
- test/test_helper.rb
|
101
|
+
- test/tests.txt
|
102
|
+
- test/unit/domain_test.rb
|
103
|
+
- test/unit/errors_test.rb
|
104
|
+
- test/unit/list_test.rb
|
105
|
+
- test/unit/public_suffix_test.rb
|
106
|
+
- test/unit/rule_test.rb
|
107
|
+
homepage: https://simonecarletti.com/code/publicsuffix-ruby
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '2.1'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubygems_version: 3.0.3
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: Domain name parser based on the Public Suffix List.
|
130
|
+
test_files:
|
131
|
+
- test/acceptance_test.rb
|
132
|
+
- test/benchmarks/bm_find.rb
|
133
|
+
- test/benchmarks/bm_find_all.rb
|
134
|
+
- test/benchmarks/bm_names.rb
|
135
|
+
- test/benchmarks/bm_select.rb
|
136
|
+
- test/benchmarks/bm_select_incremental.rb
|
137
|
+
- test/benchmarks/bm_valid.rb
|
138
|
+
- test/profilers/domain_profiler.rb
|
139
|
+
- test/profilers/find_profiler.rb
|
140
|
+
- test/profilers/find_profiler_jp.rb
|
141
|
+
- test/profilers/initialization_profiler.rb
|
142
|
+
- test/profilers/list_profsize.rb
|
143
|
+
- test/profilers/object_binsize.rb
|
144
|
+
- test/psl_test.rb
|
145
|
+
- test/test_helper.rb
|
146
|
+
- test/tests.txt
|
147
|
+
- test/unit/domain_test.rb
|
148
|
+
- test/unit/errors_test.rb
|
149
|
+
- test/unit/list_test.rb
|
150
|
+
- test/unit/public_suffix_test.rb
|
151
|
+
- test/unit/rule_test.rb
|