public_suffix 1.1.3 → 1.2.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.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Changelog
2
2
 
3
3
 
4
+ ## Release 1.2.0
5
+
6
+ - NEW: Allow a custom List on `PublicSuffix.parse` (GH-26). [Thanks @itspriddle]
7
+
8
+ - FIXED: PublicSuffix.parse and PublicSuffix.valid? crashes when input is nil (GH-20).
9
+
10
+ - CHANGED: Updated definitions.
11
+
12
+
4
13
  ## Release 1.1.3
5
14
 
6
15
  - CHANGED: Updated definitions.
@@ -1,7 +1,7 @@
1
- The MIT License
2
-
3
1
  Copyright (c) 2009-2012 Simone Carletti <weppos@weppos.net>
4
2
 
3
+ MIT License
4
+
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
7
7
  "Software"), to deal in the Software without restriction, including
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  *PublicSuffix* is a Ruby domain name parser based on the [Public Suffix List](http://publicsuffix.org/).
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/weppos/public_suffix_service.png)](http://travis-ci.org/weppos/public_suffix_service)
5
+ [![Build Status](https://secure.travis-ci.org/weppos/publicsuffix-ruby.png)](http://travis-ci.org/weppos/publicsuffix-ruby)
6
6
 
7
7
 
8
8
  ## What is the Public Suffix List?
@@ -35,9 +35,9 @@ Not convinced yet? Check out [this real world example](http://stackoverflow.com/
35
35
 
36
36
  - Ruby >= 1.8.7
37
37
 
38
- *PublicSuffix* requires Ruby 1.8.7 or greater. For older versions of Ruby, see the CHANGELOG.md file.
38
+ *PublicSuffix* requires Ruby 1.8.7 or greater. For older versions of Ruby, see the [CHANGELOG.md](CHANGELOG.md) file.
39
39
 
40
- We also support several [Ruby implementations](http://www.simonecarletti.com/code/public_suffix/#implementations).
40
+ We also support several [Ruby implementations](http://www.simonecarletti.com/code/publicsuffix/#implementations).
41
41
 
42
42
 
43
43
  ## Installation
@@ -115,13 +115,13 @@ If you use this library and find yourself missing any functionality, please [let
115
115
 
116
116
  Pull requests are very welcome! Please include tests and/or feature coverage for every patch, and create a topic branch for every separate change you make.
117
117
 
118
- Report issues or feature requests to [GitHub Issues](https://github.com/weppos/public_suffix_service/issues).
118
+ Report issues or feature requests to [GitHub Issues](https://github.com/weppos/publicsuffix-ruby/issues).
119
119
 
120
120
 
121
121
  ## More
122
122
 
123
- * [Homepage](http://www.simonecarletti.com/code/public_suffix)
124
- * [Repository](https://github.com/weppos/public_suffix_service)
123
+ * [Homepage](http://www.simonecarletti.com/code/publicsuffix)
124
+ * [Repository](https://github.com/weppos/publicsuffix-ruby)
125
125
  * [API Documentation](http://rubydoc.info/gems/public_suffix)
126
126
  * [Introducing the Public Suffix List library for Ruby](http://www.simonecarletti.com/blog/2010/06/public-suffix-list-library-for-ruby/)
127
127
 
data/lib/public_suffix.rb CHANGED
@@ -24,10 +24,10 @@ module PublicSuffix
24
24
  # Parses +domain+ and returns the
25
25
  # {PublicSuffix::Domain} instance.
26
26
  #
27
- # Parsing uses the default {PublicSuffix::List}.
28
- #
29
27
  # @param [String, #to_s] domain
30
28
  # The domain name or fully qualified domain name to parse.
29
+ # @param [PublicSuffix::List] list
30
+ # The rule list to search, defaults to the default {PublicSuffix::List}
31
31
  #
32
32
  # @return [PublicSuffix::Domain]
33
33
  #
@@ -61,8 +61,8 @@ module PublicSuffix
61
61
  # If a rule for +domain+ is found, but the rule
62
62
  # doesn't allow +domain+.
63
63
  #
64
- def self.parse(domain)
65
- rule = List.default.find(domain)
64
+ def self.parse(domain, list = List.default)
65
+ rule = list.find(domain)
66
66
 
67
67
  if rule.nil?
68
68
  raise DomainInvalid, "`#{domain}' is not a valid domain"
@@ -219,7 +219,6 @@ net.au
219
219
  org.au
220
220
  edu.au
221
221
  gov.au
222
- csiro.au
223
222
  asn.au
224
223
  id.au
225
224
  // Historic 2LDs (closed to new registration, but sites still exist)
@@ -950,9 +949,15 @@ gov.gr
950
949
  // gs : http://en.wikipedia.org/wiki/.gs
951
950
  gs
952
951
 
953
- // gt : http://www.gt/politicas.html
954
- *.gt
955
- !www.gt
952
+ // gt : http://www.gt/politicas_de_registro.html
953
+ gt
954
+ com.gt
955
+ edu.gt
956
+ gob.gt
957
+ ind.gt
958
+ mil.gt
959
+ net.gt
960
+ org.gt
956
961
 
957
962
  // gu : http://gadao.gov.gu/registration.txt
958
963
  *.gu
@@ -4166,6 +4171,7 @@ name.my
4166
4171
 
4167
4172
  // mz : http://www.gobin.info/domainname/mz-template.doc
4168
4173
  *.mz
4174
+ !teledata.mz
4169
4175
 
4170
4176
  // na : http://www.na-nic.com.na/
4171
4177
  // http://www.info.na/domain/
@@ -5359,8 +5365,16 @@ ed.pw
5359
5365
  go.pw
5360
5366
  belau.pw
5361
5367
 
5362
- // py : http://www.nic.py/faq_a.html#faq_b
5363
- *.py
5368
+ // py : http://www.nic.py/pautas.html#seccion_9
5369
+ // Confirmed by registry 2012-10-03
5370
+ py
5371
+ com.py
5372
+ coop.py
5373
+ edu.py
5374
+ gov.py
5375
+ mil.py
5376
+ net.py
5377
+ org.py
5364
5378
 
5365
5379
  // qa : http://domains.qa/en/
5366
5380
  qa
@@ -5999,20 +6013,19 @@ com.ug
5999
6013
  org.ug
6000
6014
 
6001
6015
  // uk : http://en.wikipedia.org/wiki/.uk
6016
+ // Submitted by registry <noc@nominet.org.uk> 2012-10-02
6017
+ // and tweaked by us pending further consultation.
6002
6018
  *.uk
6003
6019
  *.sch.uk
6004
6020
  !bl.uk
6005
6021
  !british-library.uk
6006
- !icnet.uk
6007
6022
  !jet.uk
6008
6023
  !mod.uk
6024
+ !national-library-scotland.uk
6009
6025
  !nel.uk
6010
- !nhs.uk
6011
6026
  !nic.uk
6012
6027
  !nls.uk
6013
- !national-library-scotland.uk
6014
6028
  !parliament.uk
6015
- !police.uk
6016
6029
 
6017
6030
  // us : http://en.wikipedia.org/wiki/.us
6018
6031
  us
@@ -6288,8 +6301,19 @@ gov.vc
6288
6301
  mil.vc
6289
6302
  edu.vc
6290
6303
 
6291
- // ve : http://registro.nic.ve/nicve/registro/index.html
6292
- *.ve
6304
+ // ve : https://registro.nic.ve/
6305
+ // Confirmed by registry 2012-10-04
6306
+ ve
6307
+ co.ve
6308
+ com.ve
6309
+ e12.ve
6310
+ edu.ve
6311
+ gov.ve
6312
+ info.ve
6313
+ mil.ve
6314
+ net.ve
6315
+ org.ve
6316
+ web.ve
6293
6317
 
6294
6318
  // vg : http://en.wikipedia.org/wiki/.vg
6295
6319
  vg
@@ -6529,15 +6553,20 @@ priv.at
6529
6553
  co.ca
6530
6554
 
6531
6555
  // CentralNic : http://www.centralnic.com/names/domains
6532
- // Confirmed by registry <gavin.brown@centralnic.com> 2008-06-09
6556
+ // Confirmed by registry <gavin.brown@centralnic.com> 2012-09-27
6557
+ ae.org
6533
6558
  ar.com
6534
6559
  br.com
6535
6560
  cn.com
6561
+ com.de
6536
6562
  de.com
6537
6563
  eu.com
6538
6564
  gb.com
6565
+ gb.net
6539
6566
  gr.com
6540
6567
  hu.com
6568
+ hu.net
6569
+ jp.net
6541
6570
  jpn.com
6542
6571
  kr.com
6543
6572
  no.com
@@ -6545,25 +6574,68 @@ qc.com
6545
6574
  ru.com
6546
6575
  sa.com
6547
6576
  se.com
6577
+ se.net
6548
6578
  uk.com
6579
+ uk.net
6549
6580
  us.com
6581
+ us.org
6550
6582
  uy.com
6551
6583
  za.com
6552
- gb.net
6553
- jp.net
6554
- se.net
6555
- uk.net
6556
- ae.org
6557
- us.org
6558
- com.de
6559
6584
 
6560
6585
  // Opera Software, A.S.A.
6561
6586
  // Requested by Yngve Pettersen <yngve@opera.com> 2009-11-26
6562
6587
  operaunite.com
6563
6588
 
6564
6589
  // Google, Inc.
6565
- // Requested by Eduardo Vela <evn@google.com> 2010-09-06
6590
+ // Requested by Eduardo Vela <evn@google.com> 2012-10-24
6566
6591
  appspot.com
6592
+ blogspot.be
6593
+ blogspot.bj
6594
+ blogspot.ca
6595
+ blogspot.cf
6596
+ blogspot.ch
6597
+ blogspot.co.at
6598
+ blogspot.co.il
6599
+ blogspot.co.nz
6600
+ blogspot.co.uk
6601
+ blogspot.com
6602
+ blogspot.com.ar
6603
+ blogspot.com.au
6604
+ blogspot.com.br
6605
+ blogspot.com.es
6606
+ blogspot.cv
6607
+ blogspot.cz
6608
+ blogspot.de
6609
+ blogspot.dk
6610
+ blogspot.fi
6611
+ blogspot.fr
6612
+ blogspot.gr
6613
+ blogspot.hk
6614
+ blogspot.hu
6615
+ blogspot.ie
6616
+ blogspot.in
6617
+ blogspot.it
6618
+ blogspot.jp
6619
+ blogspot.kr
6620
+ blogspot.mr
6621
+ blogspot.mx
6622
+ blogspot.nl
6623
+ blogspot.no
6624
+ blogspot.pt
6625
+ blogspot.re
6626
+ blogspot.ro
6627
+ blogspot.se
6628
+ blogspot.sg
6629
+ blogspot.sk
6630
+ blogspot.td
6631
+ blogspot.tw
6632
+ codespot.com
6633
+ googleapis.com
6634
+ googlecode.com
6635
+
6636
+ // DreamHost : http://www.dreamhost.com/
6637
+ // Requested by Andrew Farmer <andrew.farmer@dreamhost.com> 2012-10-02
6638
+ dreamhosters.com
6567
6639
 
6568
6640
  // iki.fi : Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05
6569
6641
  iki.fi
@@ -6865,4 +6937,12 @@ webhop.org
6865
6937
  worse-than.tv
6866
6938
  writesthisblog.com
6867
6939
 
6940
+ // BetaInABox
6941
+ // Requested by adrian@betainabox.com 2012-09-13
6942
+ betainabox.com
6943
+
6944
+ // Red Hat, Inc. OpenShift : https://openshift.redhat.com/
6945
+ // Requested by Tim Kramer <tkramer@rhcloud.com> 2012-10-24
6946
+ rhcloud.com
6947
+
6868
6948
  // ===END PRIVATE DOMAINS===
@@ -272,6 +272,8 @@ module PublicSuffix
272
272
  #
273
273
  # @return [Array<PublicSuffix::Rule::*>]
274
274
  def select(domain)
275
+ # raise DomainInvalid, "Blank domain"
276
+ return [] if domain.to_s !~ /[^[:space:]]/
275
277
  # raise DomainInvalid, "`#{domain}' is not expected to contain a scheme"
276
278
  return [] if domain.include?("://")
277
279
 
@@ -11,8 +11,8 @@ module PublicSuffix
11
11
 
12
12
  module Version
13
13
  MAJOR = 1
14
- MINOR = 1
15
- PATCH = 3
14
+ MINOR = 2
15
+ PATCH = 0
16
16
  BUILD = nil
17
17
 
18
18
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join(".")
@@ -2,14 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "public_suffix"
5
- s.version = "1.1.3"
5
+ s.version = "1.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Simone Carletti"]
9
- s.date = "2012-09-17"
9
+ s.date = "2012-12-24"
10
10
  s.description = "PublicSuffix can parse and decompose a domain name into top level domain, domain and subdomains."
11
11
  s.email = "weppos@weppos.net"
12
- s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG.md", "Gemfile", "LICENSE", "README.md", "Rakefile", "lib/public_suffix.rb", "lib/public_suffix/definitions.txt", "lib/public_suffix/domain.rb", "lib/public_suffix/errors.rb", "lib/public_suffix/list.rb", "lib/public_suffix/rule.rb", "lib/public_suffix/version.rb", "public_suffix.gemspec", "test/acceptance_test.rb", "test/test_helper.rb", "test/unit/domain_test.rb", "test/unit/errors_test.rb", "test/unit/list_test.rb", "test/unit/public_suffix_test.rb", "test/unit/rule_test.rb"]
12
+ s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG.md", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "lib/public_suffix.rb", "lib/public_suffix/definitions.txt", "lib/public_suffix/domain.rb", "lib/public_suffix/errors.rb", "lib/public_suffix/list.rb", "lib/public_suffix/rule.rb", "lib/public_suffix/version.rb", "public_suffix.gemspec", "test/acceptance_test.rb", "test/test_helper.rb", "test/unit/domain_test.rb", "test/unit/errors_test.rb", "test/unit/list_test.rb", "test/unit/public_suffix_test.rb", "test/unit/rule_test.rb"]
13
13
  s.homepage = "http://www.simonecarletti.com/code/public_suffix"
14
14
  s.require_paths = ["lib"]
15
15
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
@@ -24,13 +24,16 @@ class AcceptanceTest < Test::Unit::TestCase
24
24
  end
25
25
  end
26
26
 
27
- InvalidCases = {
28
- "nic.ke" => PublicSuffix::DomainNotAllowed,
29
- "http://www.google.com" => PublicSuffix::DomainInvalid,
30
- }
27
+ InvalidCases = [
28
+ ["nic.ke", PublicSuffix::DomainNotAllowed],
29
+ ["http://www.google.com", PublicSuffix::DomainInvalid],
30
+ [nil, PublicSuffix::DomainInvalid],
31
+ ["", PublicSuffix::DomainInvalid],
32
+ [" ", PublicSuffix::DomainInvalid],
33
+ ]
31
34
 
32
35
  def test_invalid
33
- InvalidCases.each do |name, error|
36
+ InvalidCases.each do |(name, error)|
34
37
  assert_raise(error) { PublicSuffix.parse(name) }
35
38
  assert !PublicSuffix.valid?(name)
36
39
  end
@@ -95,6 +95,15 @@ class PublicSuffix::ListTest < Test::Unit::TestCase
95
95
  assert_not_equal [], list.select("google.com")
96
96
  end
97
97
 
98
+ def test_select_returns_empty_when_domain_is_nil
99
+ assert_equal [], list.select(nil)
100
+ end
101
+
102
+ def test_select_returns_empty_when_domain_is_blank
103
+ assert_equal [], list.select("")
104
+ assert_equal [], list.select(" ")
105
+ end
106
+
98
107
 
99
108
  def test_self_default_getter
100
109
  assert_equal nil, PublicSuffix::List.class_eval { @default }
@@ -52,6 +52,16 @@ class PublicSuffixTest < Test::Unit::TestCase
52
52
  assert_equal "www", domain.trd
53
53
  end
54
54
 
55
+ def test_self_parse_a_domain_with_custom_list
56
+ list = PublicSuffix::List.new
57
+ list << PublicSuffix::Rule.factory("test")
58
+
59
+ domain = PublicSuffix.parse("www.example.test", list)
60
+ assert_equal "test", domain.tld
61
+ assert_equal "example", domain.sld
62
+ assert_equal "www", domain.trd
63
+ end
64
+
55
65
  def test_self_parse_raises_with_invalid_domain
56
66
  error = assert_raise(PublicSuffix::DomainInvalid) { PublicSuffix.parse("example.zip") }
57
67
  assert_match %r{example\.zip}, error.message
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: public_suffix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-17 00:00:00.000000000 Z
12
+ date: 2012-12-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -72,7 +72,7 @@ files:
72
72
  - .yardopts
73
73
  - CHANGELOG.md
74
74
  - Gemfile
75
- - LICENSE
75
+ - LICENSE.txt
76
76
  - README.md
77
77
  - Rakefile
78
78
  - lib/public_suffix.rb