public_suffix 1.4.6 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,10 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  require 'public_suffix/domain'
11
10
  require 'public_suffix/version'
@@ -13,14 +12,8 @@ require 'public_suffix/errors'
13
12
  require 'public_suffix/rule'
14
13
  require 'public_suffix/list'
15
14
 
16
-
17
15
  module PublicSuffix
18
16
 
19
- NAME = "Public Suffix"
20
- GEM = "public_suffix"
21
- AUTHORS = ["Simone Carletti <weppos@weppos.net>"]
22
-
23
-
24
17
  # Parses +domain+ and returns the
25
18
  # {PublicSuffix::Domain} instance.
26
19
  #
@@ -1,11 +1,10 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  module PublicSuffix
11
10
 
@@ -33,6 +32,8 @@ module PublicSuffix
33
32
  domain.to_s.split(".").reverse
34
33
  end
35
34
 
35
+ attr_reader :tld, :sld, :trd
36
+
36
37
  # Creates and returns a new {PublicSuffix::Domain} instance.
37
38
  #
38
39
  # @overload initialize(tld)
@@ -88,32 +89,9 @@ module PublicSuffix
88
89
  # # => [nil, "google", "com"]
89
90
  #
90
91
  def to_a
91
- [trd, sld, tld]
92
+ [@trd, @sld, @tld]
92
93
  end
93
94
 
94
-
95
- # Returns the Top Level Domain part, aka the extension.
96
- #
97
- # @return [String, nil]
98
- def tld
99
- @tld
100
- end
101
-
102
- # Returns the Second Level Domain part, aka the domain part.
103
- #
104
- # @return [String, nil]
105
- def sld
106
- @sld
107
- end
108
-
109
- # Returns the Third Level Domain part, aka the subdomain part.
110
- #
111
- # @return [String, nil]
112
- def trd
113
- @trd
114
- end
115
-
116
-
117
95
  # Returns the full domain name.
118
96
  #
119
97
  # @return [String]
@@ -127,7 +105,7 @@ module PublicSuffix
127
105
  # # => "www.google.com"
128
106
  #
129
107
  def name
130
- [trd, sld, tld].reject { |part| part.nil? }.join(".")
108
+ [@trd, @sld, @tld].compact.join(".")
131
109
  end
132
110
 
133
111
  # Returns a domain-like representation of this object
@@ -164,8 +142,9 @@ module PublicSuffix
164
142
  # @see #subdomain
165
143
  #
166
144
  def domain
167
- return unless domain?
168
- [sld, tld].join(".")
145
+ if domain?
146
+ [@sld, @tld].join(".")
147
+ end
169
148
  end
170
149
 
171
150
  # Returns a domain-like representation of this object
@@ -202,8 +181,9 @@ module PublicSuffix
202
181
  # @see #domain
203
182
  #
204
183
  def subdomain
205
- return unless subdomain?
206
- [trd, sld, tld].join(".")
184
+ if subdomain?
185
+ [@trd, @sld, @tld].join(".")
186
+ end
207
187
  end
208
188
 
209
189
  # Returns the rule matching this domain
@@ -216,7 +196,6 @@ module PublicSuffix
216
196
  List.default.find(name)
217
197
  end
218
198
 
219
-
220
199
  # Checks whether <tt>self</tt> looks like a domain.
221
200
  #
222
201
  # This method doesn't actually validate the domain.
@@ -246,7 +225,7 @@ module PublicSuffix
246
225
  # @see #subdomain?
247
226
  #
248
227
  def domain?
249
- !(tld.nil? || sld.nil?)
228
+ !(@tld.nil? || @sld.nil?)
250
229
  end
251
230
 
252
231
  # Checks whether <tt>self</tt> looks like a subdomain.
@@ -278,7 +257,7 @@ module PublicSuffix
278
257
  # @see #domain?
279
258
  #
280
259
  def subdomain?
281
- !(tld.nil? || sld.nil? || trd.nil?)
260
+ !(@tld.nil? || @sld.nil? || @trd.nil?)
282
261
  end
283
262
 
284
263
  # Checks whether <tt>self</tt> is exclusively a domain,
@@ -327,7 +306,6 @@ module PublicSuffix
327
306
  !r.nil? && r.allow?(name)
328
307
  end
329
308
 
330
-
331
309
  # Checks whether <tt>self</tt> looks like a domain and validates
332
310
  # according to default {List}.
333
311
  #
@@ -1,11 +1,10 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  module PublicSuffix
11
10
 
@@ -43,7 +42,6 @@ module PublicSuffix
43
42
  class DomainNotAllowed < DomainInvalid
44
43
  end
45
44
 
46
-
47
45
  # Backward Compatibility
48
46
  #
49
47
  # @deprecated Use {PublicSuffix::DomainInvalid}.
@@ -1,11 +1,10 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  module PublicSuffix
11
10
 
