postrank-uri 1.0.16 → 1.0.17

Sign up to get free protection for your applications and to get access to all the features.
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: