site_validator 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'open-uri'
4
+ require 'open_uri_redirections'
4
5
  require 'nokogiri'
5
6
  require 'metainspector'
6
7
  require 'timeout'
@@ -86,7 +87,7 @@ module SiteValidator
86
87
  end
87
88
 
88
89
  def doc
89
- @doc ||= open(url)
90
+ @doc ||= open(url, :allow_safe_redirections => true)
90
91
  end
91
92
  end
92
93
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module SiteValidator
4
- VERSION = "1.0.4"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -17,7 +17,8 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency 'w3c_validators', '~> 1.2'
19
19
  gem.add_dependency 'nokogiri', '~> 1.5.3'
20
- gem.add_dependency 'metainspector', '~> 1.10.2'
20
+ gem.add_dependency 'open_uri_redirections', '0.0.1'
21
+ gem.add_dependency 'metainspector', '~> 1.13.0'
21
22
 
22
23
  gem.add_development_dependency 'rspec', '~> 2.5.0'
23
24
  gem.add_development_dependency 'mocha', '~> 0.11.4'
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 301 Moved Permanently
2
+ Server: nginx
3
+ Date: Mon, 03 Dec 2012 11:36:17 GMT
4
+ Content-Type: text/html
5
+ Content-Length: 178
6
+ Connection: close
7
+ Location: https://github.com/
8
+
9
+ <html>
10
+ <head><title>301 Moved Permanently</title></head>
11
+ <body bgcolor="white">
12
+ <center><h1>301 Moved Permanently</h1></center>
13
+ <hr><center>nginx</center>
14
+ </body>
15
+ </html>
@@ -0,0 +1,634 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx
3
+ Date: Mon, 03 Dec 2012 11:37:51 GMT
4
+ Content-Type: text/html; charset=utf-8
5
+ Connection: keep-alive
6
+ Status: 200 OK
7
+ X-Runtime: 10
8
+ ETag: "a9e1dd587bb233eb670ec06f7d553dbc"
9
+ X-Frame-Options: deny
10
+ Set-Cookie: _gh_sess=BAh7BzoPc2Vzc2lvbl9pZCIlZTc4ZDNlOGEwM2NlZDQ3Y2VhMDdlMTQyOTA4NWVmYzA6EF9jc3JmX3Rva2VuIjE0U2xsYUoybFFNSWxhWEtudHNvalJCVjZtVnJZcFVlRVk4WlpMbEZKWktRPQ%3D%3D--8ea4a235fd3c5e727d462e24b992fabd8f50050d; path=/; expires=Sat, 01-Jan-2022 00:00:00 GMT; secure; HttpOnly
11
+ Content-Length: 21814
12
+ Cache-Control: private, max-age=0, must-revalidate
13
+ Strict-Transport-Security: max-age=2592000
14
+
15
+ <!DOCTYPE html>
16
+ <html>
17
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#">
18
+ <meta charset='utf-8'>
19
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
20
+ <title>GitHub · Social Coding</title>
21
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
22
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
23
+ <link rel="apple-touch-icon-precomposed" sizes="57x57" href="apple-touch-icon-114.png" />
24
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="apple-touch-icon-114.png" />
25
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="apple-touch-icon-144.png" />
26
+ <link rel="apple-touch-icon-precomposed" sizes="144x144" href="apple-touch-icon-144.png" />
27
+ <meta name="msapplication-TileImage" content="/windows-tile.png">
28
+ <meta name="msapplication-TileColor" content="#ffffff">
29
+
30
+
31
+
32
+ <link rel="icon" type="image/x-icon" href="/favicon.ico" />
33
+
34
+ <meta content="authenticity_token" name="csrf-param" />
35
+ <meta content="4SllaJ2lQMIlaXKntsojRBV6mVrYpUeEY8ZZLlFJZKQ=" name="csrf-token" />
36
+
37
+ <link href="https://a248.e.akamai.net/assets.github.com/assets/github-bd7a9aac1964f57509ff6d9dbddc6e086343bca4.css" media="screen" rel="stylesheet" type="text/css" />
38
+ <link href="https://a248.e.akamai.net/assets.github.com/assets/github2-8fa43eb7ec103bd3bf79be09cf64db52d75c244f.css" media="screen" rel="stylesheet" type="text/css" />
39
+
40
+
41
+
42
+ <script src="https://a248.e.akamai.net/assets.github.com/assets/frameworks-57542e0cba19d068168099f287c117efa142863c.js" type="text/javascript"></script>
43
+ <script src="https://a248.e.akamai.net/assets.github.com/assets/github-650ee832daf5d46d78829c3f98d1e97bab858056.js" type="text/javascript"></script>
44
+
45
+
46
+
47
+ </head>
48
+
49
+
50
+ <body class="logged_out wider env-production ">
51
+ <div id="wrapper">
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+ <div class="header header-logged-out">
61
+ <div class="container clearfix">
62
+
63
+ <a class="header-logo-wordmark" href="https://github.com/">
64
+ <img alt="GitHub" class="github-logo-4x" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x.png?1338945075" />
65
+ <img alt="GitHub" class="github-logo-4x-hover" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x-hover.png?1338945075" />
66
+ </a>
67
+
68
+
69
+ <ul class="top-nav">
70
+ <li class="explore"><a href="https://github.com/explore">Explore GitHub</a></li>
71
+ <li class="search"><a href="https://github.com/search">Search</a></li>
72
+ <li class="features"><a href="https://github.com/features">Features</a></li>
73
+ <li class="blog"><a href="https://github.com/blog">Blog</a></li>
74
+ </ul>
75
+
76
+
77
+ <div class="header-actions">
78
+ <a class="button primary classy" href="https://github.com/signup">Sign up for free</a>
79
+ <a class="button classy" href="https://github.com/login">Sign in</a>
80
+ </div>
81
+
82
+ </div>
83
+ </div>
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+ <div class="site home">
92
+ <div class="pagehead homehead">
93
+ <div class="container">
94
+ <div class="hero">
95
+ <h1>
96
+ <strong>2,689,314</strong>
97
+ people hosting over
98
+ <strong>4,511,128</strong>
99
+ repositories
100
+ </h1>
101
+ <div class="textographic">
102
+ <form accept-charset="UTF-8" action="/search" id="top_search_form" method="get">
103
+ <p>
104
+ <a class="repo" href="/jquery/jquery">jQuery</a>,
105
+ <a class="repo" href="/reddit/reddit">reddit</a>,
106
+ <a class="repo" href="/andymatuschak/Sparkle">Sparkle</a>,
107
+ <a class="repo" href="/bagder/curl">curl</a>,
108
+ <a class="repo" href="/rails/rails">Ruby on Rails</a>,
109
+ <a class="repo" href="/ry/node">node.js</a>,
110
+ <a class="repo" href="/rentzsch/clicktoflash">ClickToFlash</a>,
111
+ <a class="repo" href="/erlang/otp">Erlang/OTP</a>,
112
+ <a class="repo" href="/cakephp/cakephp">CakePHP</a>,
113
+ <a class="repo" href="/antirez/redis">Redis</a>,
114
+ and <strong><a href="/repositories">many more</a></strong>
115
+
116
+ <input type="text" class="search" name="q" placeholder="Find any repository" autocapitalize="off" />
117
+ <input type="hidden" name="type" value="Everything" />
118
+ <input type="hidden" name="repo" value="" />
119
+ <input type="hidden" name="l" value="" />
120
+ <input type="hidden" name="p" value="1" />
121
+ </p>
122
+ </form> </div>
123
+ </div>
124
+ </div>
125
+ </div>
126
+
127
+ <div class="container">
128
+ <div class="logos">
129
+
130
+ <a href="/facebook"><img alt="facebook" height="35" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/facebook.png?1349517651" width="95" /></a>
131
+ <a href="/twitter"><img alt="Twitter" height="50" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/twitter.png?1340303965" /></a>
132
+ <a href="/WindowsAzure"><img alt="Microsoft" height="35" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/microsoft.png?1349517651" width="156" /></a>
133
+ <a href="/vmware"><img alt="VMWare" height="26" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/vmware.png?1349517651" width="118" /></a>
134
+ <a href="/jbossas"><img alt="Redhat" height="35" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/redhat.png?1349517651" width="114" /></a>
135
+ <a href="/linkedin"><img alt="LinkedIN" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/linkedin.png?1349517651" width="112" /></a>
136
+ <a href="/mozilla"><img alt="Mozilla" height="26" src="https://a248.e.akamai.net/assets.github.com/images/modules/home/logos/mozilla.png?1349517651" width="96" /></a>
137
+ </div>
138
+
139
+ <div class="definitions">
140
+ <div class="inner columns equacols">
141
+ <div class="column main">
142
+ <h2>git <em>/'ɡɪt/</em></h2>
143
+ <p>Git is an extremely fast, efficient, distributed version control system ideal for the collaborative development of software.</p>
144
+ </div><!-- /.column.left -->
145
+
146
+ <div class="column secondary">
147
+ <h2>git·hub <em>/'ɡɪtˌhʌb/</em></h2>
148
+ <p>GitHub is the best way to collaborate with others. Fork, send pull requests and manage all your <strong>public</strong> and <strong>private</strong> git repositories.</p>
149
+ </div><!-- /.column.right -->
150
+ </div><!-- /.columns.inner -->
151
+ </div><!-- /.definitions -->
152
+
153
+ <div class="signup-entice">
154
+ <a href="/plans" class="signup-button"><strong>Plans, Pricing and Signup</strong> Unlimited public repositories are <em>free!</em></a>
155
+ <p>Free public repositories, collaborator management, issue tracking, wikis, downloads, code review, graphs and much more…</p>
156
+ </div>
157
+
158
+ <div class="rule"></div>
159
+
160
+ <div class="columns fourcols feature-overview">
161
+ <div class="column leftmost">
162
+ <h3>Team management</h3>
163
+ <p><strong>30 seconds</strong> to give people access to code. No SSH key required. Activity feeds keep you updated on progress.</p>
164
+ <p><strong><a href="/features/projects/collaboration">More about collaboration</a></strong></p>
165
+ </div><!-- /.leftmost -->
166
+ <div class="column leftmid">
167
+ <h3>Code review</h3>
168
+ <p>Comment on changes, track issues, compare branches, send pull requests and merge forks.</p>
169
+ <p><strong><a href="/features/projects/codereview">More about code review</a></strong></p>
170
+ </div><!-- /.leftmid -->
171
+ <div class="column rightmid">
172
+ <h3>Reliable code hosting</h3>
173
+ <p>We spend all day and night making sure your repositories are <strong>secure</strong>, <strong>backed up</strong> and <strong>always available</strong>.</p>
174
+ <p><strong><a href="/features/hosting">More about code hosting</a></strong></p>
175
+ </div><!-- /.rightmid -->
176
+ <div class="column rightmost">
177
+ <h3>Open source collaboration</h3>
178
+ <p>Participate in the most important open source community in the world today—online or at one of our meetups.</p>
179
+ <p><strong><a href="/features/community">More about our community</a></strong></p>
180
+ </div><!-- /.rightmost -->
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+ <div id="footer-push"></div><!-- hack for sticky footer -->
186
+ </div><!-- end of wrapper - hack for sticky footer -->
187
+
188
+ <!-- footer -->
189
+ <div id="footer">
190
+ <div class="container clearfix">
191
+
192
+ <dl class="footer_nav">
193
+ <dt>GitHub</dt>
194
+ <dd><a href="https://github.com/about">About us</a></dd>
195
+ <dd><a href="https://github.com/blog">Blog</a></dd>
196
+ <dd><a href="https://github.com/contact">Contact &amp; support</a></dd>
197
+ <dd><a href="http://enterprise.github.com/">GitHub Enterprise</a></dd>
198
+ <dd><a href="http://status.github.com/">Site status</a></dd>
199
+ </dl>
200
+
201
+ <dl class="footer_nav">
202
+ <dt>Applications</dt>
203
+ <dd><a href="http://mac.github.com/">GitHub for Mac</a></dd>
204
+ <dd><a href="http://windows.github.com/">GitHub for Windows</a></dd>
205
+ <dd><a href="http://eclipse.github.com/">GitHub for Eclipse</a></dd>
206
+ <dd><a href="http://mobile.github.com/">GitHub mobile apps</a></dd>
207
+ </dl>
208
+
209
+ <dl class="footer_nav">
210
+ <dt>Services</dt>
211
+ <dd><a href="http://get.gaug.es/">Gauges: Web analytics</a></dd>
212
+ <dd><a href="http://speakerdeck.com">Speaker Deck: Presentations</a></dd>
213
+ <dd><a href="https://gist.github.com">Gist: Code snippets</a></dd>
214
+ <dd><a href="http://jobs.github.com/">Job board</a></dd>
215
+ </dl>
216
+
217
+ <dl class="footer_nav">
218
+ <dt>Documentation</dt>
219
+ <dd><a href="http://help.github.com/">GitHub Help</a></dd>
220
+ <dd><a href="http://developer.github.com/">Developer API</a></dd>
221
+ <dd><a href="http://github.github.com/github-flavored-markdown/">GitHub Flavored Markdown</a></dd>
222
+ <dd><a href="http://pages.github.com/">GitHub Pages</a></dd>
223
+ </dl>
224
+
225
+ <dl class="footer_nav">
226
+ <dt>More</dt>
227
+ <dd><a href="http://training.github.com/">Training</a></dd>
228
+ <dd><a href="https://github.com/edu">Students &amp; teachers</a></dd>
229
+ <dd><a href="http://shop.github.com">The Shop</a></dd>
230
+ <dd><a href="http://octodex.github.com/">The Octodex</a></dd>
231
+ </dl>
232
+
233
+ <hr class="footer-divider">
234
+
235
+
236
+ <p class="right">&copy; 2012 <span title="0.01397s from fe2.rs.github.com">GitHub</span> Inc. All rights reserved.</p>
237
+ <a class="left" href="https://github.com/">
238
+ <span class="mega-icon mega-icon-invertocat"></span>
239
+ </a>
240
+ <ul id="legal">
241
+ <li><a href="https://github.com/site/terms">Terms of Service</a></li>
242
+ <li><a href="https://github.com/site/privacy">Privacy</a></li>
243
+ <li><a href="https://github.com/security">Security</a></li>
244
+ </ul>
245
+
246
+ </div><!-- /.container -->
247
+
248
+ </div><!-- /.#footer -->
249
+
250
+
251
+
252
+
253
+ <div id="keyboard_shortcuts_pane" class="instapaper_ignore readability-extra" style="display:none">
254
+ <h2>Keyboard Shortcuts <small><a href="#" class="js-see-all-keyboard-shortcuts">(see all)</a></small></h2>
255
+
256
+ <div class="columns threecols">
257
+ <div class="column first">
258
+ <h3>Site wide shortcuts</h3>
259
+ <dl class="keyboard-mappings">
260
+ <dt>s</dt>
261
+ <dd>Focus command bar</dd>
262
+ </dl>
263
+ <dl class="keyboard-mappings">
264
+ <dt>?</dt>
265
+ <dd>Bring up this help dialog</dd>
266
+ </dl>
267
+ </div><!-- /.column.first -->
268
+
269
+ <div class="column middle" style='display:none'>
270
+ <h3>Commit list</h3>
271
+ <dl class="keyboard-mappings">
272
+ <dt>j</dt>
273
+ <dd>Move selection down</dd>
274
+ </dl>
275
+ <dl class="keyboard-mappings">
276
+ <dt>k</dt>
277
+ <dd>Move selection up</dd>
278
+ </dl>
279
+ <dl class="keyboard-mappings">
280
+ <dt>c <em>or</em> o <em>or</em> enter</dt>
281
+ <dd>Open commit</dd>
282
+ </dl>
283
+ <dl class="keyboard-mappings">
284
+ <dt>y</dt>
285
+ <dd>Expand URL to its canonical form</dd>
286
+ </dl>
287
+ </div><!-- /.column.first -->
288
+
289
+ <div class="column last js-hidden-pane" style='display:none'>
290
+ <h3>Pull request list</h3>
291
+ <dl class="keyboard-mappings">
292
+ <dt>j</dt>
293
+ <dd>Move selection down</dd>
294
+ </dl>
295
+ <dl class="keyboard-mappings">
296
+ <dt>k</dt>
297
+ <dd>Move selection up</dd>
298
+ </dl>
299
+ <dl class="keyboard-mappings">
300
+ <dt>o <em>or</em> enter</dt>
301
+ <dd>Open issue</dd>
302
+ </dl>
303
+ <dl class="keyboard-mappings">
304
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
305
+ <dd>Submit comment</dd>
306
+ </dl>
307
+ <dl class="keyboard-mappings">
308
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> shift p</dt>
309
+ <dd>Preview comment</dd>
310
+ </dl>
311
+ </div><!-- /.columns.last -->
312
+
313
+ </div><!-- /.columns.equacols -->
314
+
315
+ <div class="js-hidden-pane" style='display:none'>
316
+ <div class="rule"></div>
317
+
318
+ <h3>Issues</h3>
319
+
320
+ <div class="columns threecols">
321
+ <div class="column first">
322
+ <dl class="keyboard-mappings">
323
+ <dt>j</dt>
324
+ <dd>Move selection down</dd>
325
+ </dl>
326
+ <dl class="keyboard-mappings">
327
+ <dt>k</dt>
328
+ <dd>Move selection up</dd>
329
+ </dl>
330
+ <dl class="keyboard-mappings">
331
+ <dt>x</dt>
332
+ <dd>Toggle selection</dd>
333
+ </dl>
334
+ <dl class="keyboard-mappings">
335
+ <dt>o <em>or</em> enter</dt>
336
+ <dd>Open issue</dd>
337
+ </dl>
338
+ <dl class="keyboard-mappings">
339
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
340
+ <dd>Submit comment</dd>
341
+ </dl>
342
+ <dl class="keyboard-mappings">
343
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> shift p</dt>
344
+ <dd>Preview comment</dd>
345
+ </dl>
346
+ </div><!-- /.column.first -->
347
+ <div class="column last">
348
+ <dl class="keyboard-mappings">
349
+ <dt>c</dt>
350
+ <dd>Create issue</dd>
351
+ </dl>
352
+ <dl class="keyboard-mappings">
353
+ <dt>l</dt>
354
+ <dd>Create label</dd>
355
+ </dl>
356
+ <dl class="keyboard-mappings">
357
+ <dt>i</dt>
358
+ <dd>Back to inbox</dd>
359
+ </dl>
360
+ <dl class="keyboard-mappings">
361
+ <dt>u</dt>
362
+ <dd>Back to issues</dd>
363
+ </dl>
364
+ <dl class="keyboard-mappings">
365
+ <dt>/</dt>
366
+ <dd>Focus issues search</dd>
367
+ </dl>
368
+ </div>
369
+ </div>
370
+ </div>
371
+
372
+ <div class="js-hidden-pane" style='display:none'>
373
+ <div class="rule"></div>
374
+
375
+ <h3>Issues Dashboard</h3>
376
+
377
+ <div class="columns threecols">
378
+ <div class="column first">
379
+ <dl class="keyboard-mappings">
380
+ <dt>j</dt>
381
+ <dd>Move selection down</dd>
382
+ </dl>
383
+ <dl class="keyboard-mappings">
384
+ <dt>k</dt>
385
+ <dd>Move selection up</dd>
386
+ </dl>
387
+ <dl class="keyboard-mappings">
388
+ <dt>o <em>or</em> enter</dt>
389
+ <dd>Open issue</dd>
390
+ </dl>
391
+ </div><!-- /.column.first -->
392
+ </div>
393
+ </div>
394
+
395
+ <div class="js-hidden-pane" style='display:none'>
396
+ <div class="rule"></div>
397
+
398
+ <h3>Network Graph</h3>
399
+ <div class="columns equacols">
400
+ <div class="column first">
401
+ <dl class="keyboard-mappings">
402
+ <dt><span class="badmono">←</span> <em>or</em> h</dt>
403
+ <dd>Scroll left</dd>
404
+ </dl>
405
+ <dl class="keyboard-mappings">
406
+ <dt><span class="badmono">→</span> <em>or</em> l</dt>
407
+ <dd>Scroll right</dd>
408
+ </dl>
409
+ <dl class="keyboard-mappings">
410
+ <dt><span class="badmono">↑</span> <em>or</em> k</dt>
411
+ <dd>Scroll up</dd>
412
+ </dl>
413
+ <dl class="keyboard-mappings">
414
+ <dt><span class="badmono">↓</span> <em>or</em> j</dt>
415
+ <dd>Scroll down</dd>
416
+ </dl>
417
+ <dl class="keyboard-mappings">
418
+ <dt>t</dt>
419
+ <dd>Toggle visibility of head labels</dd>
420
+ </dl>
421
+ </div><!-- /.column.first -->
422
+ <div class="column last">
423
+ <dl class="keyboard-mappings">
424
+ <dt>shift <span class="badmono">←</span> <em>or</em> shift h</dt>
425
+ <dd>Scroll all the way left</dd>
426
+ </dl>
427
+ <dl class="keyboard-mappings">
428
+ <dt>shift <span class="badmono">→</span> <em>or</em> shift l</dt>
429
+ <dd>Scroll all the way right</dd>
430
+ </dl>
431
+ <dl class="keyboard-mappings">
432
+ <dt>shift <span class="badmono">↑</span> <em>or</em> shift k</dt>
433
+ <dd>Scroll all the way up</dd>
434
+ </dl>
435
+ <dl class="keyboard-mappings">
436
+ <dt>shift <span class="badmono">↓</span> <em>or</em> shift j</dt>
437
+ <dd>Scroll all the way down</dd>
438
+ </dl>
439
+ </div><!-- /.column.last -->
440
+ </div>
441
+ </div>
442
+
443
+ <div class="js-hidden-pane" style='display:none'>
444
+ <div class="rule"></div>
445
+ <div class="columns threecols">
446
+ <div class="column first js-hidden-pane" style='display:none'>
447
+ <h3>Source Code Browsing</h3>
448
+ <dl class="keyboard-mappings">
449
+ <dt>t</dt>
450
+ <dd>Activates the file finder</dd>
451
+ </dl>
452
+ <dl class="keyboard-mappings">
453
+ <dt>l</dt>
454
+ <dd>Jump to line</dd>
455
+ </dl>
456
+ <dl class="keyboard-mappings">
457
+ <dt>w</dt>
458
+ <dd>Switch branch/tag</dd>
459
+ </dl>
460
+ <dl class="keyboard-mappings">
461
+ <dt>y</dt>
462
+ <dd>Expand URL to its canonical form</dd>
463
+ </dl>
464
+ </div>
465
+ </div>
466
+ </div>
467
+
468
+ <div class="js-hidden-pane" style='display:none'>
469
+ <div class="rule"></div>
470
+ <div class="columns threecols">
471
+ <div class="column first">
472
+ <h3>Browsing Commits</h3>
473
+ <dl class="keyboard-mappings">
474
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
475
+ <dd>Submit comment</dd>
476
+ </dl>
477
+ <dl class="keyboard-mappings">
478
+ <dt>escape</dt>
479
+ <dd>Close form</dd>
480
+ </dl>
481
+ <dl class="keyboard-mappings">
482
+ <dt>p</dt>
483
+ <dd>Parent commit</dd>
484
+ </dl>
485
+ <dl class="keyboard-mappings">
486
+ <dt>o</dt>
487
+ <dd>Other parent commit</dd>
488
+ </dl>
489
+ </div>
490
+ </div>
491
+ </div>
492
+
493
+ <div class="js-hidden-pane" style='display:none'>
494
+ <div class="rule"></div>
495
+ <h3>Notifications</h3>
496
+
497
+ <div class="columns threecols">
498
+ <div class="column first">
499
+ <dl class="keyboard-mappings">
500
+ <dt>j</dt>
501
+ <dd>Move selection down</dd>
502
+ </dl>
503
+ <dl class="keyboard-mappings">
504
+ <dt>k</dt>
505
+ <dd>Move selection up</dd>
506
+ </dl>
507
+ <dl class="keyboard-mappings">
508
+ <dt>o <em>or</em> enter</dt>
509
+ <dd>Open notification</dd>
510
+ </dl>
511
+ </div><!-- /.column.first -->
512
+
513
+ <div class="column second">
514
+ <dl class="keyboard-mappings">
515
+ <dt>e <em>or</em> shift i <em>or</em> y</dt>
516
+ <dd>Mark as read</dd>
517
+ </dl>
518
+ <dl class="keyboard-mappings">
519
+ <dt>shift m</dt>
520
+ <dd>Mute thread</dd>
521
+ </dl>
522
+ </div><!-- /.column.first -->
523
+ </div>
524
+ </div>
525
+
526
+ </div>
527
+
528
+ <div id="markdown-help" class="instapaper_ignore readability-extra">
529
+ <h2>Markdown Cheat Sheet</h2>
530
+
531
+ <div class="cheatsheet-content">
532
+
533
+ <div class="mod">
534
+ <div class="col">
535
+ <h3>Format Text</h3>
536
+ <p>Headers</p>
537
+ <pre>
538
+ # This is an &lt;h1&gt; tag
539
+ ## This is an &lt;h2&gt; tag
540
+ ###### This is an &lt;h6&gt; tag</pre>
541
+ <p>Text styles</p>
542
+ <pre>
543
+ *This text will be italic*
544
+ _This will also be italic_
545
+ **This text will be bold**
546
+ __This will also be bold__
547
+
548
+ *You **can** combine them*
549
+ </pre>
550
+ </div>
551
+ <div class="col">
552
+ <h3>Lists</h3>
553
+ <p>Unordered</p>
554
+ <pre>
555
+ * Item 1
556
+ * Item 2
557
+ * Item 2a
558
+ * Item 2b</pre>
559
+ <p>Ordered</p>
560
+ <pre>
561
+ 1. Item 1
562
+ 2. Item 2
563
+ 3. Item 3
564
+ * Item 3a
565
+ * Item 3b</pre>
566
+ </div>
567
+ <div class="col">
568
+ <h3>Miscellaneous</h3>
569
+ <p>Images</p>
570
+ <pre>
571
+ ![GitHub Logo](/images/logo.png)
572
+ Format: ![Alt Text](url)
573
+ </pre>
574
+ <p>Links</p>
575
+ <pre>
576
+ http://github.com - automatic!
577
+ [GitHub](http://github.com)</pre>
578
+ <p>Blockquotes</p>
579
+ <pre>
580
+ As Kanye West said:
581
+
582
+ > We're living the future so
583
+ > the present is our past.
584
+ </pre>
585
+ </div>
586
+ </div>
587
+ <div class="rule"></div>
588
+
589
+ <h3>Code Examples in Markdown</h3>
590
+ <div class="col">
591
+ <p>Syntax highlighting with <a href="http://github.github.com/github-flavored-markdown/" title="GitHub Flavored Markdown" target="_blank">GFM</a></p>
592
+ <pre>
593
+ ```javascript
594
+ function fancyAlert(arg) {
595
+ if(arg) {
596
+ $.facebox({div:'#foo'})
597
+ }
598
+ }
599
+ ```</pre>
600
+ </div>
601
+ <div class="col">
602
+ <p>Or, indent your code 4 spaces</p>
603
+ <pre>
604
+ Here is a Python code example
605
+ without syntax highlighting:
606
+
607
+ def foo:
608
+ if not bar:
609
+ return true</pre>
610
+ </div>
611
+ <div class="col">
612
+ <p>Inline code for comments</p>
613
+ <pre>
614
+ I think you should use an
615
+ `&lt;addr&gt;` element here instead.</pre>
616
+ </div>
617
+ </div>
618
+
619
+ </div>
620
+ </div>
621
+
622
+
623
+ <div id="ajax-error-message" class="flash flash-error">
624
+ <span class="mini-icon mini-icon-exclamation"></span>
625
+ Something went wrong with that request. Please try again.
626
+ <a href="#" class="mini-icon mini-icon-remove-close ajax-error-dismiss"></a>
627
+ </div>
628
+
629
+
630
+
631
+ <span id='server_response_time' data-time='0.01494' data-host='fe2'></span>
632
+
633
+ </body>
634
+ </html>
data/spec/sitemap_spec.rb CHANGED
@@ -14,6 +14,7 @@ describe SiteValidator::Sitemap do
14
14
  @sitemap_for_exclusions_xml = SiteValidator::Sitemap.new('http://example.com/exclusions.xml')
15
15
  @sitemap_for_absolute_urls = SiteValidator::Sitemap.new('http://markupvalidator.com/faqs')
16
16
  @sitemap_international = SiteValidator::Sitemap.new('http://example.com/international')
17
+ @sitemap_with_safe_redirect = SiteValidator::Sitemap.new('http://github.com')
17
18
 
18
19
  MarkupValidator.any_instance.stubs(:validate_uri).returns(stubbed_validator_results)
19
20
  end
@@ -68,6 +69,14 @@ describe SiteValidator::Sitemap do
68
69
  "http://guides.rubyonrails.org/v2.3.8/"]