@@ -44,8 +43,7 @@ module PublicSuffix
44
43
  include Enumerable
45
44
 
46
45
  class << self
47
- attr_accessor :default
48
- attr_accessor :default_definition
46
+ attr_writer :default_definition
49
47
  end
50
48
 
51
49
  # Gets the default rule list.
@@ -76,7 +74,9 @@ module PublicSuffix
76
74
 
77
75
  # Enables/disables support for private (non-ICANN) domains
78
76
  # Implicitly reloads the list
79
- # @param [Boolean] enable/disable support
77
+ #
78
+ # @param [Boolean] value
79
+ # enable/disable support
80
80
  #
81
81
  # @return [PublicSuffix::List]
82
82
  def self.private_domains=(value)
@@ -100,6 +100,8 @@ module PublicSuffix
100
100
  self.clear.default
101
101
  end
102
102
 
103
+ DEFAULT_DEFINITION_PATH = File.join(File.dirname(__FILE__), "..", "..", "data", "definitions.txt")
104
+
103
105
  # Gets the default definition list.
104
106
  # Can be any <tt>IOStream</tt> including a <tt>File</tt>
105
107
  # or a simple <tt>String</tt>.
@@ -107,7 +109,7 @@ module PublicSuffix
107
109
  #
108
110
  # @return [File]
109
111
  def self.default_definition
110
- @default_definition || File.new(File.join(File.dirname(__FILE__), "..", "definitions.txt"), "r:utf-8")
112
+ @default_definition || File.new(DEFAULT_DEFINITION_PATH, "r:utf-8")
111
113
  end
112
114
 
113
115
  # Parse given +input+ treating the content as Public Suffix List.
@@ -136,7 +138,6 @@ module PublicSuffix
136
138
  end
137
139
  end
138
140
 
139
-
140
141
  # Gets the array of rules.
141
142
  #
142
143
  # @return [Array<PublicSuffix::Rule::*>]
@@ -148,7 +149,6 @@ module PublicSuffix
148
149
  # @return [Array]
149
150
  attr_reader :indexes
150
151
 
151
-
152
152
  # Initializes an empty {PublicSuffix::List}.
153
153
  #
154
154
  # @yield [self] Yields on self.
@@ -250,7 +250,6 @@ module PublicSuffix
250
250
  self
251
251
  end
252
252
 
253
-
254
253
  # Returns the most appropriate rule for domain.
255
254
  #
256
255
  # From the Public Suffix List documentation:
@@ -276,7 +275,7 @@ module PublicSuffix
276
275
  # @return [PublicSuffix::Rule::*, nil]
277
276
  def find(domain)
278
277
  rules = select(domain)
279
- rules.select { |r| r.type == :exception }.first ||
278
+ rules.detect { |r| r.type == :exception } ||
280
279
  rules.inject { |t,r| t.length > r.length ? t : r }
281
280
  end
282
281
 
@@ -290,7 +289,7 @@ module PublicSuffix
290
289
  # @return [Array<PublicSuffix::Rule::*>]
291
290
  def select(domain)
292
291
  # raise DomainInvalid, "Blank domain"
293
- return [] if domain.to_s !~ /[^[:space:]]/
292
+ return [] if domain.to_s =~ /\A\s*\z/
294
293
  # raise DomainInvalid, "`#{domain}' is not expected to contain a scheme"
295
294
  return [] if domain.include?("://")
296
295
 
@@ -1,11 +1,10 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  module PublicSuffix
11
10
 
@@ -20,37 +19,7 @@ module PublicSuffix
20
19
  # PublicSuffix::Rule.factory("ar")
21
20
  # # => #<PublicSuffix::Rule::Normal>
22
21
  #
23
- class Rule
24
-
25
- # Takes the +name+ of the rule, detects the specific rule class
26
- # and creates a new instance of that class.
27
- # The +name+ becomes the rule +value+.
28
- #
29
- # @param [String] name The rule definition.
30
- #
31
- # @return [PublicSuffix::Rule::*] A rule instance.
32
- #
33
- # @example Creates a Normal rule
34
- # PublicSuffix::Rule.factory("ar")
35
- # # => #<PublicSuffix::Rule::Normal>
36
- #
37
- # @example Creates a Wildcard rule
38
- # PublicSuffix::Rule.factory("*.ar")
39
- # # => #<PublicSuffix::Rule::Wildcard>
40
- #
41
- # @example Creates an Exception rule
42
- # PublicSuffix::Rule.factory("!congresodelalengua3.ar")
43
- # # => #<PublicSuffix::Rule::Exception>
44
- #
45
- def self.factory(name)
46
- klass = case name.to_s[0..0]
47
- when "*" then "wildcard"
48
- when "!" then "exception"
49
- else "normal"
50
- end
51
- const_get(klass.capitalize).new(name)
52
- end
53
-
22
+ module Rule
54
23
 
55
24
  #
56
25
  # = Abstract rule class
