dubdubdub 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/dubdubdub.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dubdubdub"
8
- s.version = "0.2.4"
8
+ s.version = "0.2.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Hu"]
@@ -43,6 +43,7 @@ Gem::Specification.new do |s|
43
43
  "spec/vcr/follow_url/proxied.yml",
44
44
  "spec/vcr/follow_url/proxy.yml",
45
45
  "spec/vcr/follow_url/proxy_forbidden.yml",
46
+ "spec/vcr/follow_url/relative_redirects.yml",
46
47
  "spec/vcr/get/basic.yml",
47
48
  "spec/vcr/get/params.yml",
48
49
  "spec/vcr/get/proxy.yml"
data/lib/dubdubdub.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class DubDubDub
2
2
  # Version
3
- VERSION = "0.2.4"
3
+ VERSION = "0.2.5"
4
4
 
5
5
  attr_accessor :client
6
6
 
@@ -118,6 +118,7 @@ class DubDubDub::Client
118
118
  options = default_options.merge(options)
119
119
 
120
120
  at_base = false
121
+ previous_uri = nil # Keep track of previous uri for relative path redirects
121
122
  response = nil
122
123
  user_agents = [
123
124
  'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11',
@@ -172,16 +173,28 @@ class DubDubDub::Client
172
173
  end
173
174
 
174
175
  # If any of these exceptions get thrown, return the current url
175
- rescue SocketError, URI::InvalidURIError, EOFError
176
+ rescue SocketError, EOFError
176
177
  at_base = true
178
+ rescue URI::InvalidURIError
179
+ return url # Just return it
177
180
  end
178
181
 
179
182
  urls << url
180
183
 
181
184
  break if at_base
185
+
186
+ previous_uri = uri # Keep track of previous uri
182
187
  yield(url) if block_given?
183
188
  end
184
189
 
185
- url
190
+ end_uri = URI.parse(url)
191
+
192
+ # If there is no host, it's due to a relative 301 redirect. Use previous uri's host, port, etc
193
+ if !end_uri.host and previous_uri
194
+ end_uri = previous_uri
195
+ end_uri.path = url
196
+ end
197
+
198
+ end_uri.to_s
186
199
  end
187
200
  end
@@ -230,6 +230,10 @@ describe DubDubDub do
230
230
  www.follow_url("google.com").should == "google.com"
231
231
  end
232
232
 
233
+ it "works with relative path redirects", vcr: { cassette_name: "follow_url/relative_redirects", record: :once } do
234
+ www.follow_url("http://www.retailmenot.com/out/4223117").should == "http://www.papajohns.com/index.html"
235
+ end
236
+
233
237
  it "raises forbidden properly on a bad proxy", vcr: { cassette_name: "follow_url/proxy_forbidden", record: :once } do
234
238
  www.proxy = "190.202.116.101:3128"
235
239
  lambda { www.follow_url("http://yfrog.us/evlb0z:medium").should }.should raise_error(DubDubDub::Forbidden)
@@ -0,0 +1,122 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.retailmenot.com/out/4223117
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - ! '*/*'
12
+ user-agent:
13
+ - Ruby
14
+ response:
15
+ status:
16
+ code: 302
17
+ message: Found
18
+ headers:
19
+ content-type:
20
+ - text/html; charset=utf-8
21
+ date:
22
+ - Tue, 04 Dec 2012 02:09:53 GMT
23
+ location:
24
+ - http://papajohns.com
25
+ server:
26
+ - nginx
27
+ set-cookie:
28
+ - cid=deleted; expires=Mon, 05-Dec-2011 02:09:59 GMT; path=/; domain=retailmenot.com
29
+ - ppage=deleted; expires=Mon, 05-Dec-2011 02:09:59 GMT; path=/; domain=retailmenot.com
30
+ - ouid=deleted; expires=Mon, 05-Dec-2011 02:09:59 GMT; path=/; domain=retailmenot.com
31
+ - ut=16388; expires=Tue, 18-Dec-2012 02:10:00 GMT; path=/; domain=retailmenot.com
32
+ - userFlashVersion=KI7ON5J5tS; expires=Sun, 03-Dec-2017 02:10:00 GMT; path=/;
33
+ domain=retailmenot.com
34
+ vary:
35
+ - Accept-Encoding
36
+ content-length:
37
+ - '0'
38
+ connection:
39
+ - Close
40
+ body:
41
+ encoding: US-ASCII
42
+ string: ''
43
+ http_version: '1.1'
44
+ recorded_at: Tue, 04 Dec 2012 02:09:53 GMT
45
+ - request:
46
+ method: get
47
+ uri: http://papajohns.com/
48
+ body:
49
+ encoding: US-ASCII
50
+ string: ''
51
+ headers:
52
+ accept:
53
+ - ! '*/*'
54
+ user-agent:
55
+ - Ruby
56
+ response:
57
+ status:
58
+ code: 301
59
+ message: Moved Permanently
60
+ headers:
61
+ server:
62
+ - AkamaiGHost
63
+ content-length:
64
+ - '0'
65
+ location:
66
+ - http://www.papajohns.com/
67
+ date:
68
+ - Tue, 04 Dec 2012 02:09:53 GMT
69
+ connection:
70
+ - close
71
+ body:
72
+ encoding: US-ASCII
73
+ string: ''
74
+ http_version: '1.1'
75
+ recorded_at: Tue, 04 Dec 2012 02:09:54 GMT
76
+ - request:
77
+ method: get
78
+ uri: http://www.papajohns.com/
79
+ body:
80
+ encoding: US-ASCII
81
+ string: ''
82
+ headers:
83
+ accept:
84
+ - ! '*/*'
85
+ user-agent:
86
+ - Ruby
87
+ response:
88
+ status:
89
+ code: 302
90
+ message: Moved Temporarily
91
+ headers:
92
+ server:
93
+ - Microsoft-IIS/6.0
94
+ x-powered-by:
95
+ - ASP.NET
96
+ location:
97
+ - /index.html
98
+ content-length:
99
+ - '132'
100
+ content-type:
101
+ - text/html
102
+ cache-control:
103
+ - private
104
+ vary:
105
+ - Accept-Encoding
106
+ date:
107
+ - Tue, 04 Dec 2012 02:09:54 GMT
108
+ connection:
109
+ - close
110
+ set-cookie:
111
+ - ASPSESSIONIDQCTDRBDC=HKLJKGECGKICNAAEFJPFIADI; path=/
112
+ - BIGipServerPRD_WEB_HTTP=2256924991.20480.0000; path=/
113
+ body:
114
+ encoding: US-ASCII
115
+ string: ! '<head><title>Object moved</title></head>
116
+
117
+ <body><h1>Object Moved</h1>This object may be found <a HREF="/index.html">here</a>.</body>
118
+
119
+ '
120
+ http_version: '1.1'
121
+ recorded_at: Tue, 04 Dec 2012 02:09:54 GMT
122
+ recorded_with: VCR 2.3.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dubdubdub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -189,6 +189,7 @@ files:
189
189
  - spec/vcr/follow_url/proxied.yml
190
190
  - spec/vcr/follow_url/proxy.yml
191
191
  - spec/vcr/follow_url/proxy_forbidden.yml
192
+ - spec/vcr/follow_url/relative_redirects.yml
192
193
  - spec/vcr/get/basic.yml
193
194
  - spec/vcr/get/params.yml
194
195
  - spec/vcr/get/proxy.yml
@@ -207,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
208
  version: '0'
208
209
  segments:
209
210
  - 0
210
- hash: 3214768176018659868
211
+ hash: 1311831286708000735
211
212
  required_rubygems_version: !ruby/object:Gem::Requirement
212
213
  none: false
213
214
  requirements: