public_suffix 2.0.5 → 4.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/FUNDING.yml +12 -0
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/release.yml +16 -0
- data/.github/workflows/tests.yml +28 -0
- data/.gitignore +5 -8
- data/.rubocop.yml +19 -1
- data/{.rubocop_defaults.yml → .rubocop_opinionated.yml} +62 -34
- data/CHANGELOG.md +156 -54
- data/Gemfile +9 -5
- data/LICENSE.txt +1 -1
- data/README.md +44 -15
- data/Rakefile +9 -4
- data/SECURITY.md +104 -0
- data/bin/console +15 -0
- data/data/list.txt +3163 -973
- data/lib/public_suffix/domain.rb +4 -4
- data/lib/public_suffix/errors.rb +3 -1
- data/lib/public_suffix/list.rb +78 -117
- data/lib/public_suffix/rule.rb +54 -62
- data/lib/public_suffix/version.rb +8 -3
- data/lib/public_suffix.rb +38 -32
- data/public_suffix.gemspec +9 -5
- data/test/.empty +2 -0
- data/test/acceptance_test.rb +43 -31
- 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/{initialization_profiler.rb → profilers/initialization_profiler.rb} +1 -1
- data/test/profilers/list_profsize.rb +11 -0
- data/test/profilers/object_binsize.rb +57 -0
- data/test/psl_test.rb +7 -4
- data/test/test_helper.rb +3 -14
- data/test/unit/domain_test.rb +17 -15
- data/test/unit/errors_test.rb +2 -0
- data/test/unit/list_test.rb +54 -72
- data/test/unit/public_suffix_test.rb +24 -22
- data/test/unit/rule_test.rb +77 -79
- metadata +32 -70
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -23
- data/test/benchmark_helper.rb +0 -4
- data/test/execution_profiler.rb +0 -14
- data/test/performance_benchmark.rb +0 -38
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require_relative "../../lib/public_suffix"
|
3
|
+
|
4
|
+
NAME_SHORT = "example.de"
|
5
|
+
NAME_MEDIUM = "www.subdomain.example.de"
|
6
|
+
NAME_LONG = "one.two.three.four.five.example.de"
|
7
|
+
NAME_WILD = "one.two.three.four.five.example.bd"
|
8
|
+
NAME_EXCP = "one.two.three.four.five.www.ck"
|
9
|
+
|
10
|
+
IAAA = "www.example.ac"
|
11
|
+
IZZZ = "www.example.zone"
|
12
|
+
|
13
|
+
PAAA = "one.two.three.four.five.example.beep.pl"
|
14
|
+
PZZZ = "one.two.three.four.five.example.now.sh"
|
15
|
+
|
16
|
+
JP = "www.yokoshibahikari.chiba.jp"
|
17
|
+
IT = "www.example.it"
|
18
|
+
COM = "www.example.com"
|
19
|
+
|
20
|
+
TIMES = (ARGV.first || 50_000).to_i
|
21
|
+
|
22
|
+
# Initialize
|
23
|
+
PublicSuffix.valid?("example.com")
|
24
|
+
|
25
|
+
Benchmark.bmbm(25) do |x|
|
26
|
+
x.report("NAME_SHORT") do
|
27
|
+
TIMES.times { PublicSuffix.valid?(NAME_SHORT) == true }
|
28
|
+
end
|
29
|
+
x.report("NAME_SHORT (noprivate)") do
|
30
|
+
TIMES.times { PublicSuffix.valid?(NAME_SHORT, ignore_private: true) == true }
|
31
|
+
end
|
32
|
+
x.report("NAME_MEDIUM") do
|
33
|
+
TIMES.times { PublicSuffix.valid?(NAME_MEDIUM) == true }
|
34
|
+
end
|
35
|
+
x.report("NAME_MEDIUM (noprivate)") do
|
36
|
+
TIMES.times { PublicSuffix.valid?(NAME_MEDIUM, ignore_private: true) == true }
|
37
|
+
end
|
38
|
+
x.report("NAME_LONG") do
|
39
|
+
TIMES.times { PublicSuffix.valid?(NAME_LONG) == true }
|
40
|
+
end
|
41
|
+
x.report("NAME_LONG (noprivate)") do
|
42
|
+
TIMES.times { PublicSuffix.valid?(NAME_LONG, ignore_private: true) == true }
|
43
|
+
end
|
44
|
+
x.report("NAME_WILD") do
|
45
|
+
TIMES.times { PublicSuffix.valid?(NAME_WILD) == true }
|
46
|
+
end
|
47
|
+
x.report("NAME_WILD (noprivate)") do
|
48
|
+
TIMES.times { PublicSuffix.valid?(NAME_WILD, ignore_private: true) == true }
|
49
|
+
end
|
50
|
+
x.report("NAME_EXCP") do
|
51
|
+
TIMES.times { PublicSuffix.valid?(NAME_EXCP) == true }
|
52
|
+
end
|
53
|
+
x.report("NAME_EXCP (noprivate)") do
|
54
|
+
TIMES.times { PublicSuffix.valid?(NAME_EXCP, ignore_private: true) == true }
|
55
|
+
end
|
56
|
+
|
57
|
+
x.report("IAAA") do
|
58
|
+
TIMES.times { PublicSuffix.valid?(IAAA) == true }
|
59
|
+
end
|
60
|
+
x.report("IAAA (noprivate)") do
|
61
|
+
TIMES.times { PublicSuffix.valid?(IAAA, ignore_private: true) == true }
|
62
|
+
end
|
63
|
+
x.report("IZZZ") do
|
64
|
+
TIMES.times { PublicSuffix.valid?(IZZZ) == true }
|
65
|
+
end
|
66
|
+
x.report("IZZZ (noprivate)") do
|
67
|
+
TIMES.times { PublicSuffix.valid?(IZZZ, ignore_private: true) == true }
|
68
|
+
end
|
69
|
+
|
70
|
+
x.report("PAAA") do
|
71
|
+
TIMES.times { PublicSuffix.valid?(PAAA) == true }
|
72
|
+
end
|
73
|
+
x.report("PAAA (noprivate)") do
|
74
|
+
TIMES.times { PublicSuffix.valid?(PAAA, ignore_private: true) == true }
|
75
|
+
end
|
76
|
+
x.report("PZZZ") do
|
77
|
+
TIMES.times { PublicSuffix.valid?(PZZZ) == true }
|
78
|
+
end
|
79
|
+
x.report("PZZZ (noprivate)") do
|
80
|
+
TIMES.times { PublicSuffix.valid?(PZZZ, ignore_private: true) == true }
|
81
|
+
end
|
82
|
+
|
83
|
+
x.report("JP") do
|
84
|
+
TIMES.times { PublicSuffix.valid?(JP) == true }
|
85
|
+
end
|
86
|
+
x.report("JP (noprivate)") do
|
87
|
+
TIMES.times { PublicSuffix.valid?(JP, ignore_private: true) == true }
|
88
|
+
end
|
89
|
+
x.report("IT") do
|
90
|
+
TIMES.times { PublicSuffix.valid?(IT) == true }
|
91
|
+
end
|
92
|
+
x.report("IT (noprivate)") do
|
93
|
+
TIMES.times { PublicSuffix.valid?(IT, ignore_private: true) == true }
|
94
|
+
end
|
95
|
+
x.report("COM") do
|
96
|
+
TIMES.times { PublicSuffix.valid?(COM) == true }
|
97
|
+
end
|
98
|
+
x.report("COM (noprivate)") do
|
99
|
+
TIMES.times { PublicSuffix.valid?(COM, ignore_private: true) == true }
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
|
2
|
+
|
3
|
+
require "memory_profiler"
|
4
|
+
require "public_suffix"
|
5
|
+
|
6
|
+
PublicSuffix::List.default
|
7
|
+
|
8
|
+
report = MemoryProfiler.report do
|
9
|
+
PublicSuffix::List.default.find("www.example.com")
|
10
|
+
end
|
11
|
+
|
12
|
+
report.pretty_print
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
|
2
|
+
|
3
|
+
require "memory_profiler"
|
4
|
+
require "public_suffix"
|
5
|
+
|
6
|
+
PublicSuffix::List.default
|
7
|
+
|
8
|
+
report = MemoryProfiler.report do
|
9
|
+
PublicSuffix::List.default.find("a.b.ide.kyoto.jp")
|
10
|
+
end
|
11
|
+
|
12
|
+
report.pretty_print
|
@@ -0,0 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
|
2
|
+
|
3
|
+
require_relative "object_binsize"
|
4
|
+
require "public_suffix"
|
5
|
+
|
6
|
+
list = PublicSuffix::List.default
|
7
|
+
puts "#{list.size} rules:"
|
8
|
+
|
9
|
+
prof = ObjectBinsize.new
|
10
|
+
prof.report(PublicSuffix::List.default, label: "PublicSuffix::List size")
|
11
|
+
prof.report(PublicSuffix::List.default.instance_variable_get(:@rules), label: "Size of rules")
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
# A very simple memory profiles that checks the full size of a variable
|
4
|
+
# by serializing into a binary file.
|
5
|
+
#
|
6
|
+
# Yes, I know this is very rough, but there are cases where ObjectSpace.memsize_of
|
7
|
+
# doesn't cooperate, and this is one of the possible workarounds.
|
8
|
+
#
|
9
|
+
# For certain cases, it works (TM).
|
10
|
+
class ObjectBinsize
|
11
|
+
|
12
|
+
def measure(var, label: nil)
|
13
|
+
dump(var, label: label)
|
14
|
+
end
|
15
|
+
|
16
|
+
def report(var, label: nil, padding: 10)
|
17
|
+
file = measure(var, label: label)
|
18
|
+
|
19
|
+
size = format_integer(file.size)
|
20
|
+
name = label || File.basename(file.path)
|
21
|
+
printf("%#{padding}s %s\n", size, name)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def dump(var, **args)
|
27
|
+
file = Tempfile.new(args[:label].to_s)
|
28
|
+
file.write(Marshal.dump(var))
|
29
|
+
file
|
30
|
+
ensure
|
31
|
+
file.close
|
32
|
+
end
|
33
|
+
|
34
|
+
def format_integer(int)
|
35
|
+
int.to_s.reverse.gsub(/...(?=.)/, '\&,').reverse
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
if __FILE__ == $0
|
41
|
+
prof = ObjectBinsize.new
|
42
|
+
|
43
|
+
prof.report(nil, label: "nil")
|
44
|
+
prof.report(false, label: "false")
|
45
|
+
prof.report(true, label: "true")
|
46
|
+
prof.report(0, label: "integer")
|
47
|
+
prof.report("", label: "empty string")
|
48
|
+
prof.report({}, label: "empty hash")
|
49
|
+
prof.report({}, label: "empty array")
|
50
|
+
|
51
|
+
prof.report({ foo: "1" }, label: "hash 1 item (symbol)")
|
52
|
+
prof.report({ foo: "1", bar: 2 }, label: "hash 2 items (symbol)")
|
53
|
+
prof.report({ "foo" => "1" }, label: "hash 1 item (string)")
|
54
|
+
prof.report({ "foo" => "1", "bar" => 2 }, label: "hash 2 items (string)")
|
55
|
+
|
56
|
+
prof.report("big string" * 200, label: "big string * 200")
|
57
|
+
end
|
data/test/psl_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
require "public_suffix"
|
3
5
|
|
@@ -5,14 +7,15 @@ require "public_suffix"
|
|
5
7
|
# the definitions satisfies the test suite.
|
6
8
|
class PslTest < Minitest::Test
|
7
9
|
|
8
|
-
ROOT = File.expand_path("
|
10
|
+
ROOT = File.expand_path("..", __dir__)
|
9
11
|
|
10
|
-
# rubocop:disable
|
12
|
+
# rubocop:disable Security/Eval
|
11
13
|
def self.tests
|
12
14
|
File.readlines(File.join(ROOT, "test/tests.txt")).map do |line|
|
13
15
|
line = line.strip
|
14
16
|
next if line.empty?
|
15
17
|
next if line.start_with?("//")
|
18
|
+
|
16
19
|
input, output = line.split(", ")
|
17
20
|
|
18
21
|
# handle the case of eval("null"), it must be eval("nil")
|
@@ -24,7 +27,7 @@ class PslTest < Minitest::Test
|
|
24
27
|
[input, output]
|
25
28
|
end
|
26
29
|
end
|
27
|
-
# rubocop:enable
|
30
|
+
# rubocop:enable Security/Eval
|
28
31
|
|
29
32
|
|
30
33
|
def test_valid
|
@@ -35,7 +38,7 @@ class PslTest < Minitest::Test
|
|
35
38
|
failures = []
|
36
39
|
self.class.tests.each do |input, output|
|
37
40
|
# Punycode domains are not supported ATM
|
38
|
-
next if input =~ /xn
|
41
|
+
next if input =~ /xn--/
|
39
42
|
|
40
43
|
domain = PublicSuffix.domain(input) rescue nil
|
41
44
|
failures << [input, output, domain] if output != domain
|
data/test/test_helper.rb
CHANGED
@@ -1,21 +1,10 @@
|
|
1
|
-
|
2
|
-
require "coveralls"
|
3
|
-
Coveralls.wear!
|
4
|
-
end
|
1
|
+
# frozen_string_literal: true
|
5
2
|
|
6
3
|
require "minitest/autorun"
|
7
4
|
require "minitest/reporters"
|
8
|
-
require "mocha/
|
5
|
+
require "mocha/minitest"
|
9
6
|
|
10
7
|
Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
|
11
8
|
|
12
|
-
$LOAD_PATH.unshift File.expand_path("
|
9
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
|
13
10
|
require "public_suffix"
|
14
|
-
|
15
|
-
Minitest::Test.class_eval do
|
16
|
-
unless method_exists?(:assert_not_equal)
|
17
|
-
def assert_not_equal(exp, act, msg = nil)
|
18
|
-
assert_operator(exp, :!=, act, msg)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/test/unit/domain_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
5
|
class PublicSuffix::DomainTest < Minitest::Test
|
@@ -23,23 +25,23 @@ class PublicSuffix::DomainTest < Minitest::Test
|
|
23
25
|
|
24
26
|
def test_initialize_with_tld
|
25
27
|
domain = @klass.new("com")
|
26
|
-
assert_equal "com",
|
27
|
-
|
28
|
-
|
28
|
+
assert_equal "com", domain.tld
|
29
|
+
assert_nil domain.sld
|
30
|
+
assert_nil domain.trd
|
29
31
|
end
|
30
32
|
|
31
33
|
def test_initialize_with_tld_and_sld
|
32
34
|
domain = @klass.new("com", "google")
|
33
|
-
assert_equal "com",
|
34
|
-
assert_equal "google",
|
35
|
-
|
35
|
+
assert_equal "com", domain.tld
|
36
|
+
assert_equal "google", domain.sld
|
37
|
+
assert_nil domain.trd
|
36
38
|
end
|
37
39
|
|
38
40
|
def test_initialize_with_tld_and_sld_and_trd
|
39
41
|
domain = @klass.new("com", "google", "www")
|
40
|
-
assert_equal "com",
|
41
|
-
assert_equal "google",
|
42
|
-
assert_equal "www",
|
42
|
+
assert_equal "com", domain.tld
|
43
|
+
assert_equal "google", domain.sld
|
44
|
+
assert_equal "www", domain.trd
|
43
45
|
end
|
44
46
|
|
45
47
|
|
@@ -76,8 +78,8 @@ class PublicSuffix::DomainTest < Minitest::Test
|
|
76
78
|
end
|
77
79
|
|
78
80
|
def test_domain
|
79
|
-
|
80
|
-
|
81
|
+
assert_nil @klass.new("com").domain
|
82
|
+
assert_nil @klass.new("tldnotlisted").domain
|
81
83
|
assert_equal "google.com", @klass.new("com", "google").domain
|
82
84
|
assert_equal "google.tldnotlisted", @klass.new("tldnotlisted", "google").domain
|
83
85
|
assert_equal "google.com", @klass.new("com", "google", "www").domain
|
@@ -85,10 +87,10 @@ class PublicSuffix::DomainTest < Minitest::Test
|
|
85
87
|
end
|
86
88
|
|
87
89
|
def test_subdomain
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
90
|
+
assert_nil @klass.new("com").subdomain
|
91
|
+
assert_nil @klass.new("tldnotlisted").subdomain
|
92
|
+
assert_nil @klass.new("com", "google").subdomain
|
93
|
+
assert_nil @klass.new("tldnotlisted", "google").subdomain
|
92
94
|
assert_equal "www.google.com", @klass.new("com", "google", "www").subdomain
|
93
95
|
assert_equal "www.google.tldnotlisted", @klass.new("tldnotlisted", "google", "www").subdomain
|
94
96
|
end
|
data/test/unit/errors_test.rb
CHANGED
data/test/unit/list_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
5
|
class PublicSuffix::ListTest < Minitest::Test
|
@@ -7,7 +9,7 @@ class PublicSuffix::ListTest < Minitest::Test
|
|
7
9
|
end
|
8
10
|
|
9
11
|
def teardown
|
10
|
-
PublicSuffix::List.
|
12
|
+
PublicSuffix::List.default = nil
|
11
13
|
end
|
12
14
|
|
13
15
|
|
@@ -16,10 +18,6 @@ class PublicSuffix::ListTest < Minitest::Test
|
|
16
18
|
assert_equal 0, @list.size
|
17
19
|
end
|
18
20
|
|
19
|
-
def test_initialize_indexes
|
20
|
-
assert_equal({}, @list.indexes)
|
21
|
-
end
|
22
|
-
|
23
21
|
|
24
22
|
def test_equality_with_self
|
25
23
|
list = PublicSuffix::List.new
|
@@ -31,9 +29,34 @@ class PublicSuffix::ListTest < Minitest::Test
|
|
31
29
|
assert_equal PublicSuffix::List.new.add(rule), PublicSuffix::List.new.add(rule)
|
32
30
|
end
|
33
31
|
|
32
|
+
def test_each_without_block
|
33
|
+
list = PublicSuffix::List.parse(<<LIST)
|
34
|
+
alpha
|
35
|
+
beta
|
36
|
+
LIST
|
37
|
+
|
38
|
+
assert_kind_of Enumerator, list.each
|
39
|
+
assert_equal 2, list.each.count
|
40
|
+
assert_equal PublicSuffix::Rule.factory("alpha"), list.each.first
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_each_with_block
|
44
|
+
list = PublicSuffix::List.parse(<<LIST)
|
45
|
+
alpha
|
46
|
+
beta
|
47
|
+
LIST
|
48
|
+
|
49
|
+
entries = []
|
50
|
+
list.each { |r| entries << r }
|
51
|
+
|
52
|
+
assert_equal 2, entries.count
|
53
|
+
assert_equal PublicSuffix::Rule.factory("alpha"), entries.first
|
54
|
+
end
|
55
|
+
|
56
|
+
|
34
57
|
def test_add
|
35
|
-
assert_equal @list, @list.add(PublicSuffix::Rule.factory(""))
|
36
|
-
assert_equal @list, @list << PublicSuffix::Rule.factory("")
|
58
|
+
assert_equal @list, @list.add(PublicSuffix::Rule.factory("foo"))
|
59
|
+
assert_equal @list, @list << PublicSuffix::Rule.factory("bar")
|
37
60
|
assert_equal 2, @list.size
|
38
61
|
end
|
39
62
|
|
@@ -47,13 +70,6 @@ class PublicSuffix::ListTest < Minitest::Test
|
|
47
70
|
assert_equal PublicSuffix::Rule.factory("net"), @list.find("google.net")
|
48
71
|
end
|
49
72
|
|
50
|
-
def test_add_should_not_duplicate_indices
|
51
|
-
@list = PublicSuffix::List.parse("com")
|
52
|
-
@list.add(PublicSuffix::Rule.factory("net"))
|
53
|
-
|
54
|
-
assert_equal @list.indexes["com"], [0]
|
55
|
-
end
|
56
|
-
|
57
73
|
def test_empty?
|
58
74
|
assert @list.empty?
|
59
75
|
@list.add(PublicSuffix::Rule.factory(""))
|
@@ -76,7 +92,7 @@ class PublicSuffix::ListTest < Minitest::Test
|
|
76
92
|
|
77
93
|
|
78
94
|
def test_find
|
79
|
-
list = PublicSuffix::List.parse(<<
|
95
|
+
list = PublicSuffix::List.parse(<<LIST)
|
80
96
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
81
97
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
82
98
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
@@ -102,7 +118,7 @@ io
|
|
102
118
|
blogspot.com
|
103
119
|
|
104
120
|
// ===END PRIVATE DOMAINS===
|
105
|
-
|
121
|
+
LIST
|
106
122
|
|
107
123
|
# match IANA
|
108
124
|
assert_equal PublicSuffix::Rule.factory("com"), list.find("example.com")
|
@@ -129,13 +145,13 @@ EOS
|
|
129
145
|
|
130
146
|
|
131
147
|
def test_select
|
132
|
-
assert_equal 2, list.select
|
148
|
+
assert_equal 2, list.send(:select, "british-library.uk").size
|
133
149
|
end
|
134
150
|
|
135
151
|
def test_select_name_blank
|
136
|
-
assert_equal [], list.select
|
137
|
-
assert_equal [], list.select
|
138
|
-
assert_equal [], list.select
|
152
|
+
assert_equal [], list.send(:select, nil)
|
153
|
+
assert_equal [], list.send(:select, "")
|
154
|
+
assert_equal [], list.send(:select, " ")
|
139
155
|
end
|
140
156
|
|
141
157
|
def test_select_ignore_private
|
@@ -143,43 +159,36 @@ EOS
|
|
143
159
|
list.add r1 = PublicSuffix::Rule.factory("io")
|
144
160
|
list.add r2 = PublicSuffix::Rule.factory("example.io", private: true)
|
145
161
|
|
146
|
-
assert_equal list.select
|
147
|
-
assert_equal list.select
|
148
|
-
assert_equal list.select
|
162
|
+
assert_equal list.send(:select, "foo.io"), [r1]
|
163
|
+
assert_equal list.send(:select, "example.io"), [r1, r2]
|
164
|
+
assert_equal list.send(:select, "foo.example.io"), [r1, r2]
|
149
165
|
|
150
|
-
assert_equal list.select
|
151
|
-
assert_equal list.select
|
152
|
-
assert_equal list.select
|
166
|
+
assert_equal list.send(:select, "foo.io", ignore_private: false), [r1]
|
167
|
+
assert_equal list.send(:select, "example.io", ignore_private: false), [r1, r2]
|
168
|
+
assert_equal list.send(:select, "foo.example.io", ignore_private: false), [r1, r2]
|
153
169
|
|
154
|
-
assert_equal list.select
|
155
|
-
assert_equal list.select
|
156
|
-
assert_equal list.select
|
170
|
+
assert_equal list.send(:select, "foo.io", ignore_private: true), [r1]
|
171
|
+
assert_equal list.send(:select, "example.io", ignore_private: true), [r1]
|
172
|
+
assert_equal list.send(:select, "foo.example.io", ignore_private: true), [r1]
|
157
173
|
end
|
158
174
|
|
159
175
|
|
160
176
|
def test_self_default_getter
|
161
177
|
PublicSuffix::List.default = nil
|
162
|
-
assert_nil
|
178
|
+
assert_nil(PublicSuffix::List.class_eval { @default })
|
163
179
|
PublicSuffix::List.default
|
164
|
-
|
180
|
+
refute_nil(PublicSuffix::List.class_eval { @default })
|
165
181
|
end
|
166
182
|
|
167
183
|
def test_self_default_setter
|
168
184
|
PublicSuffix::List.default
|
169
|
-
|
185
|
+
refute_nil(PublicSuffix::List.class_eval { @default })
|
170
186
|
PublicSuffix::List.default = nil
|
171
|
-
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_self_clear
|
175
|
-
PublicSuffix::List.default
|
176
|
-
assert_not_equal nil, PublicSuffix::List.class_eval { @default }
|
177
|
-
PublicSuffix::List.clear
|
178
|
-
assert_equal nil, PublicSuffix::List.class_eval { @default }
|
187
|
+
assert_nil(PublicSuffix::List.class_eval { @default })
|
179
188
|
end
|
180
189
|
|
181
190
|
def test_self_parse
|
182
|
-
list = PublicSuffix::List.parse(<<
|
191
|
+
list = PublicSuffix::List.parse(<<LIST)
|
183
192
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
184
193
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
185
194
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
@@ -200,51 +209,24 @@ com
|
|
200
209
|
blogspot.com
|
201
210
|
|
202
211
|
// ===END PRIVATE DOMAINS===
|
203
|
-
|
212
|
+
LIST
|
204
213
|
|
205
214
|
assert_instance_of PublicSuffix::List, list
|
206
215
|
assert_equal 4, list.size
|
207
216
|
|
208
217
|
rules = %w( com *.uk !british-library.uk blogspot.com ).map { |name| PublicSuffix::Rule.factory(name) }
|
209
|
-
assert_equal rules, list.to_a
|
218
|
+
assert_equal rules, list.each.to_a
|
210
219
|
|
211
220
|
# private domains
|
212
221
|
assert_equal false, list.find("com").private
|
213
222
|
assert_equal true, list.find("blogspot.com").private
|
214
223
|
end
|
215
224
|
|
216
|
-
def test_self_parse_indexes
|
217
|
-
list = PublicSuffix::List.parse(<<EOS)
|
218
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
219
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
220
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
221
|
-
|
222
|
-
// ===BEGIN ICANN DOMAINS===
|
223
|
-
|
224
|
-
// com
|
225
|
-
com
|
226
|
-
|
227
|
-
// uk
|
228
|
-
*.uk
|
229
|
-
!british-library.uk
|
230
|
-
|
231
|
-
// ===END ICANN DOMAINS===
|
232
|
-
// ===BEGIN PRIVATE DOMAINS===
|
233
|
-
|
234
|
-
// Google, Inc.
|
235
|
-
blogspot.com
|
236
|
-
|
237
|
-
// ===END PRIVATE DOMAINS===
|
238
|
-
EOS
|
239
|
-
|
240
|
-
assert_equal({ "com" => [0, 3], "uk" => [1, 2] }, list.indexes)
|
241
|
-
end
|
242
|
-
|
243
225
|
|
244
226
|
private
|
245
227
|
|
246
228
|
def list
|
247
|
-
@_list ||= PublicSuffix::List.parse(<<
|
229
|
+
@_list ||= PublicSuffix::List.parse(<<LIST)
|
248
230
|
// com : http://en.wikipedia.org/wiki/.com
|
249
231
|
com
|
250
232
|
|
@@ -253,7 +235,7 @@ com
|
|
253
235
|
*.sch.uk
|
254
236
|
!bl.uk
|
255
237
|
!british-library.uk
|
256
|
-
|
238
|
+
LIST
|
257
239
|
end
|
258
240
|
|
259
241
|
end
|