unwind 0.9.0 → 0.9.1
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/lib/unwind/version.rb +1 -1
- data/lib/unwind.rb +4 -0
- data/test/redirect_follower_test.rb +9 -2
- data/vcr_cassettes/no_redirect.yml +230 -0
- metadata +9 -8
data/lib/unwind/version.rb
CHANGED
data/lib/unwind.rb
CHANGED
|
@@ -11,14 +11,21 @@ describe 'Tests :)' do
|
|
|
11
11
|
|
|
12
12
|
it 'should resolve the url' do
|
|
13
13
|
VCR.use_cassette('xZVND1') do
|
|
14
|
-
follower = Unwind::RedirectFollower.new('http://j.mp/xZVND1')
|
|
15
|
-
follower.resolve
|
|
14
|
+
follower = Unwind::RedirectFollower.new('http://j.mp/xZVND1').resolve
|
|
16
15
|
assert_equal 'http://ow.ly/i/s1O0', follower.final_url
|
|
17
16
|
assert_equal 'http://j.mp/xZVND1', follower.original_url
|
|
18
17
|
assert_equal 2, follower.redirects.count
|
|
18
|
+
assert follower.redirected?
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
it 'should not be redirected' do
|
|
23
|
+
VCR.use_cassette('no redirect') do
|
|
24
|
+
follower = Unwind::RedirectFollower.new('http://www.scottw.com').resolve
|
|
25
|
+
assert !follower.redirected?
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
22
29
|
it 'should raise TooManyRedirects' do
|
|
23
30
|
VCR.use_cassette('xZVND1') do
|
|
24
31
|
follower = Unwind::RedirectFollower.new('http://j.mp/xZVND1', 1)
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
---
|
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
|
3
|
+
request: !ruby/struct:VCR::Request
|
|
4
|
+
method: :get
|
|
5
|
+
uri: http://www.scottw.com:80/
|
|
6
|
+
body:
|
|
7
|
+
headers:
|
|
8
|
+
response: !ruby/struct:VCR::Response
|
|
9
|
+
status: !ruby/struct:VCR::ResponseStatus
|
|
10
|
+
code: 200
|
|
11
|
+
message: OK
|
|
12
|
+
headers:
|
|
13
|
+
server:
|
|
14
|
+
- nginx
|
|
15
|
+
date:
|
|
16
|
+
- Tue, 14 Feb 2012 16:55:15 GMT
|
|
17
|
+
content-type:
|
|
18
|
+
- text/html;charset=utf-8
|
|
19
|
+
connection:
|
|
20
|
+
- keep-alive
|
|
21
|
+
x-frame-options:
|
|
22
|
+
- sameorigin
|
|
23
|
+
x-xss-protection:
|
|
24
|
+
- 1; mode=block
|
|
25
|
+
last-modified:
|
|
26
|
+
- Wed, 01 Feb 2012 16:03:28 GMT
|
|
27
|
+
content-length:
|
|
28
|
+
- '15677'
|
|
29
|
+
x-varnish:
|
|
30
|
+
- '1407065053'
|
|
31
|
+
age:
|
|
32
|
+
- '0'
|
|
33
|
+
via:
|
|
34
|
+
- 1.1 varnish
|
|
35
|
+
body: ! "\n<!DOCTYPE html>\n<!--[if IEMobile 7 ]><html class=\"no-js iem7\"><![endif]-->\n<!--[if
|
|
36
|
+
lt IE 9]><html class=\"no-js lte-ie8\"><![endif]-->\n<!--[if (gt IE 8)|(gt IEMobile
|
|
37
|
+
7)|!(IEMobile)|!(IE)]><!--><html class=\"no-js\" lang=\"en\"><!--<![endif]-->\n<head>\n
|
|
38
|
+
\ <meta charset=\"utf-8\">\n <title>Scott Watermasysk</title>\n <meta name=\"author\"
|
|
39
|
+
content=\"Scott Watermasysk\">\n\n \n <meta name=\"description\" content=\"Why
|
|
40
|
+
is this important? It means no more committing the public directory into git.
|
|
41
|
+
Even with just 200 or so posts, my git history felt like it was …\">\n
|
|
42
|
+
\ \n\n <!-- http://t.co/dKP3o1e -->\n <meta name=\"HandheldFriendly\" content=\"True\">\n
|
|
43
|
+
\ <meta name=\"MobileOptimized\" content=\"320\">\n <meta name=\"viewport\"
|
|
44
|
+
content=\"width=device-width, initial-scale=1\">\n\n \n <link rel=\"canonical\"
|
|
45
|
+
href=\"http://www.scottw.com\">\n <link href=\"/favicon.png\" rel=\"icon\">\n
|
|
46
|
+
\ <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\"
|
|
47
|
+
type=\"text/css\">\n <script src=\"/javascripts/modernizr-2.0.js\"></script>\n
|
|
48
|
+
\ <script src=\"/javascripts/ender.js\"></script>\n <script src=\"/javascripts/octopress.js\"
|
|
49
|
+
type=\"text/javascript\"></script>\n <link href=\"http://feeds.simpable.com/simpable\"
|
|
50
|
+
rel=\"alternate\" title=\"Scott Watermasysk\" type=\"application/atom+xml\">\n
|
|
51
|
+
\ <!--Fonts from Google's Web font directory at http://google.com/webfonts -->\n<link
|
|
52
|
+
href='http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic'
|
|
53
|
+
rel='stylesheet' type='text/css'>\n<link href='http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic'
|
|
54
|
+
rel='stylesheet' type='text/css'>\n\n \n <script type=\"text/javascript\">\n
|
|
55
|
+
\ var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-65729-10']);\n
|
|
56
|
+
\ _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script');
|
|
57
|
+
ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol
|
|
58
|
+
? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var
|
|
59
|
+
s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga,
|
|
60
|
+
s);\n })();\n </script>\n\n\n</head>\n\n<body >\n <header role=\"banner\"><hgroup>\n
|
|
61
|
+
\ <h1><a href=\"/\">Scott Watermasysk</a></h1>\n \n <h2>Still Learning</h2>\n
|
|
62
|
+
\ \n</hgroup>\n\n</header>\n <nav role=\"navigation\"><ul class=\"subscription\"
|
|
63
|
+
data-subscription=\"rss\">\n <li><a href=\"http://feeds.simpable.com/simpable\"
|
|
64
|
+
rel=\"subscribe-rss\" title=\"subscribe via RSS\">RSS</a></li>\n \n</ul>\n
|
|
65
|
+
\ \n<form action=\"http://google.com/search\" method=\"get\">\n <fieldset role=\"search\">\n
|
|
66
|
+
\ <input type=\"hidden\" name=\"q\" value=\"site:www.scottw.com\" />\n <input
|
|
67
|
+
class=\"search\" type=\"text\" name=\"q\" results=\"0\" placeholder=\"Search\"/>\n
|
|
68
|
+
\ </fieldset>\n</form>\n \n<ul role=main-navigation>\n <li><a href=\"/\">Home</a></li>\n
|
|
69
|
+
\ <li><a href=\"/about\">About</a></li>\n <li><a href=\"/archives\">Archives</a></li>\n
|
|
70
|
+
\ <li><a href=\"/links\">Links</a></li>\n <li><a href=\"http://twitter.com/scottw\">@ScottW</a></li>\n</ul>\n\n</nav>\n
|
|
71
|
+
\ <div id=\"main\">\n <div id=\"content\">\n <div class=\"blog-index\">\n
|
|
72
|
+
\ \n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!-- This defines
|
|
73
|
+
how Octopress will use posts with external-url. -->\n\t\t\t\t<h1 class=\"entry-title\"><a
|
|
74
|
+
class=\"external-link\" href=\"http://jasongarber.com/blog/2012/01/10/deploying-octopress-to-heroku-with-a-custom-buildpack/\">Deploying
|
|
75
|
+
Octopress to Heroku With a Custom Buildpack</a></h1>\n\t\t\t \t\n\t\t \t\n
|
|
76
|
+
\ \n <p class=\"meta\">\n \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2012-02-01T10:09:00+00:00\"
|
|
77
|
+
pubdate data-updated=\"true\">Feb 1<span>st</span>, 2012</time>\n \n
|
|
78
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>Why is
|
|
79
|
+
this important? It means no more committing the public directory into git.</p>\n\n<p>Even
|
|
80
|
+
with just 200 or so posts, my git history felt like it was exploding every time
|
|
81
|
+
I wrote a new post.</p>\n\n<p>I went ahead and nuked my old blog repo and <a
|
|
82
|
+
href=\"http://github.com/scottwater/scottw.com\">recommitted this cleaner</a>
|
|
83
|
+
(and leaner) version if you need a starting place.</p>\n\n<p>Jason’s steps
|
|
84
|
+
were great, but I did run into two snags:</p>\n\n<ol>\n<li>I could not set the
|
|
85
|
+
buildpack directly when creating the app. I had to add the heroku config var
|
|
86
|
+
for it instead.</li>\n<li>I got an error about a missing daemon gem. Heroku’s
|
|
87
|
+
cedar stack is still in beta and running a RC version of bundler (as of today).
|
|
88
|
+
I haven’t dug any further, but nuking my gem vendor folder and starting
|
|
89
|
+
over seemed to do the trick.</li>\n</ol>\n\n</div>\n \n \n\n\n\n\t<div class=\"entry-content\"></div>\n\t<footer><a
|
|
90
|
+
rel=\"full-article\" href=\"/deploying-octopress-to-heroku\">Permalink</a></footer>\n\n\n
|
|
91
|
+
\ </article>\n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!--
|
|
92
|
+
This defines how Octopress will use posts with external-url. -->\n\t\t\t\t<h1
|
|
93
|
+
class=\"entry-title\"><a class=\"external-link\" href=\"http://www.candlerblog.com/2012/01/30/octopress-linked-list/\">Octopress
|
|
94
|
+
Linked List</a></h1>\n\t\t\t \t\n\t\t \t\n \n <p class=\"meta\">\n
|
|
95
|
+
\ \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2012-02-01T06:39:00+00:00\"
|
|
96
|
+
pubdate data-updated=\"true\">Feb 1<span>st</span>, 2012</time>\n \n
|
|
97
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>I have
|
|
98
|
+
been meaning to implement this on my own for a while.</p>\n\n<p>I did make one
|
|
99
|
+
minor adjustment David’s example. Instead of inlining the glyph, I am
|
|
100
|
+
adding it via CSS:</p>\n\n<figure class='code'><figcaption><span></span></figcaption><div
|
|
101
|
+
class=\"highlight\"><table><tr><td class=\"gutter\"><pre class=\"line-numbers\"><span
|
|
102
|
+
class='line-number'>1</span>\n<span class='line-number'>2</span>\n<span class='line-number'>3</span>\n</pre></td><td
|
|
103
|
+
class='code'><pre><code class='css'><span class='line'><span class=\"nt\">a</span><span
|
|
104
|
+
class=\"nc\">.external-link</span><span class=\"nd\">:after</span> <span class=\"p\">{</span>\n</span><span
|
|
105
|
+
class='line'> <span class=\"k\">content</span><span class=\"o\">:</span> <span
|
|
106
|
+
class=\"s2\">" \\27A6"</span><span class=\"p\">;</span>\n</span><span
|
|
107
|
+
class='line'><span class=\"p\">}</span>\n</span></code></pre></td></tr></table></div></figure>\n\n</div>\n
|
|
108
|
+
\ \n \n\n\n\n\t<div class=\"entry-content\"></div>\n\t<footer><a rel=\"full-article\"
|
|
109
|
+
href=\"/octopress-linked-list\">Permalink</a></footer>\n\n\n </article>\n
|
|
110
|
+
\ \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!-- Now we're back to
|
|
111
|
+
normal posts. Note the links used under href in both headers.-->\n\t\t\t \t<h1
|
|
112
|
+
class=\"entry-title\"><a href=\"/async-emails-with-sorcery\">Async Emails With
|
|
113
|
+
Sorcery</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p class=\"meta\">\n \n\n\n\n\n\n\n\n\n
|
|
114
|
+
\ \n\n\n<time datetime=\"2011-11-28T12:27:00+00:00\" pubdate data-updated=\"true\">Nov
|
|
115
|
+
28<span>th</span>, 2011</time>\n \n </p>\n \n </header>\n\n\n
|
|
116
|
+
\ <div class=\"entry-content\"><p>For <a href=\"http://www.kickofflabs.com\">KickoffLabs</a>,
|
|
117
|
+
we rolled our own authentication. This worked really well, but doing it (even
|
|
118
|
+
if we packaged it up) for future projects is less than appealing.</p>\n\n<p>I
|
|
119
|
+
have used/tried Devise, Clearance, and AuthLogic but none of them seemed to
|
|
120
|
+
fit.</p>\n\n<p>Enter <a href=\"https://github.com/NoamB/sorcery\">Sorcery</a>.
|
|
121
|
+
Sorcery is a relatively new player in the rails authentication arms race.</p>\n\n</div>\n
|
|
122
|
+
\ \n \n <footer>\n <a rel=\"full-article\" href=\"/async-emails-with-sorcery\">Read
|
|
123
|
+
on →</a>\n </footer>\n \n\n\n\n\n </article>\n \n \n <article>\n
|
|
124
|
+
\ \n <header>\n\t\t\n\t\t\t<!-- Now we're back to normal posts. Note the
|
|
125
|
+
links used under href in both headers.-->\n\t\t\t \t<h1 class=\"entry-title\"><a
|
|
126
|
+
href=\"/heroku-ssl-and-dnsimple\">Heroku SSL via DNSimple</a></h1>\n\t\t\t\t\n\t\t
|
|
127
|
+
\ \t\n \n <p class=\"meta\">\n \n\n\n\n\n\n\n\n\n \n\n\n<time
|
|
128
|
+
datetime=\"2011-11-22T09:56:00+00:00\" pubdate data-updated=\"true\">Nov 22<span>nd</span>,
|
|
129
|
+
2011</time>\n \n </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>If
|
|
130
|
+
you google for Heroku SSL you will find a surprisingly long list of blog posts
|
|
131
|
+
usually with many steps.</p>\n\n<p>However, it is actually much easier than
|
|
132
|
+
what most of them list, especially if you are using <a href=\"https://dnsimple.com/r/a2fb5da9458e27\">DNSimple</a>
|
|
133
|
+
(note: affiliate link).</p>\n\n<p>Here is how to setup a <strong>Hostname Based</strong>
|
|
134
|
+
certificate on Heroku:</p>\n\n</div>\n \n \n <footer>\n <a rel=\"full-article\"
|
|
135
|
+
href=\"/heroku-ssl-and-dnsimple\">Read on →</a>\n </footer>\n \n\n\n\n\n
|
|
136
|
+
\ </article>\n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!--
|
|
137
|
+
Now we're back to normal posts. Note the links used under href in both headers.-->\n\t\t\t
|
|
138
|
+
\t<h1 class=\"entry-title\"><a href=\"/sinatra-public-heroku\">Static Files
|
|
139
|
+
Using Sinatra::Base on Heroku</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p class=\"meta\">\n
|
|
140
|
+
\ \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2011-11-01T10:11:00+00:00\"
|
|
141
|
+
pubdate data-updated=\"true\">Nov 1<span>st</span>, 2011</time>\n \n
|
|
142
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>I deployed
|
|
143
|
+
a small <a href=\"http://www.sinatrarb.com/\">Sinatra</a> app last night to
|
|
144
|
+
<a href=\"http://www.heroku.com\">Heroku</a> for the new <a href=\"http://api.kickofflabs.com\">KickoffLabs
|
|
145
|
+
API</a>.</p>\n\n<p>Most of the Sinatra apps I have deployed in the past have
|
|
146
|
+
been small prototypes and used the inline Sinatra app style.</p>\n\n<p>However,
|
|
147
|
+
in this case, I made the decision early on to use the Sinatra::Base class style
|
|
148
|
+
since we plan on growing the API codebase (ie, we are going to keep it around
|
|
149
|
+
for a long time).</p>\n\n</div>\n \n \n <footer>\n <a rel=\"full-article\"
|
|
150
|
+
href=\"/sinatra-public-heroku\">Read on →</a>\n </footer>\n \n\n\n\n\n
|
|
151
|
+
\ </article>\n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!--
|
|
152
|
+
Now we're back to normal posts. Note the links used under href in both headers.-->\n\t\t\t
|
|
153
|
+
\t<h1 class=\"entry-title\"><a href=\"/simple-dev-tools\">My Favorite Tools
|
|
154
|
+
for a Simple Development Environment</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p
|
|
155
|
+
class=\"meta\">\n \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2011-09-13T10:41:00+00:00\"
|
|
156
|
+
pubdate data-updated=\"true\">Sep 13<span>th</span>, 2011</time>\n \n
|
|
157
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>Here is
|
|
158
|
+
an updated list of the tools I use daily to try and make development both simple
|
|
159
|
+
and enjoyable.</p>\n\n</div>\n \n \n <footer>\n <a rel=\"full-article\"
|
|
160
|
+
href=\"/simple-dev-tools\">Read on →</a>\n </footer>\n \n\n\n\n\n </article>\n
|
|
161
|
+
\ \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!-- Now we're back to
|
|
162
|
+
normal posts. Note the links used under href in both headers.-->\n\t\t\t \t<h1
|
|
163
|
+
class=\"entry-title\"><a href=\"/my-favorite-podcasts\">My Favorite Startup
|
|
164
|
+
and Ruby Podcasts</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p class=\"meta\">\n
|
|
165
|
+
\ \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2011-09-08T19:18:00+00:00\"
|
|
166
|
+
pubdate data-updated=\"true\">Sep 8<span>th</span>, 2011</time>\n \n
|
|
167
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>My taste
|
|
168
|
+
in podcasts varies by what is actually going on in my life. Right now it is
|
|
169
|
+
mostly startups (<a href=\"http://www.kickofflabs.com\">KickoffLabs</a>) and
|
|
170
|
+
Ruby.</p>\n\n<p>Here are my current favorites:</p>\n\n</div>\n \n \n <footer>\n
|
|
171
|
+
\ <a rel=\"full-article\" href=\"/my-favorite-podcasts\">Read on →</a>\n
|
|
172
|
+
\ </footer>\n \n\n\n\n\n </article>\n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!--
|
|
173
|
+
Now we're back to normal posts. Note the links used under href in both headers.-->\n\t\t\t
|
|
174
|
+
\t<h1 class=\"entry-title\"><a href=\"/resque-mail-queue-gem\">Resque Mail Queue
|
|
175
|
+
Gem</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p class=\"meta\">\n \n\n\n\n\n\n\n\n\n
|
|
176
|
+
\ \n\n\n<time datetime=\"2011-09-07T07:29:00+00:00\" pubdate data-updated=\"true\">Sep
|
|
177
|
+
7<span>th</span>, 2011</time>\n \n </p>\n \n </header>\n\n\n
|
|
178
|
+
\ <div class=\"entry-content\"><p>I have written two times (<a href=\"http://www.scottw.com/simple-resque-mail-queue\">Simple
|
|
179
|
+
Resque Mail Queue</a> and <a href=\"http://www.scottw.com/simple-resque-mail-queue-ii\">Simple
|
|
180
|
+
Resque Mail Queue II</a>) before about a simple module <em>MailQueue</em> which
|
|
181
|
+
can be used to easily send email asynchronously with <a href=\"http://github.com/defunkt/resque\">Resque</a>.</p>\n\n</div>\n
|
|
182
|
+
\ \n \n <footer>\n <a rel=\"full-article\" href=\"/resque-mail-queue-gem\">Read
|
|
183
|
+
on →</a>\n </footer>\n \n\n\n\n\n </article>\n \n \n <article>\n
|
|
184
|
+
\ \n <header>\n\t\t\n\t\t\t<!-- Now we're back to normal posts. Note the
|
|
185
|
+
links used under href in both headers.-->\n\t\t\t \t<h1 class=\"entry-title\"><a
|
|
186
|
+
href=\"/automated-timezone-detection\">Improving Automated Timezone Detection</a></h1>\n\t\t\t\t\n\t\t
|
|
187
|
+
\ \t\n \n <p class=\"meta\">\n \n\n\n\n\n\n\n\n\n \n\n\n<time
|
|
188
|
+
datetime=\"2011-09-06T08:30:00+00:00\" pubdate data-updated=\"true\">Sep 6<span>th</span>,
|
|
189
|
+
2011</time>\n \n </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>tl;dr
|
|
190
|
+
- Just using the Javascript getTimezoneOffset to auto-detect timezone information
|
|
191
|
+
will not work properly during daylight savings and has a couple of other minor
|
|
192
|
+
gotchas. Check out the <a href=\"https://bitbucket.org/pellepim/jstimezonedetect/wiki/Home\">jsTimezoneDetect</a>
|
|
193
|
+
and my simple <a href=\"https://github.com/scottwater/jquery.detect_timezone\">jQuery
|
|
194
|
+
detect_timezone plugin</a> for more accurate timezone information. I also put
|
|
195
|
+
together a gem, <a href=\"https://github.com/scottwater/detect_timezone_rails\">detect_timezone_rails</a>,
|
|
196
|
+
to automate the process in Rails.</p>\n\n</div>\n \n \n <footer>\n <a
|
|
197
|
+
rel=\"full-article\" href=\"/automated-timezone-detection\">Read on →</a>\n
|
|
198
|
+
\ </footer>\n \n\n\n\n\n </article>\n \n \n <article>\n \n <header>\n\t\t\n\t\t\t<!--
|
|
199
|
+
Now we're back to normal posts. Note the links used under href in both headers.-->\n\t\t\t
|
|
200
|
+
\t<h1 class=\"entry-title\"><a href=\"/multiple-smtp-servers-with-action-mailer\">Multiple
|
|
201
|
+
Smtp Servers With Action Mailer</a></h1>\n\t\t\t\t\n\t\t \t\n \n <p
|
|
202
|
+
class=\"meta\">\n \n\n\n\n\n\n\n\n\n \n\n\n<time datetime=\"2011-09-04T09:25:00+00:00\"
|
|
203
|
+
pubdate data-updated=\"true\">Sep 4<span>th</span>, 2011</time>\n \n
|
|
204
|
+
\ </p>\n \n </header>\n\n\n <div class=\"entry-content\"><p>We recently
|
|
205
|
+
started using <a href=\"http://postmarkapp.com\">PostMark</a> on <a href=\"http://www.kickofflabs.com\">KickoffLabs</a>.
|
|
206
|
+
So far the service has been excellent. Unfortunately, not all of our emails
|
|
207
|
+
fit their terms of service. I looked around for how configure an addition SMTP
|
|
208
|
+
server via Action Mailer (and Mail gem). Surprisingly, this is not supported.</p>\n\n</div>\n
|
|
209
|
+
\ \n \n <footer>\n <a rel=\"full-article\" href=\"/multiple-smtp-servers-with-action-mailer\">Read
|
|
210
|
+
on →</a>\n </footer>\n \n\n\n\n\n </article>\n \n <div class=\"pagination\">\n
|
|
211
|
+
\ \n <a class=\"prev\" href=\"/page/2/\">← Older</a>\n \n <a
|
|
212
|
+
href=\"/blog/archives\">Blog Archives</a>\n \n </div>\n</div>\n </div>\n
|
|
213
|
+
\ </div>\n <footer role=\"contentinfo\"><p>\n Copyright © 2012 - Scott
|
|
214
|
+
Watermasysk -\n <span class=\"credit\">Powered by <a href=\"http://octopress.org\">Octopress</a>
|
|
215
|
+
and <a href=\"http://heroku.com\">Heroku</a></span>\n</p>\n\n</footer>\n \n\n<script
|
|
216
|
+
type=\"text/javascript\">\n var disqus_shortname = 'wwwscottw';\n \n
|
|
217
|
+
\ \n var disqus_script = 'count.js';\n \n (function ()
|
|
218
|
+
{\n var dsq = document.createElement('script'); dsq.type = 'text/javascript';
|
|
219
|
+
dsq.async = true;\n dsq.src = 'http://' + disqus_shortname + '.disqus.com/'
|
|
220
|
+
+ disqus_script;\n (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n
|
|
221
|
+
\ }());\n</script>\n\n\n\n\n\n <script type=\"text/javascript\">\n (function()
|
|
222
|
+
{\n var script = document.createElement('script'); script.type = 'text/javascript';
|
|
223
|
+
script.async = true;\n script.src = 'https://apis.google.com/js/plusone.js';\n
|
|
224
|
+
\ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(script,
|
|
225
|
+
s);\n })();\n </script>\n\n\n\n <script type=\"text/javascript\">\n (function(){\n
|
|
226
|
+
\ var twitterWidgets = document.createElement('script');\n twitterWidgets.type
|
|
227
|
+
= 'text/javascript';\n twitterWidgets.async = true;\n twitterWidgets.src
|
|
228
|
+
= 'http://platform.twitter.com/widgets.js';\n document.getElementsByTagName('head')[0].appendChild(twitterWidgets);\n
|
|
229
|
+
\ })();\n </script>\n\n\n\n\n\n</body>\n</html>\n"
|
|
230
|
+
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
|
+
version: 0.9.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-02-
|
|
12
|
+
date: 2012-02-14 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70247991506280 !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: *
|
|
24
|
+
version_requirements: *70247991506280
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: vcr
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &70247991505660 !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: *
|
|
35
|
+
version_requirements: *70247991505660
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: fakeweb
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &70247991505040 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ! '>='
|
|
@@ -43,7 +43,7 @@ dependencies:
|
|
|
43
43
|
version: '0'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *70247991505040
|
|
47
47
|
description: ! "\t\t\t\t\t\t\t\t\t\tFollows a chain of redirects and reports back
|
|
48
48
|
on all the steps. \n\t\t\t\t\t\t\t\t\t\tHeavily inspired by John Nunemaker's blog
|
|
49
49
|
post.\n\t\t\t\t\t\t\t\t\t\thttp://railstips.org/blog/archives/2009/03/04/following-redirects-with-nethttp/\n"
|
|
@@ -62,6 +62,7 @@ files:
|
|
|
62
62
|
- lib/unwind/version.rb
|
|
63
63
|
- test/redirect_follower_test.rb
|
|
64
64
|
- unwind.gemspec
|
|
65
|
+
- vcr_cassettes/no_redirect.yml
|
|
65
66
|
- vcr_cassettes/xZVND1.yml
|
|
66
67
|
homepage: ''
|
|
67
68
|
licenses: []
|