69
70
  end
70
71
 
72
+ it "should follow safe (http => https) redirects" do
73
+ expect {
74
+ @sitemap_with_safe_redirect.pages
75
+ }.to_not raise_error
76
+
77
+ @sitemap_with_safe_redirect.pages.length.should == 37
78
+ end
79
+
71
80
  it "should get correct absolute links for internal pages" do
72
81
  @sitemap_for_absolute_urls.pages.length.should == 9
73
82
  @sitemap_for_absolute_urls.pages.map {|p| p.url}
data/spec/spec_helper.rb CHANGED
@@ -17,6 +17,8 @@ FakeWeb.register_uri(:get, "http://example.com/exclusions", :response => open("#
17
17
  FakeWeb.register_uri(:get, "http://example.com/exclusions.xml", :response => open("#{$samples_dir}/exclusions.xml").read)
18
18
  FakeWeb.register_uri(:get, "http://markupvalidator.com/faqs", :response => open("#{$samples_dir}/markup_validator_faqs.response").read)
19
19
  FakeWeb.register_uri(:get, "http://example.com/international", :response => open("#{$samples_dir}/international.response").read)
20
+ FakeWeb.register_uri(:get, "http://github.com", :response => open("#{$samples_dir}/http_github.response").read)
21
+ FakeWeb.register_uri(:get, "https://github.com", :response => open("#{$samples_dir}/https_github.response").read)
20
22
 
21
23
  def message_text(message_id)
22
24
  message_texts = {
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site_validator
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 4
10
- version: 1.0.4
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jaime Iniesta
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-18 00:00:00 Z
18
+ date: 2012-12-03 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: w3c_validators
@@ -49,25 +49,41 @@ dependencies:
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: metainspector
52
+ name: open_uri_redirections
53
53
  prerelease: false
54
54
  requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
- - - ~>
57
+ - - "="
58
58
  - !ruby/object:Gem::Version
59
- hash: 59
59
+ hash: 29
60
60
  segments:
61
+ - 0
62
+ - 0
61
63
  - 1
62
- - 10
63
- - 2
64
- version: 1.10.2
64
+ version: 0.0.1
65
65
  type: :runtime
66
66
  version_requirements: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- name: rspec
68
+ name: metainspector
69
69
  prerelease: false
70
70
  requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ hash: 35
76
+ segments:
77
+ - 1
78
+ - 13
79
+ - 0
80
+ version: 1.13.0
81
+ type: :runtime
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
71
87
  none: false
72
88
  requirements:
73
89
  - - ~>
@@ -79,11 +95,11 @@ dependencies:
79
95
  - 0
80
96
  version: 2.5.0
81
97
  type: :development
82
- version_requirements: *id004
98
+ version_requirements: *id005
83
99
  - !ruby/object:Gem::Dependency
84
100
  name: mocha
85
101
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
102
+ requirement: &id006 !ruby/object:Gem::Requirement
87
103
  none: false
88
104
  requirements:
89
105
  - - ~>
@@ -95,11 +111,11 @@ dependencies:
95
111
  - 4
96
112
  version: 0.11.4
97
113
  type: :development
98
- version_requirements: *id005
114
+ version_requirements: *id006
99
115
  - !ruby/object:Gem::Dependency
100
116
  name: rake
101
117
  prerelease: false
102
- requirement: &id006 !ruby/object:Gem::Requirement
118
+ requirement: &id007 !ruby/object:Gem::Requirement
103
119
  none: false
104
120
  requirements:
105
121
  - - ~>
@@ -111,11 +127,11 @@ dependencies:
111
127
  - 2
112
128
  version: 0.9.2
113
129
  type: :development
114
- version_requirements: *id006
130
+ version_requirements: *id007
115
131
  - !ruby/object:Gem::Dependency
116
132
  name: fakeweb
117
133
  prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
134
+ requirement: &id008 !ruby/object:Gem::Requirement
119
135
  none: false
120
136
  requirements:
121
137
  - - ~>
@@ -127,7 +143,7 @@ dependencies:
127
143
  - 0
128
144
  version: 1.3.0
129
145
  type: :development
130
- version_requirements: *id007
146
+ version_requirements: *id008
131
147
  description: command-line tool to validate the markup of a whole site against the W3C validator
132
148
  email:
133
149
  - jaimeiniesta@gmail.com
@@ -163,6 +179,8 @@ files:
163
179
  - spec/samples/exclusions.html
164
180
  - spec/samples/exclusions.xml
165
181
  - spec/samples/guides.rubyonrails.org.html
182
+ - spec/samples/http_github.response
183
+ - spec/samples/https_github.response
166
184
  - spec/samples/international.response
167
185
  - spec/samples/markup_validator_faqs.response
168
186
  - spec/samples/protocol_relative.html