public_suffix 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
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