@@ -138,7 +107,7 @@ module PublicSuffix
138
107
  #
139
108
  class Base
140
109
 
141
- attr_reader :name, :value, :type, :labels
110
+ attr_reader :name, :value, :labels
142
111
 
143
112
  # Initializes a new rule with name and value.
144
113
  # If value is +nil+, name also becomes the value for this rule.
@@ -151,10 +120,25 @@ module PublicSuffix
151
120
  def initialize(name, value = nil)
152
121
  @name = name.to_s
153
122
  @value = value || @name
154
- @type = self.class.name.split("::").last.downcase.to_sym
155
123
  @labels = Domain.domain_to_labels(@value)
156
124
  end
157
125
 
126
+ #
127
+ # The rule type name.
128
+ #
129
+ # @return [Symbol]
130
+ #
131
+ def self.type
132
+ @type ||= self.name.split("::").last.downcase.to_sym
133
+ end
134
+
135
+ #
136
+ # @see {type}
137
+ #
138
+ def type
139
+ self.class.type
140
+ end
141
+
158
142
  # Checks whether this rule is equal to <tt>other</tt>.
159
143
  #
160
144
  # @param [PublicSuffix::Rule::*] other
@@ -170,7 +154,6 @@ module PublicSuffix
170
154
  end
171
155
  alias :eql? :==
172
156
 
173
-
174
157
  # Checks if this rule matches +domain+.
175
158
  #
176
159
  # @param [String, #to_s] domain
@@ -211,7 +194,6 @@ module PublicSuffix
211
194
  !decompose(domain).last.nil?
212
195
  end
213
196
 
214
-
215
197
  # Gets the length of this rule for comparison.
216
198
  # The length usually matches the number of rule +parts+.
217
199
  #
@@ -226,7 +208,7 @@ module PublicSuffix
226
208
  # @raise [NotImplementedError]
227
209
  # @abstract
228
210
  def parts
229
- raise NotImplementedError
211
+ raise(NotImplementedError,"#{self.class}##{__method__} is not implemented")
230
212
  end
231
213
 
232
214
  #
@@ -238,20 +220,21 @@ module PublicSuffix
238
220
  # @raise [NotImplementedError]
239
221
  # @abstract
240
222
  def decompose(domain)
241
- raise NotImplementedError
223
+ raise(NotImplementedError,"#{self.class}##{__method__} is not implemented")
242
224
  end
243
225
 
244
-
245
226
  private
246
227
 
247
- def odiff(one, two)
248
- ii = 0
249
- while(ii < one.size && one[ii] == two[ii])
250
- ii += 1
251
- end
252
- one[ii..one.length]
228
+ def odiff(one, two)
229
+ ii = 0
230
+
231
+ while(ii < one.size && one[ii] == two[ii])
232
+ ii += 1
253
233
  end
254
234
 
235
+ one[ii..one.length]
236
+ end
237
+
255
238
  end
256
239
 
257
240
  class Normal < Base
@@ -368,6 +351,36 @@ module PublicSuffix
368
351
 
369
352
  end
370
353
 
354
+ RULES = {
355
+ '*' => Wildcard,
356
+ '!' => Exception
357
+ }
358
+ RULES.default = Normal
359
+
360
+ # Takes the +name+ of the rule, detects the specific rule class
361
+ # and creates a new instance of that class.
362
+ # The +name+ becomes the rule +value+.
363
+ #
364
+ # @param [String] name The rule definition.
365
+ #
366
+ # @return [PublicSuffix::Rule::*] A rule instance.
367
+ #
368
+ # @example Creates a Normal rule
369
+ # PublicSuffix::Rule.factory("ar")
370
+ # # => #<PublicSuffix::Rule::Normal>
371
+ #
372
+ # @example Creates a Wildcard rule
373
+ # PublicSuffix::Rule.factory("*.ar")
374
+ # # => #<PublicSuffix::Rule::Wildcard>
375
+ #
376
+ # @example Creates an Exception rule
377
+ # PublicSuffix::Rule.factory("!congresodelalengua3.ar")
378
+ # # => #<PublicSuffix::Rule::Exception>
379
+ #
380
+ def self.factory(name)
381
+ RULES[name.to_s[0,1]].new(name)
382
+ end
383
+
371
384
  end
372
385
 
373
386
  end
@@ -1,18 +1,17 @@
1
- #--
1
+ #
2
2
  # Public Suffix
3
3
  #
4
4
  # Domain name parser based on the Public Suffix List.
5
5
  #
6
- # Copyright (c) 2009-2014 Simone Carletti <weppos@weppos.net>
7
- #++
8
-
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #
9
8
 
10
9
  module PublicSuffix
11
10
 
12
11
  module Version
13
12
  MAJOR = 1
14
- MINOR = 4
15
- PATCH = 6
13
+ MINOR = 5
14
+ PATCH = 0
16
15
  BUILD = nil
17
16
 
18
17
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join(".")