public_suffix_service 0.6.0 → 0.7.0
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.
- data/CHANGELOG.rdoc +16 -7
- data/Rakefile +46 -16
- data/lib/public_suffix_service.rb +52 -27
- data/lib/public_suffix_service/domain.rb +138 -51
- data/lib/public_suffix_service/errors.rb +16 -4
- data/lib/public_suffix_service/rule.rb +109 -31
- data/lib/public_suffix_service/rule_list.rb +71 -62
- data/lib/public_suffix_service/version.rb +1 -1
- data/public_suffix_service.gemspec +2 -2
- data/test/public_suffix_service/domain_test.rb +12 -5
- data/test/public_suffix_service/rule_list_test.rb +30 -41
- data/test/public_suffix_service/rule_test.rb +44 -29
- data/test/public_suffix_service_test.rb +19 -14
- data/test/test_helper.rb +2 -1
- metadata +5 -5
data/CHANGELOG.rdoc
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== Release 0.7.0
|
4
|
+
|
5
|
+
* CHANGED: Using YARD to document the code instead of RDoc.
|
6
|
+
|
7
|
+
* FIXED: RuleList cache is not recreated when a new rule is appended to the list (#6)
|
8
|
+
|
9
|
+
* FIXED: PublicSuffixService.valid? should return false if the domain is not defined or not allowed (#4, #5)
|
10
|
+
|
11
|
+
|
3
12
|
== Release 0.6.0
|
4
13
|
|
5
|
-
*
|
6
|
-
|
14
|
+
* NEW: PublicSuffixService.parse raises DomainNotAllowed when trying to parse a domain name
|
15
|
+
which exists, but is not allowed by the current definition list (#3)
|
7
16
|
|
8
|
-
|
9
|
-
|
17
|
+
PublicSuffixService.parse("nic.do")
|
18
|
+
# => PublicSuffixService::DomainNotAllowed
|
10
19
|
|
11
20
|
* CHANGED: Renamed PublicSuffixService::InvalidDomain to PublicSuffixService::DomainInvalid
|
12
21
|
|
@@ -51,11 +60,11 @@
|
|
51
60
|
|
52
61
|
== Release 0.2.0
|
53
62
|
|
54
|
-
*
|
63
|
+
* NEW: DomainName#valid?
|
55
64
|
|
56
|
-
*
|
65
|
+
* NEW: DomainName#parse and DomainName#parse!
|
57
66
|
|
58
|
-
*
|
67
|
+
* NEW: DomainName#valid_domain? and DomainName#valid_subdomain?
|
59
68
|
|
60
69
|
* CHANGED: Make sure RuleList lookup is only performed once.
|
61
70
|
|
data/Rakefile
CHANGED
@@ -28,13 +28,6 @@ Rake::TestTask.new do |t|
|
|
28
28
|
t.verbose = true
|
29
29
|
end
|
30
30
|
|
31
|
-
# Generate documentation
|
32
|
-
Rake::RDocTask.new do |rd|
|
33
|
-
rd.main = "README.rdoc"
|
34
|
-
rd.rdoc_files.include("*.rdoc", "lib/**/*.rb")
|
35
|
-
rd.rdoc_dir = "rdoc"
|
36
|
-
end
|
37
|
-
|
38
31
|
# Run test by default.
|
39
32
|
task :default => ["test"]
|
40
33
|
|
@@ -73,7 +66,7 @@ spec = Gem::Specification.new do |s|
|
|
73
66
|
# s.add_dependency("some_other_gem", "~> 0.1.0")
|
74
67
|
|
75
68
|
# If your tests use any gems, include them here
|
76
|
-
s.add_development_dependency("
|
69
|
+
s.add_development_dependency("rr")
|
77
70
|
end
|
78
71
|
|
79
72
|
# This task actually builds the gem. We also regenerate a static
|
@@ -96,25 +89,67 @@ task :clean => [:clobber] do
|
|
96
89
|
end
|
97
90
|
|
98
91
|
desc "Remove any generated file"
|
99
|
-
task :clobber => [:clobber_rdoc, :
|
92
|
+
task :clobber => [:clobber_rdoc, :clobber_package]
|
100
93
|
|
101
94
|
desc "Package the library and generates the gemspec"
|
102
95
|
task :package => [:gemspec]
|
103
96
|
|
97
|
+
|
98
|
+
desc "Generate RDoc documentation"
|
99
|
+
Rake::RDocTask.new do |r|
|
100
|
+
r.main = "README.rdoc"
|
101
|
+
r.rdoc_files.include("*.rdoc", "lib/**/*.rb")
|
102
|
+
r.rdoc_dir = "rdoc"
|
103
|
+
end
|
104
|
+
|
105
|
+
namespace :rdoc do
|
106
|
+
desc "Publish RDoc documentation to the site"
|
107
|
+
task :publish => [:clobber_rdoc, :rdoc] do
|
108
|
+
ENV["username"] || raise(ArgumentError, "Missing ssh username")
|
109
|
+
sh "rsync -avz --delete rdoc/ #{ENV["username"]}@code:/var/www/apps/code/#{PKG_NAME}/rdoc"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
begin
|
115
|
+
require "yard"
|
116
|
+
require "yard/rake/yardoc_task"
|
117
|
+
|
118
|
+
YARD::Rake::YardocTask.new(:yardoc)
|
119
|
+
|
120
|
+
namespace :yardoc do
|
121
|
+
desc "Publish YARD documentation to the site"
|
122
|
+
task :publish => ["yardoc:clobber", "yardoc"] do
|
123
|
+
ENV["username"] || raise(ArgumentError, "Missing ssh username")
|
124
|
+
sh "rsync -avz --delete yardoc/ #{ENV["username"]}@code:/var/www/apps/code/#{PKG_NAME}/api"
|
125
|
+
end
|
126
|
+
|
127
|
+
desc "Remove YARD products"
|
128
|
+
task :clobber do
|
129
|
+
rm_r "yardoc" rescue nil
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
task :clobber => "yardoc:clobber"
|
134
|
+
rescue LoadError
|
135
|
+
puts "YARD is not available"
|
136
|
+
end
|
137
|
+
|
138
|
+
|
104
139
|
begin
|
105
140
|
require "rcov/rcovtask"
|
106
141
|
|
107
142
|
desc "Create a code coverage report"
|
108
143
|
Rcov::RcovTask.new do |t|
|
109
144
|
t.test_files = FileList["test/**/*_test.rb"]
|
110
|
-
t.ruby_opts << "-Itest -x
|
145
|
+
t.ruby_opts << "-Itest -x rr,rcov,Rakefile"
|
111
146
|
t.verbose = true
|
112
147
|
end
|
113
148
|
rescue LoadError
|
114
|
-
task :clobber_rcov
|
115
149
|
puts "RCov is not available"
|
116
150
|
end
|
117
151
|
|
152
|
+
|
118
153
|
desc "Open an irb session preloaded with this library"
|
119
154
|
task :console do
|
120
155
|
sh "irb -rubygems -I lib -r public_suffix_service.rb"
|
@@ -131,11 +166,6 @@ rescue LoadError
|
|
131
166
|
puts "CodeStatistics (Rails) is not available"
|
132
167
|
end
|
133
168
|
|
134
|
-
desc "Publish documentation to the site"
|
135
|
-
task :publish_rdoc => [:clobber_rdoc, :rdoc] do
|
136
|
-
ENV["username"] || raise(ArgumentError, "Missing ssh username")
|
137
|
-
sh "rsync -avz --delete rdoc/ #{ENV["username"]}@code:/var/www/apps/code/#{PKG_NAME}/api"
|
138
|
-
end
|
139
169
|
|
140
170
|
desc <<-DESC
|
141
171
|
Downloads the Public Suffix List file from the repository \
|
@@ -28,35 +28,48 @@ module PublicSuffixService
|
|
28
28
|
AUTHORS = ["Simone Carletti <weppos@weppos.net>"]
|
29
29
|
|
30
30
|
|
31
|
-
# Parses
|
32
|
-
#
|
31
|
+
# Parses +domain+ and returns the
|
32
|
+
# {PublicSuffixService::Domain} instance.
|
33
33
|
#
|
34
|
-
#
|
34
|
+
# Parsing uses the default {PublicSuffixService::RuleList}.
|
35
35
|
#
|
36
|
-
#
|
36
|
+
# @param [String, #to_s] domain
|
37
|
+
# The domain name to parse.
|
37
38
|
#
|
39
|
+
# @return [PublicSuffixService::Domain]
|
40
|
+
#
|
41
|
+
# @example Parse a valid domain
|
38
42
|
# PublicSuffixService.parse("google.com")
|
39
43
|
# # => #<PubliSuffixService::Domain ...>
|
40
44
|
#
|
45
|
+
# @example Parse a valid subdomain
|
41
46
|
# PublicSuffixService.parse("www.google.com")
|
42
47
|
# # => #<PubliSuffixService::Domain ...>
|
43
|
-
#
|
44
|
-
#
|
45
|
-
# # => PublicSuffixService::DomainInvalid
|
46
|
-
#
|
48
|
+
#
|
49
|
+
# @example Parse an invalid domain
|
47
50
|
# PublicSuffixService.parse("x.yz")
|
48
51
|
# # => PublicSuffixService::DomainInvalid
|
49
52
|
#
|
50
|
-
#
|
53
|
+
# @example Parse an URL (not supported, only domains)
|
54
|
+
# PublicSuffixService.parse("http://www.google.com")
|
55
|
+
# # => PublicSuffixService::DomainInvalid
|
56
|
+
#
|
57
|
+
# @raise [PublicSuffixService::Error]
|
58
|
+
# If domain is not a valid domain.
|
59
|
+
# @raise [PublicSuffixService::DomainNotAllowed]
|
60
|
+
# If a rule for +domain+ is found, but the rule
|
61
|
+
# doesn't allow +domain+.
|
51
62
|
#
|
52
|
-
# Returns the PubliSuffixService::Domain domain.
|
53
63
|
def self.parse(domain)
|
54
|
-
rule = RuleList.default.find(domain)
|
64
|
+
rule = RuleList.default.find(domain)
|
65
|
+
if rule.nil?
|
66
|
+
raise(DomainInvalid, "`#{domain}' is not a valid domain")
|
67
|
+
end
|
68
|
+
if !rule.allow?(domain)
|
69
|
+
raise DomainNotAllowed, "`#{domain}' is not allowed according to Registry policy"
|
70
|
+
end
|
55
71
|
|
56
72
|
left, right = rule.decompose(domain)
|
57
|
-
if right.nil?
|
58
|
-
raise DomainNotAllowed, "Rule `#{rule.name}' doesn't allow `#{domain}'"
|
59
|
-
end
|
60
73
|
|
61
74
|
parts = left.split(".")
|
62
75
|
# If we have 0 parts left, there is just a tld and no domain or subdomain
|
@@ -69,30 +82,42 @@ module PublicSuffixService
|
|
69
82
|
Domain.new(tld, sld, trd)
|
70
83
|
end
|
71
84
|
|
72
|
-
# Checks whether
|
85
|
+
# Checks whether +domain+ is assigned and allowed,
|
86
|
+
# without actually parsing it.
|
73
87
|
#
|
74
88
|
# This method doesn't care whether domain is a domain or subdomain.
|
75
|
-
# The check is performed using the default PublicSuffixService::RuleList.
|
89
|
+
# The check is performed using the default {PublicSuffixService::RuleList}.
|
76
90
|
#
|
77
|
-
#
|
91
|
+
# @param [String, #to_s] domain
|
92
|
+
# The domain name to check.
|
78
93
|
#
|
79
|
-
#
|
94
|
+
# @return [Boolean]
|
80
95
|
#
|
81
|
-
#
|
96
|
+
# @example Check a valid domain
|
97
|
+
# PublicSuffixService.valid?("example.com")
|
82
98
|
# # => true
|
83
|
-
#
|
84
|
-
#
|
99
|
+
#
|
100
|
+
# @example Check a valid subdomain
|
101
|
+
# PublicSuffixService.valid?("www.example.com")
|
85
102
|
# # => true
|
86
|
-
#
|
87
|
-
#
|
103
|
+
#
|
104
|
+
# @example Check a not-assigned domain
|
105
|
+
# PublicSuffixService.valid?("example.zip")
|
88
106
|
# # => false
|
89
|
-
#
|
90
|
-
#
|
107
|
+
#
|
108
|
+
# @example Check a not-allowed domain
|
109
|
+
# PublicSuffixService.valid?("example.do")
|
110
|
+
# # => false
|
111
|
+
# PublicSuffixService.valid?("www.example.do")
|
112
|
+
# # => true
|
113
|
+
#
|
114
|
+
# @example Check an URL (which is not a valid domain)
|
115
|
+
# PublicSuffixService.valid?("http://www.example.com")
|
91
116
|
# # => false
|
92
117
|
#
|
93
|
-
# Returns Boolean.
|
94
118
|
def self.valid?(domain)
|
95
|
-
|
119
|
+
rule = RuleList.default.find(domain)
|
120
|
+
!rule.nil? && rule.allow?(domain)
|
96
121
|
end
|
97
122
|
|
98
123
|
end
|
@@ -18,79 +18,127 @@ module PublicSuffixService
|
|
18
18
|
|
19
19
|
class Domain
|
20
20
|
|
21
|
-
# Splits a string into its possible labels
|
22
|
-
# from the input string.
|
21
|
+
# Splits a string into its possible labels
|
22
|
+
# as a domain in reverse order from the input string.
|
23
|
+
#
|
23
24
|
# The input is not validated, but it is assumed to be a valid domain.
|
24
25
|
#
|
25
|
-
#
|
26
|
+
# @param [String, #to_s] domain
|
27
|
+
# The domain name to split.
|
28
|
+
#
|
29
|
+
# @return [Array<String>]
|
26
30
|
#
|
27
|
-
#
|
31
|
+
# @example
|
28
32
|
#
|
29
|
-
# domain_to_labels('google.com
|
30
|
-
# # => ['
|
33
|
+
# domain_to_labels('google.com')
|
34
|
+
# # => ['com', 'google']
|
35
|
+
#
|
36
|
+
# domain_to_labels('google.co.uk')
|
37
|
+
# # => ['uk', 'co', 'google']
|
31
38
|
#
|
32
|
-
# Returns an Array of String representing the possible labels.
|
33
39
|
def self.domain_to_labels(domain)
|
34
40
|
domain.to_s.split(".").reverse
|
35
41
|
end
|
36
42
|
|
43
|
+
# Creates and returns a new {PublicSuffixService::Domain} instance.
|
44
|
+
#
|
45
|
+
# @overload initialize(tld)
|
46
|
+
# Initializes with a +tld+.
|
47
|
+
# @param [String] tld The TLD (extension)
|
48
|
+
# @overload initialize(tld, sld)
|
49
|
+
# Initializes with a +tld+ and +sld+.
|
50
|
+
# @param [String] tld The TLD (extension)
|
51
|
+
# @param [String] sld The TRD (domain)
|
52
|
+
# @overload initialize(tld, sld, trd)
|
53
|
+
# Initializes with a +tld+, +sld+ and +trd+.
|
54
|
+
# @param [String] tld The TLD (extension)
|
55
|
+
# @param [String] sld The SLD (domain)
|
56
|
+
# @param [String] tld The TRD (subdomain)
|
57
|
+
#
|
58
|
+
# @yield [self] Yields on self.
|
59
|
+
# @yieldparam [PublicSuffixService::Domain] self The newly creates instance
|
60
|
+
#
|
61
|
+
# @example Initialize with a TLD
|
62
|
+
# PublicSuffixService::Domain.new("com")
|
63
|
+
# # => #<PublicSuffixService::Domain @tld="com">
|
64
|
+
#
|
65
|
+
# @example Initialize with a TLD and SLD
|
66
|
+
# PublicSuffixService::Domain.new("com", "example")
|
67
|
+
# # => #<PublicSuffixService::Domain @tld="com", @trd=nil>
|
68
|
+
#
|
69
|
+
# @example Initialize with a TLD, SLD and TRD
|
70
|
+
# PublicSuffixService::Domain.new("com", "example", "wwww")
|
71
|
+
# # => #<PublicSuffixService::Domain @tld="com", @trd=nil, @sld="example">
|
72
|
+
#
|
37
73
|
def initialize(*args, &block)
|
38
74
|
@tld, @sld, @trd = args
|
39
75
|
yield(self) if block_given?
|
40
76
|
end
|
41
77
|
|
42
|
-
#
|
78
|
+
# Returns a string representation of this object.
|
43
79
|
#
|
44
|
-
#
|
80
|
+
# @return [String]
|
45
81
|
def to_s
|
46
82
|
name
|
47
83
|
end
|
48
84
|
|
85
|
+
# Returns an array containing the domain parts.
|
86
|
+
#
|
87
|
+
# @return [Array<String, nil>]
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
#
|
91
|
+
# PublicSuffixService::Domain.new("google.com").to_a
|
92
|
+
# # => [nil, "google", "com"]
|
93
|
+
#
|
94
|
+
# PublicSuffixService::Domain.new("www.google.com").to_a
|
95
|
+
# # => [nil, "google", "com"]
|
96
|
+
#
|
49
97
|
def to_a
|
50
98
|
[trd, sld, tld]
|
51
99
|
end
|
52
100
|
|
53
101
|
|
54
|
-
#
|
102
|
+
# Returns the Top Level Domain part, aka the extension.
|
55
103
|
#
|
56
|
-
#
|
104
|
+
# @return [String, nil]
|
57
105
|
def tld
|
58
106
|
@tld
|
59
107
|
end
|
60
108
|
|
61
|
-
#
|
109
|
+
# Returns the Second Level Domain part, aka the domain part.
|
62
110
|
#
|
63
|
-
#
|
111
|
+
# @return [String, nil]
|
64
112
|
def sld
|
65
113
|
@sld
|
66
114
|
end
|
67
115
|
|
68
|
-
#
|
116
|
+
# Returns the Third Level Domain part, aka the subdomain part.
|
69
117
|
#
|
70
|
-
#
|
118
|
+
# @return [String, nil]
|
71
119
|
def trd
|
72
120
|
@trd
|
73
121
|
end
|
74
122
|
|
75
123
|
|
76
|
-
#
|
124
|
+
# Returns the full domain name.
|
77
125
|
#
|
78
|
-
#
|
126
|
+
# @return [String]
|
79
127
|
#
|
128
|
+
# @example Gets the domain name of a domain
|
80
129
|
# PublicSuffixService::Domain.new("com", "google").name
|
81
130
|
# # => "google.com"
|
82
131
|
#
|
132
|
+
# @example Gets the domain name of a subdomain
|
83
133
|
# PublicSuffixService::Domain.new("com", "google", "www").name
|
84
134
|
# # => "www.google.com"
|
85
135
|
#
|
86
|
-
# Returns a String with the domain name.
|
87
136
|
def name
|
88
137
|
[trd, sld, tld].reject { |part| part.nil? }.join(".")
|
89
138
|
end
|
90
139
|
|
91
140
|
# Returns a domain-like representation of this object
|
92
|
-
# if the object is a <tt>
|
93
|
-
# <tt>nil</tt> otherwise.
|
141
|
+
# if the object is a {#domain?}, <tt>nil</tt> otherwise.
|
94
142
|
#
|
95
143
|
# PublicSuffixService::Domain.new("com").domain
|
96
144
|
# # => nil
|
@@ -117,15 +165,18 @@ module PublicSuffixService
|
|
117
165
|
# PublicSuffixService::Domain.new("com", "google", "www").sld
|
118
166
|
# # => "google"
|
119
167
|
#
|
120
|
-
#
|
168
|
+
# @return [String]
|
169
|
+
#
|
170
|
+
# @see #domain?
|
171
|
+
# @see #subdomain
|
172
|
+
#
|
121
173
|
def domain
|
122
174
|
return unless domain?
|
123
175
|
[sld, tld].join(".")
|
124
176
|
end
|
125
177
|
|
126
178
|
# Returns a domain-like representation of this object
|
127
|
-
# if the object is a <tt>
|
128
|
-
# <tt>nil</tt> otherwise.
|
179
|
+
# if the object is a {#subdomain?}, <tt>nil</tt> otherwise.
|
129
180
|
#
|
130
181
|
# PublicSuffixService::Domain.new("com").subdomain
|
131
182
|
# # => nil
|
@@ -152,17 +203,22 @@ module PublicSuffixService
|
|
152
203
|
# PublicSuffixService::Domain.new("com", "google", "www").trd
|
153
204
|
# # => "www"
|
154
205
|
#
|
155
|
-
#
|
206
|
+
# @return [String]
|
207
|
+
#
|
208
|
+
# @see #subdomain?
|
209
|
+
# @see #domain
|
210
|
+
#
|
156
211
|
def subdomain
|
157
212
|
return unless subdomain?
|
158
213
|
[trd, sld, tld].join(".")
|
159
214
|
end
|
160
215
|
|
161
|
-
#
|
162
|
-
# in the default PublicSuffixService::RuleList.
|
216
|
+
# Returns the rule matching this domain
|
217
|
+
# in the default {PublicSuffixService::RuleList}.
|
163
218
|
#
|
164
|
-
#
|
165
|
-
#
|
219
|
+
# @return [PublicSuffixService::Rule::Base, nil]
|
220
|
+
# The rule instance a rule matches current domain,
|
221
|
+
# nil if no rule is found.
|
166
222
|
def rule
|
167
223
|
RuleList.default.find(name)
|
168
224
|
end
|
@@ -172,11 +228,13 @@ module PublicSuffixService
|
|
172
228
|
#
|
173
229
|
# This method doesn't actually validate the domain.
|
174
230
|
# It only checks whether the instance contains
|
175
|
-
# a value for the
|
231
|
+
# a value for the {#tld} and {#sld} attributes.
|
176
232
|
# If you also want to validate the domain,
|
177
|
-
# use
|
233
|
+
# use {#valid_domain?} instead.
|
234
|
+
#
|
235
|
+
# @return [Boolean]
|
178
236
|
#
|
179
|
-
#
|
237
|
+
# @example
|
180
238
|
#
|
181
239
|
# PublicSuffixService::Domain.new("com").domain?
|
182
240
|
# # => false
|
@@ -192,7 +250,8 @@ module PublicSuffixService
|
|
192
250
|
# PublicSuffixService::Domain.new("zip", "google").domain?
|
193
251
|
# # => true
|
194
252
|
#
|
195
|
-
#
|
253
|
+
# @see #subdomain?
|
254
|
+
#
|
196
255
|
def domain?
|
197
256
|
!(tld.nil? || sld.nil?)
|
198
257
|
end
|
@@ -201,11 +260,13 @@ module PublicSuffixService
|
|
201
260
|
#
|
202
261
|
# This method doesn't actually validate the subdomain.
|
203
262
|
# It only checks whether the instance contains
|
204
|
-
# a value for the
|
263
|
+
# a value for the {#tld}, {#sld} and {#trd} attributes.
|
205
264
|
# If you also want to validate the domain,
|
206
|
-
# use
|
265
|
+
# use {#valid_subdomain?} instead.
|
207
266
|
#
|
208
|
-
#
|
267
|
+
# @return [Boolean]
|
268
|
+
#
|
269
|
+
# @example
|
209
270
|
#
|
210
271
|
# PublicSuffixService::Domain.new("com").subdomain?
|
211
272
|
# # => false
|
@@ -221,7 +282,8 @@ module PublicSuffixService
|
|
221
282
|
# PublicSuffixService::Domain.new("zip", "google", "www").subdomain?
|
222
283
|
# # => true
|
223
284
|
#
|
224
|
-
#
|
285
|
+
# @see #domain?
|
286
|
+
#
|
225
287
|
def subdomain?
|
226
288
|
!(tld.nil? || sld.nil? || trd.nil?)
|
227
289
|
end
|
@@ -229,35 +291,56 @@ module PublicSuffixService
|
|
229
291
|
# Checks whether <tt>self</tt> is exclusively a domain,
|
230
292
|
# and not a subdomain.
|
231
293
|
#
|
232
|
-
#
|
294
|
+
# @return [Boolean]
|
233
295
|
def is_a_domain?
|
234
296
|
domain? && !subdomain?
|
235
297
|
end
|
236
298
|
|
237
299
|
# Checks whether <tt>self</tt> is exclusively a subdomain.
|
238
300
|
#
|
239
|
-
#
|
301
|
+
# @return [Boolean]
|
240
302
|
def is_a_subdomain?
|
241
303
|
subdomain?
|
242
304
|
end
|
243
305
|
|
244
|
-
# Checks whether <tt>self</tt> is
|
245
|
-
# according to default
|
306
|
+
# Checks whether <tt>self</tt> is assigned and allowed
|
307
|
+
# according to default {RuleList}.
|
246
308
|
#
|
247
|
-
#
|
309
|
+
# This method triggers a new rule lookup in the default {RuleList},
|
248
310
|
# which is a quite intensive task.
|
249
311
|
#
|
250
|
-
#
|
312
|
+
# @return [Boolean]
|
313
|
+
#
|
314
|
+
# @example Check a valid domain
|
315
|
+
# Domain.new("com", "example").valid?
|
316
|
+
# # => true
|
317
|
+
#
|
318
|
+
# @example Check a valid subdomain
|
319
|
+
# Domain.new("com", "example", "www").valid?
|
320
|
+
# # => true
|
321
|
+
#
|
322
|
+
# @example Check a not-assigned domain
|
323
|
+
# Domain.new("zip", "example").valid?
|
324
|
+
# # => false
|
325
|
+
#
|
326
|
+
# @example Check a not-allowed domain
|
327
|
+
# Domain.new("do", "example").valid?
|
328
|
+
# # => false
|
329
|
+
# Domain.new("do", "example", "www").valid?
|
330
|
+
# # => true
|
331
|
+
#
|
251
332
|
def valid?
|
252
|
-
|
333
|
+
r = rule
|
334
|
+
!r.nil? && r.allow?(name)
|
253
335
|
end
|
254
336
|
|
337
|
+
|
255
338
|
# Checks whether <tt>self</tt> looks like a domain and validates
|
256
|
-
# according to default
|
339
|
+
# according to default {RuleList}.
|
257
340
|
#
|
258
|
-
#
|
341
|
+
# @return [Boolean]
|
259
342
|
#
|
260
|
-
#
|
343
|
+
# @example
|
261
344
|
#
|
262
345
|
# PublicSuffixService::Domain.new("com").domain?
|
263
346
|
# # => false
|
@@ -272,17 +355,19 @@ module PublicSuffixService
|
|
272
355
|
# PublicSuffixService::Domain.new("zip", "google").false?
|
273
356
|
# # => true
|
274
357
|
#
|
275
|
-
#
|
358
|
+
# @see #domain?
|
359
|
+
# @see #valid?
|
360
|
+
#
|
276
361
|
def valid_domain?
|
277
362
|
domain? && valid?
|
278
363
|
end
|
279
364
|
|
280
365
|
# Checks whether <tt>self</tt> looks like a subdomain and validates
|
281
|
-
# according to default
|
366
|
+
# according to default {RuleList}.
|
282
367
|
#
|
283
|
-
#
|
368
|
+
# @return [Boolean]
|
284
369
|
#
|
285
|
-
#
|
370
|
+
# @example
|
286
371
|
#
|
287
372
|
# PublicSuffixService::Domain.new("com").subdomain?
|
288
373
|
# # => false
|
@@ -297,7 +382,9 @@ module PublicSuffixService
|
|
297
382
|
# PublicSuffixService::Domain.new("zip", "google", "www").subdomain?
|
298
383
|
# # => false
|
299
384
|
#
|
300
|
-
#
|
385
|
+
# @see #subdomain?
|
386
|
+
# @see #valid?
|
387
|
+
#
|
301
388
|
def valid_subdomain?
|
302
389
|
subdomain? && valid?
|
303
390
|
end
|