postrank-uri 1.0.16 → 1.0.17

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/Rakefile CHANGED
@@ -2,5 +2,4 @@ require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
-
6
- Rspec::Core::RakeTask.new(:spec)
5
+ RSpec::Core::RakeTask.new(:spec)
@@ -1,22 +1,16 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'addressable/uri'
4
- require 'domainatrix'
5
4
  require 'digest/md5'
6
5
  require 'nokogiri'
6
+ require 'public_suffix'
7
7
  require 'yaml'
8
8
 
9
9
  module Addressable
10
10
  class URI
11
11
  def domain
12
- begin
13
- dp = Domainatrix.parse(self)
14
- rescue
15
- return nil
16
- end
17
-
18
- dom = dp.public_suffix
19
- dom = dp.domain.downcase + "." + dom unless dp.domain.empty?
12
+ host = self.host
13
+ (host && PublicSuffix.valid?(host)) ? PublicSuffix.parse(host).domain : nil
20
14
  end
21
15
 
22
16
  def normalized_query
@@ -103,11 +97,10 @@ module PostRank
103
97
  return [] if !text
104
98
  urls = []
105
99
  text.to_s.scan(URIREGEX[:valid_url]) do |all, before, url, protocol, domain, path, query|
106
- begin
100
+ # Only extract the URL if the domain is valid
101
+ if PublicSuffix.valid?(domain)
107
102
  url = clean(url)
108
- Domainatrix.parse(url)
109
103
  urls.push url.to_s
110
- rescue NoMethodError
111
104
  end
112
105
  end
113
106
 
@@ -223,10 +216,18 @@ module PostRank
223
216
  end
224
217
 
225
218
  def valid?(uri)
226
- Domainatrix.parse(uri)
227
- true
228
- rescue
229
- false
219
+ # URI is only valid if it is not nil, parses cleanly as a URI,
220
+ # and the domain has a recognized, valid TLD component
221
+ return false if uri.nil?
222
+
223
+ is_valid = false
224
+ cleaned_uri = clean(uri, :raw => true)
225
+
226
+ if host = cleaned_uri.host
227
+ is_valid = PublicSuffix.valid?(host)
228
+ end
229
+
230
+ is_valid
230
231
  end
231
232
  end
232
233
  end
@@ -1,5 +1,5 @@
1
1
  module PostRank
2
2
  module URI
3
- VERSION = "1.0.16"
3
+ VERSION = "1.0.17"
4
4
  end
5
5
  end
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "postrank-uri"
16
16
 
17
- s.add_dependency "addressable", ">= 2.3.0"
18
- s.add_dependency "domainatrix"
19
- s.add_dependency "nokogiri"
17
+ s.add_dependency "addressable", "~> 2.3.0"
18
+ s.add_dependency "public_suffix", "~> 1.1.3"
19
+ s.add_dependency "nokogiri", "~> 1.5.5"
20
+
20
21
  s.add_development_dependency "rspec"
21
- #s.add_development_dependency "idn" # test with idn
22
22
 
23
23
  s.files = `git ls-files`.split("\n")
24
24
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -339,6 +339,10 @@ describe PostRank::URI do
339
339
  end
340
340
 
341
341
  context 'valid?' do
342
+ it 'marks incomplete URI string as invalid' do
343
+ PostRank::URI.valid?('/path/page.html').should be_false
344
+ end
345
+
342
346
  it 'marks www.test.c as invalid' do
343
347
  PostRank::URI.valid?('http://www.test.c').should be_false
344
348
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postrank-uri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.16
4
+ version: 1.0.17
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,14 +9,14 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2012-10-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: 2.3.0
22
22
  type: :runtime
@@ -24,41 +24,41 @@ dependencies:
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ! '>='
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.3.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: domainatrix
31
+ name: public_suffix
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 1.1.3
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 1.1.3
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: nokogiri
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - ! '>='
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: 1.5.5
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ! '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.5.5
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: rspec
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -122,3 +122,4 @@ test_files:
122
122
  - spec/c18n_hosts.yml
123
123
  - spec/helper.rb
124
124
  - spec/postrank-uri_spec.rb
125
+ has_rdoc: