hwacha 0.3.0 → 1.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/lib/hwacha.rb +2 -2
- data/lib/hwacha/config.rb +11 -1
- data/lib/hwacha/version.rb +1 -1
- data/spec/fixtures/cassettes/follow_redirects_false.yml +51 -0
- data/spec/fixtures/cassettes/follow_redirects_true.yml +651 -0
- data/spec/integration/hwacha_spec.rb +36 -0
- data/spec/lib/hwacha/config_spec.rb +20 -3
- metadata +21 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52d5b83b410ebcfca63a55dc5c6711a45e022144
|
4
|
+
data.tar.gz: ce16e24d25bfc320fb9d4906ca2566eeaa982d28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91aa32452ddbd2da585fe7fe92da6aeccd58182eb69801dae632bbcfee228e7e6f733016d779c5caba79826e83fd291ab77ed2781284e9faa8e979d810cfdf9a
|
7
|
+
data.tar.gz: b932e0b3754c8c32da3fca9faefcd0920b0406ed5b1072b47ea1f4da453517e23637a4655ea0a33ed8981a8de15e58444a3f466ce38b04624f57f243861f481c
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/lib/hwacha.rb
CHANGED
@@ -21,7 +21,7 @@ class Hwacha
|
|
21
21
|
hydra = build_hydra
|
22
22
|
|
23
23
|
Array(urls).each do |url|
|
24
|
-
request = Typhoeus::Request.new(url)
|
24
|
+
request = Typhoeus::Request.new(url, config.request_options)
|
25
25
|
request.on_complete do |response|
|
26
26
|
yield response.effective_url, response
|
27
27
|
end
|
@@ -42,6 +42,6 @@ class Hwacha
|
|
42
42
|
alias :strike_true :find_existing
|
43
43
|
|
44
44
|
def build_hydra
|
45
|
-
Typhoeus::Hydra.new(config.
|
45
|
+
Typhoeus::Hydra.new(config.hydra_options)
|
46
46
|
end
|
47
47
|
end
|
data/lib/hwacha/config.rb
CHANGED
@@ -2,16 +2,26 @@ require 'ostruct'
|
|
2
2
|
|
3
3
|
class Hwacha
|
4
4
|
class Config < OpenStruct
|
5
|
-
def
|
5
|
+
def hydra_options
|
6
6
|
options = {}
|
7
7
|
options.merge(concurrency_option)
|
8
8
|
end
|
9
9
|
|
10
|
+
def request_options
|
11
|
+
options = {}
|
12
|
+
options.merge(follow_redirects_option)
|
13
|
+
end
|
14
|
+
|
10
15
|
private
|
11
16
|
|
12
17
|
def concurrency_option
|
13
18
|
return {} if max_concurrent_requests.nil?
|
14
19
|
{ :max_concurrency => max_concurrent_requests }
|
15
20
|
end
|
21
|
+
|
22
|
+
def follow_redirects_option
|
23
|
+
return { :followlocation => false } if follow_redirects.nil?
|
24
|
+
{ :followlocation => !!follow_redirects }
|
25
|
+
end
|
16
26
|
end
|
17
27
|
end
|
data/lib/hwacha/version.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://www.rakeroutes.com/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Typhoeus - https://github.com/typhoeus/typhoeus
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 301
|
15
|
+
message: Moved Permanently
|
16
|
+
headers:
|
17
|
+
Date:
|
18
|
+
- Tue, 14 Jan 2014 03:03:38 GMT
|
19
|
+
Server:
|
20
|
+
- Apache
|
21
|
+
Location:
|
22
|
+
- http://rakeroutes.com/
|
23
|
+
Vary:
|
24
|
+
- Accept-Encoding
|
25
|
+
Content-Length:
|
26
|
+
- '230'
|
27
|
+
Content-Type:
|
28
|
+
- text/html; charset=iso-8859-1
|
29
|
+
body:
|
30
|
+
encoding: US-ASCII
|
31
|
+
string: ! '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
32
|
+
|
33
|
+
<html><head>
|
34
|
+
|
35
|
+
<title>301 Moved Permanently</title>
|
36
|
+
|
37
|
+
</head><body>
|
38
|
+
|
39
|
+
<h1>Moved Permanently</h1>
|
40
|
+
|
41
|
+
<p>The document has moved <a href="http://rakeroutes.com/">here</a>.</p>
|
42
|
+
|
43
|
+
</body></html>
|
44
|
+
|
45
|
+
'
|
46
|
+
http_version: '1.1'
|
47
|
+
adapter_metadata:
|
48
|
+
effective_url: !binary |-
|
49
|
+
aHR0cDovL3d3dy5yYWtlcm91dGVzLmNvbS8=
|
50
|
+
recorded_at: Tue, 14 Jan 2014 03:03:37 GMT
|
51
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,651 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://www.rakeroutes.com/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Typhoeus - https://github.com/typhoeus/typhoeus
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: OK
|
16
|
+
headers:
|
17
|
+
Date:
|
18
|
+
- Tue, 14 Jan 2014 03:03:38 GMT
|
19
|
+
Server:
|
20
|
+
- Apache
|
21
|
+
Accept-Ranges:
|
22
|
+
- bytes
|
23
|
+
X-Mod-Pagespeed:
|
24
|
+
- 1.4.26.5-3533
|
25
|
+
Cache-Control:
|
26
|
+
- max-age=0, no-cache, must-revalidate
|
27
|
+
Vary:
|
28
|
+
- Accept-Encoding,User-Agent
|
29
|
+
Content-Length:
|
30
|
+
- '14856'
|
31
|
+
Content-Type:
|
32
|
+
- text/html
|
33
|
+
body:
|
34
|
+
encoding: US-ASCII
|
35
|
+
string: ! '
|
36
|
+
|
37
|
+
<!DOCTYPE html>
|
38
|
+
|
39
|
+
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
|
40
|
+
|
41
|
+
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
|
42
|
+
|
43
|
+
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js"
|
44
|
+
lang="en"><!--<![endif]-->
|
45
|
+
|
46
|
+
<head>
|
47
|
+
|
48
|
+
<meta charset="utf-8">
|
49
|
+
|
50
|
+
<title>Rake Routes</title>
|
51
|
+
|
52
|
+
<meta name="author" content="Stephen Ball">
|
53
|
+
|
54
|
+
<meta name="description" content="A blog focused on the new Ruby/Rails developer.
|
55
|
+
From the basics to the advanced; we try to write every article to be completely
|
56
|
+
accessible.">
|
57
|
+
|
58
|
+
<!-- http://t.co/dKP3o1e -->
|
59
|
+
|
60
|
+
<meta name="HandheldFriendly" content="True">
|
61
|
+
|
62
|
+
<meta name="MobileOptimized" content="320">
|
63
|
+
|
64
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
65
|
+
|
66
|
+
<link rel="canonical" href="http://rakeroutes.com">
|
67
|
+
|
68
|
+
<link href="http://rakeroutes.com/xfavicon.png.pagespeed.ic.9sqLog9_Yb.png"
|
69
|
+
rel="icon">
|
70
|
+
|
71
|
+
<link href="http://rakeroutes.com/stylesheets/A.screen.css.pagespeed.cf.B_lQ_FV7Zb.css"
|
72
|
+
media="screen, projection" rel="stylesheet" type="text/css">
|
73
|
+
|
74
|
+
<script src="http://rakeroutes.com/javascripts/modernizr-2.0.js.pagespeed.jm.tWJiHFCbtH.js"></script>
|
75
|
+
|
76
|
+
<script src="http://rakeroutes.com/javascripts/ender.js.pagespeed.jm.RrToSBMcQ6.js"></script>
|
77
|
+
|
78
|
+
<script src="http://rakeroutes.com/javascripts/octopress.js.pagespeed.jm.1C8AxdO_gr.js"
|
79
|
+
type="text/javascript"></script>
|
80
|
+
|
81
|
+
<link href="http://feeds.feedburner.com/RakeRoutes" rel="alternate" title="Rake
|
82
|
+
Routes" type="application/atom+xml">
|
83
|
+
|
84
|
+
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
|
85
|
+
|
86
|
+
<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic"
|
87
|
+
rel="stylesheet" type="text/css">
|
88
|
+
|
89
|
+
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic"
|
90
|
+
rel="stylesheet" type="text/css">
|
91
|
+
|
92
|
+
<meta name="readability-verification" content="AK9Dcwz9jtUc56rWDsh5HXSfVARa3Z7GDjCdBtk9"/>
|
93
|
+
|
94
|
+
<meta name="readability-verification" content="EAL7Vhv7W4KCBkyHjGZBxndkzqZfmbTVGRRVRFre"/>
|
95
|
+
|
96
|
+
</head>
|
97
|
+
|
98
|
+
<body>
|
99
|
+
|
100
|
+
<header role="banner"><hgroup>
|
101
|
+
|
102
|
+
<h1><a href="/">Rake Routes</a></h1>
|
103
|
+
|
104
|
+
<h2>Rails, Ruby, and other programming.</h2>
|
105
|
+
|
106
|
+
</hgroup>
|
107
|
+
|
108
|
+
</header>
|
109
|
+
|
110
|
+
<nav role="navigation"><ul class="subscription" data-subscription="rss email">
|
111
|
+
|
112
|
+
<li><a onclick="clicky.goal( ''6111'' ); clicky.pause( 500 );" href="http://feeds.feedburner.com/RakeRoutes"
|
113
|
+
rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
|
114
|
+
|
115
|
+
<li><a onclick="clicky.goal(''6117''); clicky.pause( 500 );" href="http://feedburner.google.com/fb/a/mailverify?uri=RakeRoutes&loc=en_US"
|
116
|
+
rel="subscribe-email" title="subscribe via email">Email</a></li>
|
117
|
+
|
118
|
+
</ul>
|
119
|
+
|
120
|
+
<form action="http://google.com/search" method="get">
|
121
|
+
|
122
|
+
<fieldset role="search">
|
123
|
+
|
124
|
+
<input type="hidden" name="q" value="site:rakeroutes.com"/>
|
125
|
+
|
126
|
+
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
|
127
|
+
|
128
|
+
</fieldset>
|
129
|
+
|
130
|
+
</form>
|
131
|
+
|
132
|
+
<ul class="main-navigation">
|
133
|
+
|
134
|
+
<li><a href="/">Blog</a></li>
|
135
|
+
|
136
|
+
<li><a href="/blog/archives">Archives</a></li>
|
137
|
+
|
138
|
+
</ul>
|
139
|
+
|
140
|
+
</nav>
|
141
|
+
|
142
|
+
<div id="main">
|
143
|
+
|
144
|
+
<div id="content">
|
145
|
+
|
146
|
+
<div class="blog-index">
|
147
|
+
|
148
|
+
<article>
|
149
|
+
|
150
|
+
<header>
|
151
|
+
|
152
|
+
<h1 class="entry-title"><a href="/blog/lets-use-hwacha-to-scan-urls/">Let’s
|
153
|
+
Use Hwacha to Scan URLs</a></h1>
|
154
|
+
|
155
|
+
<p class="meta">
|
156
|
+
|
157
|
+
<time datetime="2013-12-18T23:43:00-05:00" pubdate data-updated="true">Dec
|
158
|
+
18<span>th</span>, 2013</time>
|
159
|
+
|
160
|
+
</p>
|
161
|
+
|
162
|
+
</header>
|
163
|
+
|
164
|
+
<div class="entry-content"><p>I’ve written a gem, <a href="https://github.com/sdball/hwacha">Hwacha</a>,
|
165
|
+
as a wrapper
|
166
|
+
|
167
|
+
around Typhoeus to allow for quick and easy response checking for multiple
|
168
|
+
|
169
|
+
URLs. Let’s go through some simple use cases!</p>
|
170
|
+
|
171
|
+
</div>
|
172
|
+
|
173
|
+
<footer>
|
174
|
+
|
175
|
+
<a rel="full-article" href="/blog/lets-use-hwacha-to-scan-urls/">Read on →</a>
|
176
|
+
|
177
|
+
</footer>
|
178
|
+
|
179
|
+
</article>
|
180
|
+
|
181
|
+
<article>
|
182
|
+
|
183
|
+
<header>
|
184
|
+
|
185
|
+
<h1 class="entry-title"><a href="/blog/deliberate-git/">Deliberate Git</a></h1>
|
186
|
+
|
187
|
+
<p class="meta">
|
188
|
+
|
189
|
+
<time datetime="2013-08-19T19:35:00-04:00" pubdate data-updated="true">Aug
|
190
|
+
19<span>th</span>, 2013</time>
|
191
|
+
|
192
|
+
</p>
|
193
|
+
|
194
|
+
</header>
|
195
|
+
|
196
|
+
<div class="entry-content"><p>Hello Internet! Here’s my talk “Deliberate
|
197
|
+
Git” in blog post form.</p>
|
198
|
+
|
199
|
+
<p>There’s also video of my presentation of <a href="http://steelcityruby.confbots.com/video/72762735">Deliberate
|
200
|
+
Git at Steel City Ruby 2013</a>.</p>
|
201
|
+
|
202
|
+
<p>If you’d like to just read the slides they’re up on Speaker
|
203
|
+
Deck: <a href="https://speakerdeck.com/sdball/deliberate-git">Deliberate
|
204
|
+
|
205
|
+
Git - Slides</a>. Although I highly
|
206
|
+
|
207
|
+
recommend just pointing people to this blog post if they want to read the
|
208
|
+
talk
|
209
|
+
|
210
|
+
instead of watching it online.</p>
|
211
|
+
|
212
|
+
<p>Special thanks to PhishMe for sending me to Steel City Ruby to give this
|
213
|
+
talk!</p>
|
214
|
+
|
215
|
+
</div>
|
216
|
+
|
217
|
+
<footer>
|
218
|
+
|
219
|
+
<a rel="full-article" href="/blog/deliberate-git/">Read on →</a>
|
220
|
+
|
221
|
+
</footer>
|
222
|
+
|
223
|
+
</article>
|
224
|
+
|
225
|
+
<article>
|
226
|
+
|
227
|
+
<header>
|
228
|
+
|
229
|
+
<h1 class="entry-title"><a href="/blog/customize-your-irb/">Customize Your
|
230
|
+
IRB</a></h1>
|
231
|
+
|
232
|
+
<p class="meta">
|
233
|
+
|
234
|
+
<time datetime="2013-03-19T09:00:00-04:00" pubdate data-updated="true">Mar
|
235
|
+
19<span>th</span>, 2013</time>
|
236
|
+
|
237
|
+
</p>
|
238
|
+
|
239
|
+
</header>
|
240
|
+
|
241
|
+
<div class="entry-content"><p>You probably spend a lot of time in IRB (or
|
242
|
+
the Rails console) but have you
|
243
|
+
|
244
|
+
taken the time to customize it? Today we’ll take a look at the things
|
245
|
+
I’ve
|
246
|
+
|
247
|
+
added to mine, and I’ll show you how to hack in a .irbrc_rails that’s
|
248
|
+
only loaded
|
249
|
+
|
250
|
+
in the Rails console.</p>
|
251
|
+
|
252
|
+
</div>
|
253
|
+
|
254
|
+
<footer>
|
255
|
+
|
256
|
+
<a rel="full-article" href="/blog/customize-your-irb/">Read on →</a>
|
257
|
+
|
258
|
+
</footer>
|
259
|
+
|
260
|
+
</article>
|
261
|
+
|
262
|
+
<article>
|
263
|
+
|
264
|
+
<header>
|
265
|
+
|
266
|
+
<h1 class="entry-title"><a href="/blog/program-like-a-videogamer/">Program
|
267
|
+
Like a Videogamer</a></h1>
|
268
|
+
|
269
|
+
<p class="meta">
|
270
|
+
|
271
|
+
<time datetime="2013-02-06T09:01:00-05:00" pubdate data-updated="true">Feb
|
272
|
+
6<span>th</span>, 2013</time>
|
273
|
+
|
274
|
+
</p>
|
275
|
+
|
276
|
+
</header>
|
277
|
+
|
278
|
+
<div class="entry-content"><p>I see a lot of you out there worried about the
|
279
|
+
next step in your programming
|
280
|
+
|
281
|
+
career. Or even worried about the next step when learning a new framework
|
282
|
+
or
|
283
|
+
|
284
|
+
language. Today let me try to assuage some of that fear by describing my approach.</p>
|
285
|
+
|
286
|
+
</div>
|
287
|
+
|
288
|
+
<footer>
|
289
|
+
|
290
|
+
<a rel="full-article" href="/blog/program-like-a-videogamer/">Read on →</a>
|
291
|
+
|
292
|
+
</footer>
|
293
|
+
|
294
|
+
</article>
|
295
|
+
|
296
|
+
<article>
|
297
|
+
|
298
|
+
<header>
|
299
|
+
|
300
|
+
<h1 class="entry-title"><a href="/blog/gem-spotlight-interactive-editor/">Gem
|
301
|
+
Spotlight: Interactive_editor</a></h1>
|
302
|
+
|
303
|
+
<p class="meta">
|
304
|
+
|
305
|
+
<time datetime="2013-01-04T12:13:00-05:00" pubdate data-updated="true">Jan
|
306
|
+
4<span>th</span>, 2013</time>
|
307
|
+
|
308
|
+
</p>
|
309
|
+
|
310
|
+
</header>
|
311
|
+
|
312
|
+
<div class="entry-content"><p>Today we’ll take a quick look at one of
|
313
|
+
my favorite gems: interactive_editor.
|
314
|
+
|
315
|
+
Have you ever been in a REPL session (rails console, irb, pry, etc.) and wished
|
316
|
+
|
317
|
+
that you could pop open a full editor to write out some code? (Ok, maybe not
|
318
|
+
|
319
|
+
you pry users.) Well interactive_editor is a gem that gives you just that,
|
320
|
+
as
|
321
|
+
|
322
|
+
well as some really nice object inspection and manipulation.</p>
|
323
|
+
|
324
|
+
</div>
|
325
|
+
|
326
|
+
<footer>
|
327
|
+
|
328
|
+
<a rel="full-article" href="/blog/gem-spotlight-interactive-editor/">Read
|
329
|
+
on →</a>
|
330
|
+
|
331
|
+
</footer>
|
332
|
+
|
333
|
+
</article>
|
334
|
+
|
335
|
+
<article>
|
336
|
+
|
337
|
+
<header>
|
338
|
+
|
339
|
+
<h1 class="entry-title"><a href="/blog/subscribing-to-rubytapas-using-downcast/">Subscribing
|
340
|
+
to RubyTapas Using Downcast</a></h1>
|
341
|
+
|
342
|
+
<p class="meta">
|
343
|
+
|
344
|
+
<time datetime="2012-10-19T23:17:00-04:00" pubdate data-updated="true">Oct
|
345
|
+
19<span>th</span>, 2012</time>
|
346
|
+
|
347
|
+
</p>
|
348
|
+
|
349
|
+
</header>
|
350
|
+
|
351
|
+
<div class="entry-content"><p>Avdi’s <a href="http://devblog.avdi.org/rubytapas/">Ruby
|
352
|
+
Tapas</a> are a fantastic
|
353
|
+
|
354
|
+
resource for learning pieces of Ruby. Now that he and DPD have enabled
|
355
|
+
|
356
|
+
iTunes-compatible RSS feeds of the videos it’s easier than ever to stay
|
357
|
+
current
|
358
|
+
|
359
|
+
with the videos.</p>
|
360
|
+
|
361
|
+
<p>Today I’m just going to share the steps required to add Ruby Tapas
|
362
|
+
to Downcast
|
363
|
+
|
364
|
+
on your iPhone or iPad. It’s very easy, but it’s handy to have
|
365
|
+
all the steps
|
366
|
+
|
367
|
+
in one place.</p>
|
368
|
+
|
369
|
+
</div>
|
370
|
+
|
371
|
+
<footer>
|
372
|
+
|
373
|
+
<a rel="full-article" href="/blog/subscribing-to-rubytapas-using-downcast/">Read
|
374
|
+
on →</a>
|
375
|
+
|
376
|
+
</footer>
|
377
|
+
|
378
|
+
</article>
|
379
|
+
|
380
|
+
<article>
|
381
|
+
|
382
|
+
<header>
|
383
|
+
|
384
|
+
<h1 class="entry-title"><a href="/blog/things-most-interviewees-fail-to-discover/">Things
|
385
|
+
Most Interviewees Fail to Discover</a></h1>
|
386
|
+
|
387
|
+
<p class="meta">
|
388
|
+
|
389
|
+
<time datetime="2012-08-17T08:53:00-04:00" pubdate data-updated="true">Aug
|
390
|
+
17<span>th</span>, 2012</time>
|
391
|
+
|
392
|
+
</p>
|
393
|
+
|
394
|
+
</header>
|
395
|
+
|
396
|
+
<div class="entry-content"><p>It’s a great time to be a Rails developer.
|
397
|
+
Companies left and right are turning to Rails or using it already for efficient
|
398
|
+
web development. If you know Rails and the web stack well then you have the
|
399
|
+
luxury of choice: let’s make sure you make a good pick!</p>
|
400
|
+
|
401
|
+
</div>
|
402
|
+
|
403
|
+
<footer>
|
404
|
+
|
405
|
+
<a rel="full-article" href="/blog/things-most-interviewees-fail-to-discover/">Read
|
406
|
+
on →</a>
|
407
|
+
|
408
|
+
</footer>
|
409
|
+
|
410
|
+
</article>
|
411
|
+
|
412
|
+
<article>
|
413
|
+
|
414
|
+
<header>
|
415
|
+
|
416
|
+
<h1 class="entry-title"><a href="/blog/10-things-i-love-about-git/">10 Things
|
417
|
+
I Love About Git</a></h1>
|
418
|
+
|
419
|
+
<p class="meta">
|
420
|
+
|
421
|
+
<time datetime="2012-08-07T09:29:00-04:00" pubdate data-updated="true">Aug
|
422
|
+
7<span>th</span>, 2012</time>
|
423
|
+
|
424
|
+
</p>
|
425
|
+
|
426
|
+
</header>
|
427
|
+
|
428
|
+
<div class="entry-content"><p>Not everyone loves git. It’s true! But
|
429
|
+
I do, and here are some reasons why.</p>
|
430
|
+
|
431
|
+
</div>
|
432
|
+
|
433
|
+
<footer>
|
434
|
+
|
435
|
+
<a rel="full-article" href="/blog/10-things-i-love-about-git/">Read on →</a>
|
436
|
+
|
437
|
+
</footer>
|
438
|
+
|
439
|
+
</article>
|
440
|
+
|
441
|
+
<article>
|
442
|
+
|
443
|
+
<header>
|
444
|
+
|
445
|
+
<h1 class="entry-title"><a href="/blog/effective-window-management-by-dividing-your-monitor-into-zones/">Effective
|
446
|
+
Window Management by Dividing Your Monitor Into Zones</a></h1>
|
447
|
+
|
448
|
+
<p class="meta">
|
449
|
+
|
450
|
+
<time datetime="2012-06-22T09:21:00-04:00" pubdate data-updated="true">Jun
|
451
|
+
22<span>nd</span>, 2012</time>
|
452
|
+
|
453
|
+
</p>
|
454
|
+
|
455
|
+
</header>
|
456
|
+
|
457
|
+
<div class="entry-content"><p>I love my 27 inch Apple Thunderbolt display,
|
458
|
+
but after some amount of neck strain I had to conclude that it’s just
|
459
|
+
too big to use it like a laptop monitor and fullscreen everything.</p>
|
460
|
+
|
461
|
+
<p>Instead, I’ve come up with a great window management solution that
|
462
|
+
capitalizes on the monitor’s strengths and gives me an awesome work
|
463
|
+
environment.</p>
|
464
|
+
|
465
|
+
</div>
|
466
|
+
|
467
|
+
<footer>
|
468
|
+
|
469
|
+
<a rel="full-article" href="/blog/effective-window-management-by-dividing-your-monitor-into-zones/">Read
|
470
|
+
on →</a>
|
471
|
+
|
472
|
+
</footer>
|
473
|
+
|
474
|
+
</article>
|
475
|
+
|
476
|
+
<article>
|
477
|
+
|
478
|
+
<header>
|
479
|
+
|
480
|
+
<h1 class="entry-title"><a href="/blog/getting-up-to-speed-on-a-new-git-repo/">Getting
|
481
|
+
Up to Speed on a New Git Repo</a></h1>
|
482
|
+
|
483
|
+
<p class="meta">
|
484
|
+
|
485
|
+
<time datetime="2012-05-11T12:44:00-04:00" pubdate data-updated="true">May
|
486
|
+
11<span>th</span>, 2012</time>
|
487
|
+
|
488
|
+
</p>
|
489
|
+
|
490
|
+
</header>
|
491
|
+
|
492
|
+
<div class="entry-content"><p>Alright! You want to get up to speed with a
|
493
|
+
new git repository? You got it. Here are some quick reference notes and tools
|
494
|
+
to use to see what’s been going on.</p>
|
495
|
+
|
496
|
+
</div>
|
497
|
+
|
498
|
+
<footer>
|
499
|
+
|
500
|
+
<a rel="full-article" href="/blog/getting-up-to-speed-on-a-new-git-repo/">Read
|
501
|
+
on →</a>
|
502
|
+
|
503
|
+
</footer>
|
504
|
+
|
505
|
+
</article>
|
506
|
+
|
507
|
+
<div class="pagination">
|
508
|
+
|
509
|
+
<a class="prev" href="/blog/page/2/">← Older</a>
|
510
|
+
|
511
|
+
<a href="/blog/archives">Blog Archives</a>
|
512
|
+
|
513
|
+
</div>
|
514
|
+
|
515
|
+
</div>
|
516
|
+
|
517
|
+
<aside class="sidebar">
|
518
|
+
|
519
|
+
<section>
|
520
|
+
|
521
|
+
<h1>Recent Posts</h1>
|
522
|
+
|
523
|
+
<ul id="recent_posts">
|
524
|
+
|
525
|
+
<li class="post">
|
526
|
+
|
527
|
+
<a href="/blog/lets-use-hwacha-to-scan-urls/">Let’s Use Hwacha to Scan
|
528
|
+
URLs</a>
|
529
|
+
|
530
|
+
</li>
|
531
|
+
|
532
|
+
<li class="post">
|
533
|
+
|
534
|
+
<a href="/blog/deliberate-git/">Deliberate Git</a>
|
535
|
+
|
536
|
+
</li>
|
537
|
+
|
538
|
+
<li class="post">
|
539
|
+
|
540
|
+
<a href="/blog/customize-your-irb/">Customize your IRB</a>
|
541
|
+
|
542
|
+
</li>
|
543
|
+
|
544
|
+
<li class="post">
|
545
|
+
|
546
|
+
<a href="/blog/program-like-a-videogamer/">Program like a Videogamer</a>
|
547
|
+
|
548
|
+
</li>
|
549
|
+
|
550
|
+
<li class="post">
|
551
|
+
|
552
|
+
<a href="/blog/gem-spotlight-interactive-editor/">Gem spotlight: interactive_editor</a>
|
553
|
+
|
554
|
+
</li>
|
555
|
+
|
556
|
+
</ul>
|
557
|
+
|
558
|
+
</section>
|
559
|
+
|
560
|
+
<section>
|
561
|
+
|
562
|
+
<h1>About Me</h1>
|
563
|
+
|
564
|
+
<img class="right" src="http://gravatar.com/avatar/aaa2b1f12b65d33422e8cdc48d70c0f9">
|
565
|
+
|
566
|
+
<p>My name is Stephen Ball. I started programming computers back in the 80s
|
567
|
+
|
568
|
+
by copying BASIC programs from 3-2-1 Contact into our Atari 800. Now I
|
569
|
+
|
570
|
+
program web applications using Ruby on Rails and CoffeeScript. I love every
|
571
|
+
|
572
|
+
minute of it.</p>
|
573
|
+
|
574
|
+
<p><a href="https://twitter.com/StephenBallNC" class="twitter-follow-button"
|
575
|
+
data-show-count="false" data-size="large">Follow @StephenBallNC</a>
|
576
|
+
|
577
|
+
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></p>
|
578
|
+
|
579
|
+
</section>
|
580
|
+
|
581
|
+
<section>
|
582
|
+
|
583
|
+
<h1>Tweets for Rake Routes</h1>
|
584
|
+
|
585
|
+
<a class="twitter-timeline" href="https://twitter.com/search?q=rakeroutes"
|
586
|
+
data-widget-id="395243196042579970">Tweets about “rakeroutes”</a>
|
587
|
+
|
588
|
+
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?''http'':''https'';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
589
|
+
|
590
|
+
</section>
|
591
|
+
|
592
|
+
<section>
|
593
|
+
|
594
|
+
<h1>My Pinboard</h1>
|
595
|
+
|
596
|
+
<ul id="pinboard_linkroll">Fetching linkroll…</ul>
|
597
|
+
|
598
|
+
<p><a href="http://pinboard.in/u:xyzzyb">My Pinboard Bookmarks »</a></p>
|
599
|
+
|
600
|
+
</section>
|
601
|
+
|
602
|
+
<script type="text/javascript">var linkroll=''pinboard_linkroll'';var pinboard_user="xyzzyb";var
|
603
|
+
pinboard_count=3;(function(){var pinboardInit=document.createElement(''script'');pinboardInit.type=''text/javascript'';pinboardInit.async=true;pinboardInit.src=''/javascripts/pinboard.js'';document.getElementsByTagName(''head'')[0].appendChild(pinboardInit);})();</script>
|
604
|
+
|
605
|
+
</aside>
|
606
|
+
|
607
|
+
</div>
|
608
|
+
|
609
|
+
</div>
|
610
|
+
|
611
|
+
<footer role="contentinfo"><p>
|
612
|
+
|
613
|
+
Copyright © 2013 - Stephen Ball -
|
614
|
+
|
615
|
+
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
|
616
|
+
|
617
|
+
</p>
|
618
|
+
|
619
|
+
</footer>
|
620
|
+
|
621
|
+
<script type="text/javascript">var disqus_shortname=''xyzzyb'';var disqus_script=''count.js'';(function(){var
|
622
|
+
dsq=document.createElement(''script'');dsq.type=''text/javascript'';dsq.async=true;dsq.src=''http://''+disqus_shortname+''.disqus.com/''+disqus_script;(document.getElementsByTagName(''head'')[0]||document.getElementsByTagName(''body'')[0]).appendChild(dsq);}());</script>
|
623
|
+
|
624
|
+
<div id="fb-root"></div>
|
625
|
+
|
626
|
+
<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id)){return;}
|
627
|
+
|
628
|
+
js=d.createElement(s);js.id=id;js.src="//connect.facebook.net/en_US/all.js#appId=212934732101925&xfbml=1";fjs.parentNode.insertBefore(js,fjs);}(document,''script'',''facebook-jssdk''));</script>
|
629
|
+
|
630
|
+
<script type="text/javascript">(function(){var script=document.createElement(''script'');script.type=''text/javascript'';script.async=true;script.src=''https://apis.google.com/js/plusone.js'';var
|
631
|
+
s=document.getElementsByTagName(''script'')[0];s.parentNode.insertBefore(script,s);})();</script>
|
632
|
+
|
633
|
+
<script type="text/javascript">(function(){var twitterWidgets=document.createElement(''script'');twitterWidgets.type=''text/javascript'';twitterWidgets.async=true;twitterWidgets.src=''http://platform.twitter.com/widgets.js'';document.getElementsByTagName(''head'')[0].appendChild(twitterWidgets);})();</script>
|
634
|
+
|
635
|
+
<a title="Real Time Analytics" href="http://getclicky.com/66509312"><img alt="Real
|
636
|
+
Time Analytics" src="//static.getclicky.com/media/links/badge.gif" border="0"/></a>
|
637
|
+
|
638
|
+
<script type="text/javascript">var clicky_site_ids=clicky_site_ids||[];clicky_site_ids.push(66536397);(function(){var
|
639
|
+
s=document.createElement(''script'');s.type=''text/javascript'';s.async=true;s.src=''//static.getclicky.com/js'';(document.getElementsByTagName(''head'')[0]||document.getElementsByTagName(''body'')[0]).appendChild(s);})();</script>
|
640
|
+
|
641
|
+
</body>
|
642
|
+
|
643
|
+
</html>
|
644
|
+
|
645
|
+
'
|
646
|
+
http_version: '1.1'
|
647
|
+
adapter_metadata:
|
648
|
+
effective_url: !binary |-
|
649
|
+
aHR0cDovL3Jha2Vyb3V0ZXMuY29tLw==
|
650
|
+
recorded_at: Tue, 14 Jan 2014 03:03:38 GMT
|
651
|
+
recorded_with: VCR 2.8.0
|
@@ -10,6 +10,8 @@ end
|
|
10
10
|
|
11
11
|
success_url_vcr_options = { :cassette_name => 'success_url' }
|
12
12
|
not_found_url_vcr_options = { :cassette_name => '404_url' }
|
13
|
+
follow_redirects_false_vcr = { :cassette_name => 'follow_redirects_false' }
|
14
|
+
follow_redirects_true_vcr = { :cassette_name => 'follow_redirects_true' }
|
13
15
|
|
14
16
|
describe Hwacha do
|
15
17
|
describe "checking a site that returns HTTP 200", :vcr => success_url_vcr_options do
|
@@ -33,4 +35,38 @@ describe Hwacha do
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
38
|
+
|
39
|
+
describe "checking a site that redirects" do
|
40
|
+
let(:url) { 'http://www.rakeroutes.com/' }
|
41
|
+
|
42
|
+
context "when follow_redirects is not set to true", :vcr => follow_redirects_false_vcr do
|
43
|
+
subject do
|
44
|
+
Hwacha.new do |config|
|
45
|
+
config.follow_redirects = false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "stops at the redirect" do
|
50
|
+
subject.check(url) do |url, response|
|
51
|
+
expect(url.downcase).to eq url
|
52
|
+
expect(response.code).to eq 301
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when follow_redirects is set to true", :vcr => follow_redirects_true_vcr do
|
58
|
+
subject do
|
59
|
+
Hwacha.new do |config|
|
60
|
+
config.follow_redirects = true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "follows the redirect" do
|
65
|
+
subject.check(url) do |url, response|
|
66
|
+
expect(url.downcase).to eq 'http://rakeroutes.com/'
|
67
|
+
expect(response.code).to eq 200
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
36
72
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require_relative '../../../lib/hwacha'
|
2
2
|
|
3
3
|
describe Hwacha::Config do
|
4
|
-
describe "#
|
4
|
+
describe "#hydra_options" do
|
5
5
|
context "when no options are set" do
|
6
6
|
it "is an empty hash" do
|
7
|
-
expect(subject.
|
7
|
+
expect(subject.hydra_options).to be == {}
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -19,7 +19,24 @@ describe Hwacha::Config do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "exports as max_concurrency in a hash" do
|
22
|
-
expect(subject.
|
22
|
+
expect(subject.hydra_options).to include concurrency_option
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#request_options" do
|
28
|
+
context "when follow_redirects option is set" do
|
29
|
+
let(:follow_redirects) { true }
|
30
|
+
let(:follow_redirects_option) do
|
31
|
+
{ :followlocation => follow_redirects }
|
32
|
+
end
|
33
|
+
|
34
|
+
before do
|
35
|
+
subject.follow_redirects = follow_redirects
|
36
|
+
end
|
37
|
+
|
38
|
+
it "exports as followlocation in a hash" do
|
39
|
+
expect(subject.request_options).to include follow_redirects_option
|
23
40
|
end
|
24
41
|
end
|
25
42
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hwacha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Ball
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: vcr
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: Harness the power of Typhoeus to quickly check webpage responses.
|
@@ -87,8 +87,8 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .gitignore
|
91
|
-
- .travis.yml
|
90
|
+
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
92
92
|
- Gemfile
|
93
93
|
- Gemfile.lock
|
94
94
|
- LICENSE
|
@@ -99,6 +99,8 @@ files:
|
|
99
99
|
- lib/hwacha/config.rb
|
100
100
|
- lib/hwacha/version.rb
|
101
101
|
- spec/fixtures/cassettes/404_url.yml
|
102
|
+
- spec/fixtures/cassettes/follow_redirects_false.yml
|
103
|
+
- spec/fixtures/cassettes/follow_redirects_true.yml
|
102
104
|
- spec/fixtures/cassettes/success_url.yml
|
103
105
|
- spec/integration/hwacha_spec.rb
|
104
106
|
- spec/lib/hwacha/config_spec.rb
|
@@ -113,22 +115,24 @@ require_paths:
|
|
113
115
|
- lib
|
114
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
117
|
requirements:
|
116
|
-
- -
|
118
|
+
- - ">="
|
117
119
|
- !ruby/object:Gem::Version
|
118
120
|
version: '0'
|
119
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
122
|
requirements:
|
121
|
-
- -
|
123
|
+
- - ">="
|
122
124
|
- !ruby/object:Gem::Version
|
123
125
|
version: '0'
|
124
126
|
requirements: []
|
125
127
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.0
|
128
|
+
rubygems_version: 2.2.0
|
127
129
|
signing_key:
|
128
130
|
specification_version: 4
|
129
131
|
summary: Sometimes you just want to check a bunch of webpages. Hwacha makes it easy.
|
130
132
|
test_files:
|
131
133
|
- spec/fixtures/cassettes/404_url.yml
|
134
|
+
- spec/fixtures/cassettes/follow_redirects_false.yml
|
135
|
+
- spec/fixtures/cassettes/follow_redirects_true.yml
|
132
136
|
- spec/fixtures/cassettes/success_url.yml
|
133
137
|
- spec/integration/hwacha_spec.rb
|
134
138
|
- spec/lib/hwacha/config_spec.rb
|