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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rubocop.yml +36 -0
  4. data/.rubocop_defaults.yml +179 -0
  5. data/.ruby-gemset +1 -0
  6. data/.travis.yml +31 -0
  7. data/.yardopts +1 -0
  8. data/2.0-Upgrade.md +52 -0
  9. data/CHANGELOG.md +353 -0
  10. data/Gemfile +12 -0
  11. data/LICENSE.txt +22 -0
  12. data/README.md +202 -0
  13. data/Rakefile +51 -0
  14. data/bin/console +15 -0
  15. data/data/list.txt +12966 -0
  16. data/lib/public_suffix.rb +179 -0
  17. data/lib/public_suffix/domain.rb +235 -0
  18. data/lib/public_suffix/errors.rb +41 -0
  19. data/lib/public_suffix/list.rb +247 -0
  20. data/lib/public_suffix/rule.rb +350 -0
  21. data/lib/public_suffix/version.rb +13 -0
  22. data/public_suffix.gemspec +25 -0
  23. data/test/.empty +2 -0
  24. data/test/acceptance_test.rb +129 -0
  25. data/test/benchmarks/bm_find.rb +66 -0
  26. data/test/benchmarks/bm_find_all.rb +102 -0
  27. data/test/benchmarks/bm_names.rb +91 -0
  28. data/test/benchmarks/bm_select.rb +26 -0
  29. data/test/benchmarks/bm_select_incremental.rb +25 -0
  30. data/test/benchmarks/bm_valid.rb +101 -0
  31. data/test/profilers/domain_profiler.rb +12 -0
  32. data/test/profilers/find_profiler.rb +12 -0
  33. data/test/profilers/find_profiler_jp.rb +12 -0
  34. data/test/profilers/initialization_profiler.rb +11 -0
  35. data/test/profilers/list_profsize.rb +11 -0
  36. data/test/profilers/object_binsize.rb +57 -0
  37. data/test/psl_test.rb +52 -0
  38. data/test/test_helper.rb +18 -0
  39. data/test/tests.txt +98 -0
  40. data/test/unit/domain_test.rb +106 -0
  41. data/test/unit/errors_test.rb +25 -0
  42. data/test/unit/list_test.rb +241 -0
  43. data/test/unit/public_suffix_test.rb +188 -0
  44. data/test/unit/rule_test.rb +222 -0
  45. 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