unwind 0.9.4 → 0.9.5

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/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .rvmrc
@@ -1,3 +1,3 @@
1
1
  module Unwind
2
- VERSION = "0.9.4"
2
+ VERSION = "0.9.5"
3
3
  end
data/lib/unwind.rb CHANGED
@@ -33,6 +33,10 @@ module Unwind
33
33
  @redirects << current_url.to_s
34
34
  @redirect_limit -= 1
35
35
  resolve(redirect_url(response).normalize, apply_cookie(response, headers))
36
+ elsif response.status == 200 && meta_uri = meta_refresh?(response)
37
+ @redirects << current_url.to_s
38
+ @redirect_limit -= 1
39
+ resolve(meta_uri.normalize, apply_cookie(response, headers))
36
40
  else
37
41
  @final_url = current_url.to_s
38
42
  @response = response
@@ -63,6 +67,11 @@ module Unwind
63
67
  end
64
68
  end
65
69
 
70
+ def meta_refresh?(response)
71
+ body_match = response.body.match(/<meta http-equiv=\"refresh\" content=\"0; URL=(.*)\">/i)
72
+ body_match ? Addressable::URI.parse(body_match[1]) : false
73
+ end
74
+
66
75
  def apply_cookie(response, headers)
67
76
  if response.status == 302 && response['set-cookie']
68
77
  headers.merge(:cookie => CookieHash.to_cookie_string(response['set-cookie']))
@@ -91,5 +91,13 @@ describe Unwind::RedirectFollower do
91
91
  missing_redirect_location.must_raise Unwind::MissingRedirectLocation
92
92
  end
93
93
  end
94
+
95
+ it 'should handle a meta-refresh' do
96
+ VCR.use_cassette('meta refresh') do
97
+ follower = Unwind::RedirectFollower.resolve('http://www.nullrefer.com/?www.google.com')
98
+ assert follower.redirected?
99
+ assert_equal 'http://www.google.com/', follower.final_url
100
+ end
101
+ end
94
102
 
95
103
  end
@@ -0,0 +1,196 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://www.nullrefer.com:80/?www.google.com
6
+ body:
7
+ headers:
8
+ accept-encoding:
9
+ - none
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ date:
16
+ - Fri, 24 Feb 2012 16:20:02 GMT
17
+ server:
18
+ - Apache
19
+ x-powered-by:
20
+ - PHP/5.2.17
21
+ transfer-encoding:
22
+ - chunked
23
+ content-type:
24
+ - text/html
25
+ body: ! "\n<html>\n<head>\n<title>NullRefer.com Anonym Link</title>\n<meta http-equiv=\"refresh\"
26
+ content=\"0; URL=http://www.google.com\">\n<meta http-equiv=\"Content-Type\"
27
+ content=\"text/html; charset=iso-8859-1\">\n\n\n<script type=\"text/javascript\"
28
+ language=\"javascript\">\nvar sc_project=2152146; \nvar sc_invisible=1; \nvar
29
+ sc_partition=19; \nvar sc_security=\"26edb118\"; \n</script><script type=\"text/javascript\"
30
+ language=\"javascript\" src=\"http://www.statcounter.com/counter/counter.js\"></script><noscript></noscript>"
31
+ http_version: '1.1'
32
+ - !ruby/struct:VCR::HTTPInteraction
33
+ request: !ruby/struct:VCR::Request
34
+ method: :get
35
+ uri: http://www.google.com:80/
36
+ body:
37
+ headers:
38
+ accept-encoding:
39
+ - none
40
+ response: !ruby/struct:VCR::Response
41
+ status: !ruby/struct:VCR::ResponseStatus
42
+ code: 200
43
+ message: OK
44
+ headers:
45
+ date:
46
+ - Fri, 24 Feb 2012 16:20:04 GMT
47
+ expires:
48
+ - '-1'
49
+ cache-control:
50
+ - private, max-age=0
51
+ content-type:
52
+ - text/html; charset=ISO-8859-1
53
+ set-cookie:
54
+ - PREF=ID=c35c457ba1034ad8:FF=0:TM=1330100404:LM=1330100404:S=lhN2U2Vz0pOWcQvU;
55
+ expires=Sun, 23-Feb-2014 16:20:04 GMT; path=/; domain=.google.com
56
+ - NID=57=eAKoTays7Ul9ah-ODoVlC20v-kk0VTIiZdEZOwA9dH2Z7Ba-AFdenK4hJP5r4IYmENFgCWnft9Zv1rHA3dvpVmOanZV3yM7Cwjel8GOblGfl99WLXXFuvwNyCS1zil1n;
57
+ expires=Sat, 25-Aug-2012 16:20:04 GMT; path=/; domain=.google.com; HttpOnly
58
+ p3p:
59
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
60
+ for more info."
61
+ server:
62
+ - gws
63
+ x-xss-protection:
64
+ - 1; mode=block
65
+ x-frame-options:
66
+ - SAMEORIGIN
67
+ body: ! '<!doctype html><html itemscope itemtype="http://schema.org/WebPage"><head><meta
68
+ http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta name="description"
69
+ content="Search the world&#39;s information, including webpages, images, videos
70
+ and more. Google has many special features to help you find exactly what you&#39;re
71
+ looking for."><meta name="robots" content="noodp"><meta itemprop="image" content="/images/google_favicon_128.png"><title>Google</title><script>window.google={kEI:"tLhHT-XBA-Xg0QGwpfDqDQ",getEI:function(a){var
72
+ d;while(a&&!(a.getAttribute&&(d=a.getAttribute("eid"))))a=a.parentNode;return
73
+ d||google.kEI},https:function(){return window.location.protocol=="https:"},kEXPI:"33551,34904,35055,36604,36683,36801,36903,36946,37007,37017",kCSI:{e:"33551,34904,35055,36604,36683,36801,36903,36946,37007,37017",ei:"tLhHT-XBA-Xg0QGwpfDqDQ"},authuser:0,
74
+
75
+ ml:function(){},kHL:"en",time:function(){return(new Date).getTime()},log:function(a,d,f,h){var
76
+ e=new Image,g=google,k=g.lc,i=g.li,m="";e.onerror=(e.onload=(e.onabort=function(){delete
77
+ k[i]}));k[i]=e;if(!f&&d.search("&ei=")==-1)m="&ei="+google.getEI(h);var j=f||"/gen_204?atyp=i&ct="+a+"&cad="+d+m+"&zx="+google.time(),b=/^http:/i;if(b.test(j)&&google.https()){google.ml(new
78
+ Error("GLMM"),false,{src:j});
79
+
80
+ delete k[i];return}e.src=j;g.li=i+1},lc:[],li:0,Toolbelt:{},y:{},x:function(a,d){google.y[a.id]=
81
+
82
+ [a,d];return false}};(function(){var a=
83
+
84
+ google.kEI;window.pp_tos={};var d=document.domain.replace(/.*?(google\..*)/,"$1");function
85
+ f(){var b=0;try{var c=document.cookie.match(/PP_TOS_ACK=([^;]*)/);b=c&&!isNaN(c[1])?c[1]:0}catch(l){e("error","read_cookie")}return
86
+ b}function h(b){var c=f();if(c>=0){g(++c);if(f()>0&&!b)m()}}function e(b,c){var
87
+ l=new Image;c=c?"&emsg="+c:"";l.src=["//",d,"/gen_204?atyp=i&ct=pp_tos&cd=",b,"&source=","web","&ei=",a,c].join("");window.pp_tos.beacon=l}function
88
+ g(b){var c=new Date((new Date).getTime()+5184000000);
89
+
90
+ try{var l="PP_TOS_ACK="+b+"; expires="+c.toGMTString()+"; path=/; domain="+d;document.cookie=l}catch(n){e("error","write_cookie")}}function
91
+ k(){g(-1);e("dismiss");j()}function i(){g(-1);e("tellmore");j()}function m(){var
92
+ b=document.getElementById("bb_pp_tos_ack");if(b){b.style.display="";e("display")}}function
93
+ j(){var b=document.getElementById("bb_pp_tos_ack");if(b)b.style.display="none"}window.pp_tos.handleDismiss=k;window.pp_tos.handleLearnMore=i;window.pp_tos.checkCookie=h})();
94
+
95
+ window.google.sn="webhp";window.google.timers={};window.google.startTick=function(a,b){window.google.timers[a]={t:{start:(new
96
+ Date).getTime()},bfr:!(!b)}};window.google.tick=function(a,b,c){if(!window.google.timers[a])google.startTick(a);window.google.timers[a].t[b]=c||(new
97
+ Date).getTime()};google.startTick("load",true);try{}catch(u){}
98
+
99
+ var _gjwl=location;function _gjuc(){var e=_gjwl.href.indexOf("#");if(e>=0){var
100
+ a=_gjwl.href.substring(e);if(a.indexOf("&q=")>0||a.indexOf("#q=")>=0){a=a.substring(1);if(a.indexOf("#")==-1){for(var
101
+ c=0;c<a.length;){var d=c;if(a.charAt(d)=="&")++d;var b=a.indexOf("&",d);if(b==-1)b=a.length;var
102
+ f=a.substring(d,b);if(f.indexOf("fp=")==0){a=a.substring(0,c)+a.substring(b,a.length);b=c}else
103
+ if(f=="cad=h")return 0;c=b}_gjwl.href="/search?"+a+"&cad=h";return 1}}}return
104
+ 0}function _gjp(){!(window._gjwl.hash&&
105
+
106
+ window._gjuc())&&setTimeout(_gjp,500)};
107
+
108
+ window._gjp && _gjp()</script><style>#gbar,#guser{font-size:13px;padding-top:1px
109
+ !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px
110
+ solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media
111
+ all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline
112
+ !important}a.gb1,a.gb4{color:#00c !important}</style><style id=gstyle>body{margin:0;overflow-y:scroll}#gog{padding:3px
113
+ 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}body,td,a,p,.h{font-family:arial,sans-serif}.h{color:#36c;font-size:20px}.q{color:#00c}.ts
114
+ td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px
115
+ arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{border-bottom:solid 1px
116
+ #e7e7e7;border-right:solid 1px #e7e7e7;display:-moz-inline-box;display:inline-block;margin:3px
117
+ 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c
118
+ !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl
119
+ a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead
120
+ a.gb2:hover{color:#fff!important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px
121
+ 0;margin-left:13px;font-size:11px;}.lsbb{background:#eee;border:solid 1px;border-color:#ccc
122
+ #999 #999 #ccc;height:30px;display:block}.pp-new-desktop,.pp-new-mobile{color:red}.ftl,#fll
123
+ a{display:inline-block;margin:0 12px}.lsb{background:url(/images/srpr/nav_logo80.png)
124
+ 0 -258px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px
125
+ arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}#addlang
126
+ a{padding:0 3px}.gac_v div{display:none}.gac_v .gac_v2,.gac_bt{display:block!important}table.gssb_c{z-index:986 }.nbcl{background:url(/images/srpr/nav_logo80.png)
127
+ no-repeat ;height:px;width:px}</style><script>window.rwt=function(a,f,g,l,m,h,c,n,i){try{if(a===window){a=window.event.srcElement;while(a){if(a.href)break;a=a.parentNode}}var
128
+ b=encodeURIComponent||escape,d;d=a.getAttribute("href");if(c&&c.substring(0,6)!="&sig2=")c="&sig2="+c;var
129
+ o=["/url?sa=t","","&cd=",b(m),i?"&authuser="+b(i):"",google.j&&google.j.pf?"&sqi=2":"","&ved=",b(n),"&url=",b(d).replace(/\+/g,"%2B"),"&ei=","tLhHT-XBA-Xg0QGwpfDqDQ",h?"&usg="+h:"",c].join("");a.href=o;a.onmousedown=""}catch(p){}return
130
+ true};
131
+
132
+ </script></head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b
133
+ alink=#ff0000 onload="document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();if(document.images)new
134
+ Image().src=''/images/srpr/nav_logo80.png''" ><textarea id=csi style=display:none></textarea><div
135
+ id=mngb><div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="http://www.google.com/imghp?hl=en&tab=wi">Images</a>
136
+ <a class=gb1 href="http://video.google.com/?hl=en&tab=wv">Videos</a> <a class=gb1
137
+ href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="http://news.google.com/nwshp?hl=en&tab=wn">News</a>
138
+ <a class=gb1 href="http://www.google.com/shopping?hl=en&tab=wf">Shopping</a>
139
+ <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1
140
+ style="text-decoration:none" href="http://www.google.com/intl/en/options/"><u>More</u>
141
+ &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span
142
+ id=gbf class=gbf></span><span id=gbe><a href="/url?sa=p&pref=ig&pval=3&q=http://www.google.com/ig%3Fhl%3Den%26source%3Diglk&usg=AFQjCNFA18XPfgb7dKnXfKz7x7g1GDH1tg"
143
+ class=gb4>iGoogle</a> | </span><a href="http://www.google.com/history/optout?hl=en"
144
+ class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a>
145
+ | <a id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.com/"
146
+ class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh
147
+ style=right:0></div></div><iframe name=wgjf style=display:none></iframe><center><br
148
+ clear=all id=lgpd><div id=lga><img alt="Google" height=95 id=hplogo src="/intl/en_ALL/images/srpr/logo1w.png"
149
+ width=275 style="padding:28px 0 14px" onload="window.lol&&lol()"><br><br></div><form
150
+ action="/search" name=f><table cellpadding=0 cellspacing=0><tr valign=top><td
151
+ width=25%>&nbsp;</td><td align=center nowrap><input name=hl type=hidden value=en><input
152
+ name=source type=hidden value=hp><input type=hidden name=ie value="ISO-8859-1"><div
153
+ class=ds style="height:32px;margin:4px 0"><input autocomplete=off maxlength=2048
154
+ name=q class="lst" title="Google Search" value="" size=57 style="background:#fff;border:1px
155
+ solid #ccc;border-bottom-color:#999;border-right-color:#999;color:#000;margin:0;padding:5px
156
+ 8px 0 6px;vertical-align:top"></div><br style="line-height:0"><span class=ds
157
+ ><span class=lsbb><input name=btnG type=submit value="Google Search" class=lsb></span></span><span
158
+ class=ds><span class=lsbb><input name=btnI type=submit class=lsb value="I&#39;m
159
+ Feeling Lucky"></span></span></td><td nowrap width=25% align=left class="fl
160
+ sblc"><a href="/advanced_search?hl=en">Advanced search</a><a href="/language_tools?hl=en">Language
161
+ tools</a></td></tr></table><input type=hidden id=gbv name=gbv value="1"></form><div
162
+ style="font-size:83%;min-height:3.5em"><br></div><div id=res></div><span id=footer><center
163
+ id=fctr><div style="font-size:10pt"><div id=fll style="margin:19px auto;text-align:center"><a
164
+ href="/intl/en/ads/">Advertising&nbsp;Programs</a><a href="/services/">Business
165
+ Solutions</a><a href="https://plus.google.com/116899029375914044550" rel="publisher">+Google</a><a
166
+ href="/intl/en/about.html">About Google</a></div></div><p style="color:#767676;font-size:8pt">&copy;
167
+ 2012 - <a href="/intl/en/privacy.html">Privacy</a></p></center></span> </center><div
168
+ id=xjsd></div><div id=xjsi><script>if(google.y)google.y.first=[];google.dlj=function(b){window.setTimeout(function(){var
169
+ a=document.createElement("script");a.src=b;document.getElementById("xjsd").appendChild(a)},0)};
170
+
171
+ if(google.y)google.y.first=[];if(!google.xjs){google.dstr=[];google.rein=[];if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new
172
+ Date().getTime();}google.dlj(''/extern_js/f/CgJlbhICdXMgACswRTgALCswWjgALCswDjgALCswFzgALCswPDgALCswUTgALCswCjgAmgICaGUsKzCYATgALCswFjgALCswGTgALCswQTgALCswTTgALCswTjgALCswVDgALCswaTgALCswkAE4ACwrMJIBOAAsKzCsATgALCsw1QE4ACwrMNgBOAAsKzAYOAAsKzAmOAAsgAJQkAJn/YIh1f-gTMsw.js'');google.xjs=1}google.neegg=1;google.mc=[];google.mc=google.mc.concat([[69,{}],[14,{}],[60,{}],[23,{}],[81,{}],[10,{"client":"hp","dh":true,"ds":"","fl":true,"host":"google.com","jsonp":true,"msgs":{"lcky":"I\u0026#39;m
173
+ Feeling Lucky","lml":"Learn more","psrc":"This search was removed from your
174
+ \u003Ca href=\"/history\"\u003EWeb History\u003C/a\u003E","psrl":"Remove","srch":"Google
175
+ Search"},"ovr":{"fm":1,"l":1,"o":1,"p":1,"pf":1,"ps":1,"sn":1,"sw":1},"pq":"","scd":10,"sce":5}],[152,{}],[65,{}],[213,{"pberr":"\u003Cfont
176
+ color=red\u003EError:\u003C/font\u003E The server could not complete your request. Try
177
+ again in 30 seconds."}],[78,{}],[25,{"g":8,"k":false,"m":{"app":true,"bks":true,"blg":true,"dsc":true,"evn":true,"fin":true,"flm":true,"frm":true,"isch":true,"klg":true,"mbl":true,"nws":true,"plcs":true,"ppl":true,"prc":true,"pts":true,"rcp":true,"shop":true,"vid":true},"t":null}],[216,{}],[105,{}],[22,{"db":false,"m_errors":{"32":"Sorry,
178
+ no more results to show.","default":"\u003Cfont color=red\u003EError:\u003C/font\u003E
179
+ The server could not complete your request. Try again in 30 seconds."},"m_tip":"Click
180
+ for more information","nlpm":"-153px -84px","nlpp":"-153px -70px","utp":false}],[77,{}],[146,{}],[144,{}],[84,{}],[24,{}],[38,{}]]);google.y.first.push(function(){if(google.med){google.med(''init'');google.initHistory();google.med(''history'');}google.History&&google.History.initialize(''/'')});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}</script></div><script>(function(){
181
+
182
+ var b,d,e,f;function g(a,c){if(a.removeEventListener){a.removeEventListener("load",c,false);a.removeEventListener("error",c,false)}else{a.detachEvent("onload",c);a.detachEvent("onerror",c)}}function
183
+ h(a){f=(new Date).getTime();++d;a=a||window.event;var c=a.target||a.srcElement;g(c,h)}var
184
+ i=document.getElementsByTagName("img");b=i.length;d=0;for(var j=0,k;j<b;++j){k=i[j];if(k.complete||typeof
185
+ k.src!="string"||!k.src)++d;else if(k.addEventListener){k.addEventListener("load",h,false);k.addEventListener("error",
186
+
187
+ h,false)}else{k.attachEvent("onload",h);k.attachEvent("onerror",h)}}e=b-d;function
188
+ l(){if(!google.timers.load.t)return;google.timers.load.t.ol=(new Date).getTime();google.timers.load.t.iml=f;google.kCSI.imc=d;google.kCSI.imn=b;google.kCSI.imp=e;if(google.stt!==undefined)google.kCSI.stt=google.stt;google.timers.load.t.xjs&&google.report&&google.report(google.timers.load,google.kCSI)}if(window.addEventListener)window.addEventListener("load",
189
+
190
+ l,false);else if(window.attachEvent)window.attachEvent("onload",l);google.timers.load.t.prt=(f=(new
191
+ Date).getTime());
192
+
193
+ })();
194
+
195
+ </script>'
196
+ http_version: '1.1'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unwind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70239385323380 !ruby/object:Gem::Requirement
16
+ requirement: &70198732669380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70239385323380
24
+ version_requirements: *70198732669380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vcr
27
- requirement: &70239385322020 !ruby/object:Gem::Requirement
27
+ requirement: &70198732668820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70239385322020
35
+ version_requirements: *70198732668820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: fakeweb
38
- requirement: &70239385320860 !ruby/object:Gem::Requirement
38
+ requirement: &70198732668260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70239385320860
46
+ version_requirements: *70198732668260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: faraday
49
- requirement: &70239385320340 !ruby/object:Gem::Requirement
49
+ requirement: &70198732687300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0.7'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70239385320340
57
+ version_requirements: *70198732687300
58
58
  description: ! "\t\t\t\t\t\t\t\t\t\tFollows a chain of redirects and reports back
59
59
  on all the steps. \n\t\t\t\t\t\t\t\t\t\tHeavily inspired by John Nunemaker's blog
60
60
  post.\n\t\t\t\t\t\t\t\t\t\thttp://railstips.org/blog/archives/2009/03/04/following-redirects-with-nethttp/\n"
@@ -74,6 +74,7 @@ files:
74
74
  - test/redirect_follower_test.rb
75
75
  - unwind.gemspec
76
76
  - vcr_cassettes/amazon.yml
77
+ - vcr_cassettes/meta_refresh.yml
77
78
  - vcr_cassettes/missing_redirect.yml
78
79
  - vcr_cassettes/no_redirect.yml
79
80
  - vcr_cassettes/pdf.yml