unwind 0.10.0 → 0.11.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.
@@ -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: