unwind 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Unwind
2
- VERSION = "0.10.0"
2
+ VERSION = "0.11.0"
3
3
  end
data/lib/unwind.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "unwind/version"
2
2
  require 'faraday'
3
+ require 'addressable/uri'
3
4
 
4
5
  module Unwind
5
6
 
@@ -27,7 +28,7 @@ module Unwind
27
28
  current_url ||= self.original_url
28
29
  #adding this header because we really only care about resolving the url
29
30
  headers = (options || {}).merge({"accept-encoding" => "none"})
30
- response = Faraday.get(current_url, headers)
31
+ response = Faraday.get(current_url, {}, headers)
31
32
 
32
33
  if is_response_redirect?(response)
33
34
  handle_redirect(redirect_url(response), current_url, response, headers)
@@ -62,9 +63,16 @@ module Unwind
62
63
 
63
64
  def handle_final_response(current_url, response)
64
65
  current_url = current_url.dup.to_s
65
- if response.status == 200 && canonical = canonical_link?(response)
66
+ if response.status == 200 && canonical = canonical_link?(response)
66
67
  @redirects << current_url
67
- @final_url = canonical
68
+ if Addressable::URI.parse(canonical).relative?
69
+ current_uri = Addressable::URI.parse(current_url)
70
+ # Is there a cleaner way of doing this?
71
+ @final_url = "#{current_uri.scheme}://#{current_uri.host}#{canonical}"
72
+ else
73
+ @final_url = canonical
74
+ end
75
+
68
76
  else
69
77
  @final_url = current_url
70
78
  end
@@ -82,7 +90,7 @@ module Unwind
82
90
  Addressable::URI.parse(body_match[0])
83
91
  else
84
92
  redirect_uri = Addressable::URI.parse(response['location'])
85
- redirect_uri.relative? ? response.env[:url].join(response['location']) : redirect_uri
93
+ redirect_uri.relative? ? Addressable::URI.parse(response.env[:url]).join(response['location']) : redirect_uri
86
94
  end
87
95
  end
88
96
 
@@ -94,7 +102,7 @@ module Unwind
94
102
  end
95
103
 
96
104
  def canonical_link?(response)
97
- body_match = response.body.match(/<link rel=[\'\"]canonical[\'\"] href=[\'\"](.*)[\'\"]/i)
105
+ body_match = response.body.match(/<link rel=[\'\"]canonical[\'\"] href=[\'\"](.*?)[\'\"]/i)
98
106
  body_match ? Addressable::URI.parse(body_match[1]).to_s : false
99
107
  end
100
108
 
@@ -1,3 +1,4 @@
1
+ require 'minitest'
1
2
  require 'minitest/autorun'
2
3
  require 'vcr'
3
4
  require './lib/unwind'
data/unwind.gemspec CHANGED
@@ -27,5 +27,6 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "minitest"
28
28
  s.add_development_dependency "vcr", "~> 2.0.0"
29
29
  s.add_development_dependency "fakeweb"
30
- s.add_runtime_dependency "faraday", '~> 0.7.0'
30
+ s.add_runtime_dependency "faraday", "~> 0.8.0"
31
+ s.add_runtime_dependency "addressable"
31
32
  end
metadata CHANGED
@@ -1,71 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unwind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
5
4
  prerelease:
5
+ version: 0.11.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Scott Watermasysk
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-04 00:00:00.000000000 Z
12
+ date: 2013-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rake
16
- requirement: &70362860376180 !ruby/object:Gem::Requirement
17
- none: false
15
+ version_requirements: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
20
+ none: false
21
+ name: rake
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70362860376180
25
- - !ruby/object:Gem::Dependency
26
- name: minitest
27
- requirement: &70362860374680 !ruby/object:Gem::Requirement
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
28
29
  none: false
30
+ - !ruby/object:Gem::Dependency
31
+ version_requirements: !ruby/object:Gem::Requirement
29
32
  requirements:
30
33
  - - ! '>='
31
34
  - !ruby/object:Gem::Version
32
35
  version: '0'
36
+ none: false
37
+ name: minitest
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70362860374680
36
- - !ruby/object:Gem::Dependency
37
- name: vcr
38
- requirement: &70362860373620 !ruby/object:Gem::Requirement
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
39
45
  none: false
46
+ - !ruby/object:Gem::Dependency
47
+ version_requirements: !ruby/object:Gem::Requirement
40
48
  requirements:
41
49
  - - ~>
42
50
  - !ruby/object:Gem::Version
43
51
  version: 2.0.0
52
+ none: false
53
+ name: vcr
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70362860373620
47
- - !ruby/object:Gem::Dependency
48
- name: fakeweb
49
- requirement: &70362860393740 !ruby/object:Gem::Requirement
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: 2.0.0
50
61
  none: false
62
+ - !ruby/object:Gem::Dependency
63
+ version_requirements: !ruby/object:Gem::Requirement
51
64
  requirements:
52
65
  - - ! '>='
53
66
  - !ruby/object:Gem::Version
54
67
  version: '0'
68
+ none: false
69
+ name: fakeweb
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70362860393740
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ none: false
58
78
  - !ruby/object:Gem::Dependency
59
- name: faraday
60
- requirement: &70362860392120 !ruby/object:Gem::Requirement
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 0.8.0
61
84
  none: false
85
+ name: faraday
86
+ type: :runtime
87
+ prerelease: false
88
+ requirement: !ruby/object:Gem::Requirement
62
89
  requirements:
63
90
  - - ~>
64
91
  - !ruby/object:Gem::Version
65
- version: 0.7.0
92
+ version: 0.8.0
93
+ none: false
94
+ - !ruby/object:Gem::Dependency
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ none: false
101
+ name: addressable
66
102
  type: :runtime
67
103
  prerelease: false
68
- version_requirements: *70362860392120
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ none: false
69
110
  description: ! "\t\t\t\t\t\t\t\t\t\tFollows a chain of redirects and reports back
70
111
  on all the steps. \n\t\t\t\t\t\t\t\t\t\tHeavily inspired by John Nunemaker's blog
71
112
  post.\n\t\t\t\t\t\t\t\t\t\thttp://railstips.org/blog/archives/2009/03/04/following-redirects-with-nethttp/\n"
@@ -102,23 +143,22 @@ rdoc_options: []
102
143
  require_paths:
103
144
  - lib
104
145
  required_ruby_version: !ruby/object:Gem::Requirement
105
- none: false
106
146
  requirements:
107
147
  - - ! '>='
108
148
  - !ruby/object:Gem::Version
109
149
  version: '0'
110
- required_rubygems_version: !ruby/object:Gem::Requirement
111
150
  none: false
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
152
  requirements:
113
153
  - - ! '>='
114
154
  - !ruby/object:Gem::Version
115
155
  version: '0'
156
+ none: false
116
157
  requirements: []
117
158
  rubyforge_project: unwind
118
- rubygems_version: 1.8.11
159
+ rubygems_version: 1.8.23
119
160
  signing_key:
120
161
  specification_version: 3
121
162
  summary: Follows a chain redirects.
122
163
  test_files:
123
164
  - test/redirect_follower_test.rb
124
- has_rdoc: