google-authsub 0.0.4

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.
Files changed (69) hide show
  1. data/.gitignore +1 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +98 -0
  4. data/Rakefile +19 -0
  5. data/VERSION +1 -0
  6. data/coverage/-Library-Ruby-Gems-1_8-gems-FakeWeb-1_1_2-lib-fake_net_http_rb.html +679 -0
  7. data/coverage/-Library-Ruby-Gems-1_8-gems-FakeWeb-1_1_2-lib-fake_web_rb.html +843 -0
  8. data/coverage/-Library-Ruby-Gems-1_8-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1598 -0
  9. data/coverage/index.html +360 -0
  10. data/coverage/lib-googleauthsub_rb.html +877 -0
  11. data/coverage/spec-googleauthsub_spec_rb.html +950 -0
  12. data/coverage/spec-spec_helper_rb.html +640 -0
  13. data/doc/classes/AuthEchoServlet.html +152 -0
  14. data/doc/classes/AuthEchoServlet.src/M000001.html +20 -0
  15. data/doc/classes/AuthEchoServlet.src/M000002.html +18 -0
  16. data/doc/classes/GData/AuthSubError.html +139 -0
  17. data/doc/classes/GData/AuthSubError.src/M000019.html +18 -0
  18. data/doc/classes/GData/Error.html +111 -0
  19. data/doc/classes/GData/GoogleAuthSub.html +521 -0
  20. data/doc/classes/GData/GoogleAuthSub.src/M000001.html +29 -0
  21. data/doc/classes/GData/GoogleAuthSub.src/M000002.html +22 -0
  22. data/doc/classes/GData/GoogleAuthSub.src/M000003.html +29 -0
  23. data/doc/classes/GData/GoogleAuthSub.src/M000004.html +22 -0
  24. data/doc/classes/GData/GoogleAuthSub.src/M000005.html +24 -0
  25. data/doc/classes/GData/GoogleAuthSub.src/M000006.html +19 -0
  26. data/doc/classes/GData/GoogleAuthSub.src/M000007.html +18 -0
  27. data/doc/classes/GData/GoogleAuthSub.src/M000008.html +18 -0
  28. data/doc/classes/GData/GoogleAuthSub.src/M000009.html +24 -0
  29. data/doc/classes/GData/GoogleAuthSub.src/M000010.html +25 -0
  30. data/doc/classes/GData/GoogleAuthSub.src/M000011.html +30 -0
  31. data/doc/classes/GData/GoogleAuthSub.src/M000012.html +18 -0
  32. data/doc/classes/GData/GoogleAuthSub.src/M000013.html +18 -0
  33. data/doc/classes/GData/GoogleAuthSub.src/M000014.html +18 -0
  34. data/doc/classes/GData/GoogleAuthSub.src/M000015.html +18 -0
  35. data/doc/classes/GData/GoogleAuthSub.src/M000016.html +20 -0
  36. data/doc/classes/GData/GoogleAuthSub.src/M000017.html +20 -0
  37. data/doc/classes/GData/GoogleAuthSub.src/M000018.html +19 -0
  38. data/doc/classes/GData.html +162 -0
  39. data/doc/created.rid +1 -0
  40. data/doc/files/googleauthsub_rb.html +140 -0
  41. data/doc/files/lib/googleauthsub_rb.html +140 -0
  42. data/doc/files/spec/googleauthsub_spec_rb.html +146 -0
  43. data/doc/files/spec/googleresponder_rb.html +121 -0
  44. data/doc/files/spec/spec_helper_rb.html +149 -0
  45. data/doc/fr_class_index.html +31 -0
  46. data/doc/fr_file_index.html +30 -0
  47. data/doc/fr_method_index.html +45 -0
  48. data/doc/index.html +24 -0
  49. data/doc/rdoc-style.css +208 -0
  50. data/google-authsub-0.0.2.gem +0 -0
  51. data/google-authsub-0.0.3.gem +0 -0
  52. data/google-authsub.gemspec +109 -0
  53. data/lib/googleauthsub.rb +271 -0
  54. data/live test/authsub_test.html +40 -0
  55. data/live test/gastest.rb +90 -0
  56. data/spec/googleauthsub_spec.rb +350 -0
  57. data/spec/googleresponder.rb +26 -0
  58. data/spec/mock responses/bad_token_info.txt +11 -0
  59. data/spec/mock responses/calendar.txt +11 -0
  60. data/spec/mock responses/revoke_token.txt +7 -0
  61. data/spec/mock responses/revoked_token.txt +17 -0
  62. data/spec/mock responses/session_token.txt +9 -0
  63. data/spec/mock responses/token_info.txt +11 -0
  64. data/spec/mock responses/unauthorized.txt +18 -0
  65. data/spec/mock_certs/test_private_key.pem +15 -0
  66. data/spec/mock_certs/test_public_key.pem +6 -0
  67. data/spec/spec_helper.rb +30 -0
  68. data/spec/spec_opts +7 -0
  69. metadata +125 -0
@@ -0,0 +1,843 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>/Library/Ruby/Gems/1.8/gems/FakeWeb-1.1.2/lib/fake_web.rb - C0 code coverage information</title>
3
+ <style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
4
+ <style type='text/css'>span.cross-ref-title {
5
+ font-size: 140%;
6
+ }
7
+ span.cross-ref a {
8
+ text-decoration: none;
9
+ }
10
+ span.cross-ref {
11
+ background-color:#f3f7fa;
12
+ border: 1px dashed #333;
13
+ margin: 1em;
14
+ padding: 0.5em;
15
+ overflow: hidden;
16
+ }
17
+ a.crossref-toggle {
18
+ text-decoration: none;
19
+ }
20
+ span.marked0 {
21
+ background-color: rgb(185, 210, 200);
22
+ display: block;
23
+ }
24
+ span.marked1 {
25
+ background-color: rgb(190, 215, 205);
26
+ display: block;
27
+ }
28
+ span.inferred0 {
29
+ background-color: rgb(175, 200, 200);
30
+ display: block;
31
+ }
32
+ span.inferred1 {
33
+ background-color: rgb(180, 205, 205);
34
+ display: block;
35
+ }
36
+ span.uncovered0 {
37
+ background-color: rgb(225, 110, 110);
38
+ display: block;
39
+ }
40
+ span.uncovered1 {
41
+ background-color: rgb(235, 120, 120);
42
+ display: block;
43
+ }
44
+ span.overview {
45
+ border-bottom: 8px solid black;
46
+ }
47
+ div.overview {
48
+ border-bottom: 8px solid black;
49
+ }
50
+ body {
51
+ font-family: verdana, arial, helvetica;
52
+ }
53
+ div.footer {
54
+ font-size: 68%;
55
+ margin-top: 1.5em;
56
+ }
57
+ h1, h2, h3, h4, h5, h6 {
58
+ margin-bottom: 0.5em;
59
+ }
60
+ h5 {
61
+ margin-top: 0.5em;
62
+ }
63
+ .hidden {
64
+ display: none;
65
+ }
66
+ div.separator {
67
+ height: 10px;
68
+ }
69
+ /* Commented out for better readability, esp. on IE */
70
+ /*
71
+ table tr td, table tr th {
72
+ font-size: 68%;
73
+ }
74
+ td.value table tr td {
75
+ font-size: 11px;
76
+ }
77
+ */
78
+ table.percent_graph {
79
+ height: 12px;
80
+ border: #808080 1px solid;
81
+ empty-cells: show;
82
+ }
83
+ table.percent_graph td.covered {
84
+ height: 10px;
85
+ background: #00f000;
86
+ }
87
+ table.percent_graph td.uncovered {
88
+ height: 10px;
89
+ background: #e00000;
90
+ }
91
+ table.percent_graph td.NA {
92
+ height: 10px;
93
+ background: #eaeaea;
94
+ }
95
+ table.report {
96
+ border-collapse: collapse;
97
+ width: 100%;
98
+ }
99
+ table.report td.heading {
100
+ background: #dcecff;
101
+ border: #d0d0d0 1px solid;
102
+ font-weight: bold;
103
+ text-align: center;
104
+ }
105
+ table.report td.heading:hover {
106
+ background: #c0ffc0;
107
+ }
108
+ table.report td.text {
109
+ border: #d0d0d0 1px solid;
110
+ }
111
+ table.report td.value,
112
+ table.report td.lines_total,
113
+ table.report td.lines_code {
114
+ text-align: right;
115
+ border: #d0d0d0 1px solid;
116
+ }
117
+ table.report tr.light {
118
+ background-color: rgb(240, 240, 245);
119
+ }
120
+ table.report tr.dark {
121
+ background-color: rgb(230, 230, 235);
122
+ }
123
+ </style>
124
+ <script type='text/javascript'>
125
+ // <![CDATA[
126
+ function toggleCode( id ) {
127
+ if ( document.getElementById )
128
+ elem = document.getElementById( id );
129
+ else if ( document.all )
130
+ elem = eval( "document.all." + id );
131
+ else
132
+ return false;
133
+
134
+ elemStyle = elem.style;
135
+
136
+ if ( elemStyle.display != "block" ) {
137
+ elemStyle.display = "block"
138
+ } else {
139
+ elemStyle.display = "none"
140
+ }
141
+
142
+ return true;
143
+ }
144
+
145
+ // Make cross-references hidden by default
146
+ document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
147
+ // ]]>
148
+ </script>
149
+ <style type='text/css'>span.run0 {
150
+ background-color: rgb(178, 204, 255);
151
+ display: block;
152
+ }
153
+ span.run1 {
154
+ background-color: rgb(178, 206, 255);
155
+ display: block;
156
+ }
157
+ span.run2 {
158
+ background-color: rgb(178, 209, 255);
159
+ display: block;
160
+ }
161
+ span.run3 {
162
+ background-color: rgb(178, 211, 255);
163
+ display: block;
164
+ }
165
+ span.run4 {
166
+ background-color: rgb(178, 214, 255);
167
+ display: block;
168
+ }
169
+ span.run5 {
170
+ background-color: rgb(178, 218, 255);
171
+ display: block;
172
+ }
173
+ span.run6 {
174
+ background-color: rgb(178, 220, 255);
175
+ display: block;
176
+ }
177
+ span.run7 {
178
+ background-color: rgb(178, 223, 255);
179
+ display: block;
180
+ }
181
+ span.run8 {
182
+ background-color: rgb(178, 225, 255);
183
+ display: block;
184
+ }
185
+ span.run9 {
186
+ background-color: rgb(178, 228, 255);
187
+ display: block;
188
+ }
189
+ span.run10 {
190
+ background-color: rgb(178, 232, 255);
191
+ display: block;
192
+ }
193
+ span.run11 {
194
+ background-color: rgb(178, 234, 255);
195
+ display: block;
196
+ }
197
+ span.run12 {
198
+ background-color: rgb(178, 237, 255);
199
+ display: block;
200
+ }
201
+ span.run13 {
202
+ background-color: rgb(178, 239, 255);
203
+ display: block;
204
+ }
205
+ span.run14 {
206
+ background-color: rgb(178, 242, 255);
207
+ display: block;
208
+ }
209
+ span.run15 {
210
+ background-color: rgb(178, 246, 255);
211
+ display: block;
212
+ }
213
+ span.run16 {
214
+ background-color: rgb(178, 248, 255);
215
+ display: block;
216
+ }
217
+ span.run17 {
218
+ background-color: rgb(178, 251, 255);
219
+ display: block;
220
+ }
221
+ span.run18 {
222
+ background-color: rgb(178, 253, 255);
223
+ display: block;
224
+ }
225
+ span.run19 {
226
+ background-color: rgb(178, 255, 253);
227
+ display: block;
228
+ }
229
+ span.run20 {
230
+ background-color: rgb(178, 255, 249);
231
+ display: block;
232
+ }
233
+ span.run21 {
234
+ background-color: rgb(178, 255, 247);
235
+ display: block;
236
+ }
237
+ span.run22 {
238
+ background-color: rgb(178, 255, 244);
239
+ display: block;
240
+ }
241
+ span.run23 {
242
+ background-color: rgb(178, 255, 242);
243
+ display: block;
244
+ }
245
+ span.run24 {
246
+ background-color: rgb(178, 255, 239);
247
+ display: block;
248
+ }
249
+ span.run25 {
250
+ background-color: rgb(178, 255, 235);
251
+ display: block;
252
+ }
253
+ span.run26 {
254
+ background-color: rgb(178, 255, 233);
255
+ display: block;
256
+ }
257
+ span.run27 {
258
+ background-color: rgb(178, 255, 230);
259
+ display: block;
260
+ }
261
+ span.run28 {
262
+ background-color: rgb(178, 255, 228);
263
+ display: block;
264
+ }
265
+ span.run29 {
266
+ background-color: rgb(178, 255, 225);
267
+ display: block;
268
+ }
269
+ span.run30 {
270
+ background-color: rgb(178, 255, 221);
271
+ display: block;
272
+ }
273
+ span.run31 {
274
+ background-color: rgb(178, 255, 219);
275
+ display: block;
276
+ }
277
+ span.run32 {
278
+ background-color: rgb(178, 255, 216);
279
+ display: block;
280
+ }
281
+ span.run33 {
282
+ background-color: rgb(178, 255, 214);
283
+ display: block;
284
+ }
285
+ span.run34 {
286
+ background-color: rgb(178, 255, 211);
287
+ display: block;
288
+ }
289
+ span.run35 {
290
+ background-color: rgb(178, 255, 207);
291
+ display: block;
292
+ }
293
+ span.run36 {
294
+ background-color: rgb(178, 255, 205);
295
+ display: block;
296
+ }
297
+ span.run37 {
298
+ background-color: rgb(178, 255, 202);
299
+ display: block;
300
+ }
301
+ span.run38 {
302
+ background-color: rgb(178, 255, 200);
303
+ display: block;
304
+ }
305
+ span.run39 {
306
+ background-color: rgb(178, 255, 197);
307
+ display: block;
308
+ }
309
+ span.run40 {
310
+ background-color: rgb(178, 255, 193);
311
+ display: block;
312
+ }
313
+ span.run41 {
314
+ background-color: rgb(178, 255, 191);
315
+ display: block;
316
+ }
317
+ span.run42 {
318
+ background-color: rgb(178, 255, 188);
319
+ display: block;
320
+ }
321
+ span.run43 {
322
+ background-color: rgb(178, 255, 186);
323
+ display: block;
324
+ }
325
+ span.run44 {
326
+ background-color: rgb(178, 255, 183);
327
+ display: block;
328
+ }
329
+ span.run45 {
330
+ background-color: rgb(178, 255, 179);
331
+ display: block;
332
+ }
333
+ span.run46 {
334
+ background-color: rgb(179, 255, 178);
335
+ display: block;
336
+ }
337
+ span.run47 {
338
+ background-color: rgb(182, 255, 178);
339
+ display: block;
340
+ }
341
+ span.run48 {
342
+ background-color: rgb(184, 255, 178);
343
+ display: block;
344
+ }
345
+ span.run49 {
346
+ background-color: rgb(187, 255, 178);
347
+ display: block;
348
+ }
349
+ span.run50 {
350
+ background-color: rgb(191, 255, 178);
351
+ display: block;
352
+ }
353
+ span.run51 {
354
+ background-color: rgb(193, 255, 178);
355
+ display: block;
356
+ }
357
+ span.run52 {
358
+ background-color: rgb(196, 255, 178);
359
+ display: block;
360
+ }
361
+ span.run53 {
362
+ background-color: rgb(198, 255, 178);
363
+ display: block;
364
+ }
365
+ span.run54 {
366
+ background-color: rgb(201, 255, 178);
367
+ display: block;
368
+ }
369
+ span.run55 {
370
+ background-color: rgb(205, 255, 178);
371
+ display: block;
372
+ }
373
+ span.run56 {
374
+ background-color: rgb(207, 255, 178);
375
+ display: block;
376
+ }
377
+ span.run57 {
378
+ background-color: rgb(210, 255, 178);
379
+ display: block;
380
+ }
381
+ span.run58 {
382
+ background-color: rgb(212, 255, 178);
383
+ display: block;
384
+ }
385
+ span.run59 {
386
+ background-color: rgb(215, 255, 178);
387
+ display: block;
388
+ }
389
+ span.run60 {
390
+ background-color: rgb(219, 255, 178);
391
+ display: block;
392
+ }
393
+ span.run61 {
394
+ background-color: rgb(221, 255, 178);
395
+ display: block;
396
+ }
397
+ span.run62 {
398
+ background-color: rgb(224, 255, 178);
399
+ display: block;
400
+ }
401
+ span.run63 {
402
+ background-color: rgb(226, 255, 178);
403
+ display: block;
404
+ }
405
+ span.run64 {
406
+ background-color: rgb(229, 255, 178);
407
+ display: block;
408
+ }
409
+ span.run65 {
410
+ background-color: rgb(233, 255, 178);
411
+ display: block;
412
+ }
413
+ span.run66 {
414
+ background-color: rgb(235, 255, 178);
415
+ display: block;
416
+ }
417
+ span.run67 {
418
+ background-color: rgb(238, 255, 178);
419
+ display: block;
420
+ }
421
+ span.run68 {
422
+ background-color: rgb(240, 255, 178);
423
+ display: block;
424
+ }
425
+ span.run69 {
426
+ background-color: rgb(243, 255, 178);
427
+ display: block;
428
+ }
429
+ span.run70 {
430
+ background-color: rgb(247, 255, 178);
431
+ display: block;
432
+ }
433
+ span.run71 {
434
+ background-color: rgb(249, 255, 178);
435
+ display: block;
436
+ }
437
+ span.run72 {
438
+ background-color: rgb(252, 255, 178);
439
+ display: block;
440
+ }
441
+ span.run73 {
442
+ background-color: rgb(255, 255, 178);
443
+ display: block;
444
+ }
445
+ span.run74 {
446
+ background-color: rgb(255, 252, 178);
447
+ display: block;
448
+ }
449
+ span.run75 {
450
+ background-color: rgb(255, 248, 178);
451
+ display: block;
452
+ }
453
+ span.run76 {
454
+ background-color: rgb(255, 246, 178);
455
+ display: block;
456
+ }
457
+ span.run77 {
458
+ background-color: rgb(255, 243, 178);
459
+ display: block;
460
+ }
461
+ span.run78 {
462
+ background-color: rgb(255, 240, 178);
463
+ display: block;
464
+ }
465
+ span.run79 {
466
+ background-color: rgb(255, 238, 178);
467
+ display: block;
468
+ }
469
+ span.run80 {
470
+ background-color: rgb(255, 234, 178);
471
+ display: block;
472
+ }
473
+ span.run81 {
474
+ background-color: rgb(255, 232, 178);
475
+ display: block;
476
+ }
477
+ span.run82 {
478
+ background-color: rgb(255, 229, 178);
479
+ display: block;
480
+ }
481
+ span.run83 {
482
+ background-color: rgb(255, 226, 178);
483
+ display: block;
484
+ }
485
+ span.run84 {
486
+ background-color: rgb(255, 224, 178);
487
+ display: block;
488
+ }
489
+ span.run85 {
490
+ background-color: rgb(255, 220, 178);
491
+ display: block;
492
+ }
493
+ span.run86 {
494
+ background-color: rgb(255, 218, 178);
495
+ display: block;
496
+ }
497
+ span.run87 {
498
+ background-color: rgb(255, 215, 178);
499
+ display: block;
500
+ }
501
+ span.run88 {
502
+ background-color: rgb(255, 212, 178);
503
+ display: block;
504
+ }
505
+ span.run89 {
506
+ background-color: rgb(255, 210, 178);
507
+ display: block;
508
+ }
509
+ span.run90 {
510
+ background-color: rgb(255, 206, 178);
511
+ display: block;
512
+ }
513
+ span.run91 {
514
+ background-color: rgb(255, 204, 178);
515
+ display: block;
516
+ }
517
+ span.run92 {
518
+ background-color: rgb(255, 201, 178);
519
+ display: block;
520
+ }
521
+ span.run93 {
522
+ background-color: rgb(255, 198, 178);
523
+ display: block;
524
+ }
525
+ span.run94 {
526
+ background-color: rgb(255, 196, 178);
527
+ display: block;
528
+ }
529
+ span.run95 {
530
+ background-color: rgb(255, 192, 178);
531
+ display: block;
532
+ }
533
+ span.run96 {
534
+ background-color: rgb(255, 189, 178);
535
+ display: block;
536
+ }
537
+ span.run97 {
538
+ background-color: rgb(255, 187, 178);
539
+ display: block;
540
+ }
541
+ span.run98 {
542
+ background-color: rgb(255, 184, 178);
543
+ display: block;
544
+ }
545
+ span.run99 {
546
+ background-color: rgb(255, 182, 178);
547
+ display: block;
548
+ }
549
+ span.run100 {
550
+ background-color: rgb(255, 178, 178);
551
+ display: block;
552
+ }
553
+ </style>
554
+ </head>
555
+ <body><h3>C0 code coverage information</h3>
556
+ <p>Generated on Sat Jun 07 16:45:06 +1000 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
557
+ </p>
558
+ <hr/>
559
+ <pre><span class='marked0'>Code reported as executed by Ruby looks like this...
560
+ </span><span class='marked1'>and this: this line is also marked as covered.
561
+ </span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
562
+ </span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
563
+ </span><span class='uncovered0'>Finally, here&apos;s a line marked as not executed.
564
+ </span></pre>
565
+ <table class='report'><thead><tr><td class='heading'>Name</td>
566
+ <td class='heading'>Total lines</td>
567
+ <td class='heading'>Lines of code</td>
568
+ <td class='heading'>Total coverage</td>
569
+ <td class='heading'>Code coverage</td>
570
+ </tr>
571
+ </thead>
572
+ <tbody><tr class='light'><td><a href='-Library-Ruby-Gems-1_8-gems-FakeWeb-1_1_2-lib-fake_web_rb.html'>/Library/Ruby/Gems/1.8/gems/FakeWeb-1.1.2/lib/fake_web.rb</a>
573
+ </td>
574
+ <td class='lines_total'><tt>233</tt>
575
+ </td>
576
+ <td class='lines_code'><tt>129</tt>
577
+ </td>
578
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>61.4%</tt>
579
+ &nbsp;</td>
580
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='61'/>
581
+ <td class='uncovered' width='39'/>
582
+ </tr>
583
+ </table>
584
+ </td>
585
+ </tr>
586
+ </table>
587
+ </td>
588
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>33.3%</tt>
589
+ &nbsp;</td>
590
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='33'/>
591
+ <td class='uncovered' width='67'/>
592
+ </tr>
593
+ </table>
594
+ </td>
595
+ </tr>
596
+ </table>
597
+ </td>
598
+ </tr>
599
+ </tbody>
600
+ </table>
601
+ <pre><span class="inferred0"><a name="line1"></a> 1 # FakeWeb - Ruby Helper for Faking Web Requests
602
+ </span><span class="inferred1"><a name="line2"></a> 2 # Copyright 2006 Blaine Cook &lt;romeda@gmail.com&gt;.
603
+ </span><span class="inferred0"><a name="line3"></a> 3 #
604
+ </span><span class="inferred1"><a name="line4"></a> 4 # FakeWeb is free software; you can redistribute it and/or modify
605
+ </span><span class="inferred0"><a name="line5"></a> 5 # it under the terms of the GNU General Public License as published by
606
+ </span><span class="inferred1"><a name="line6"></a> 6 # the Free Software Foundation; either version 2 of the License, or
607
+ </span><span class="inferred0"><a name="line7"></a> 7 # (at your option) any later version.
608
+ </span><span class="inferred1"><a name="line8"></a> 8 #
609
+ </span><span class="inferred0"><a name="line9"></a> 9 # FakeWeb is distributed in the hope that it will be useful,
610
+ </span><span class="inferred1"><a name="line10"></a> 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
611
+ </span><span class="inferred0"><a name="line11"></a> 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
612
+ </span><span class="inferred1"><a name="line12"></a> 12 # GNU General Public License for more details.
613
+ </span><span class="inferred0"><a name="line13"></a> 13 #
614
+ </span><span class="inferred1"><a name="line14"></a> 14 # You should have received a copy of the GNU General Public License
615
+ </span><span class="inferred0"><a name="line15"></a> 15 # along with FakeWeb; if not, write to the Free Software
616
+ </span><span class="inferred1"><a name="line16"></a> 16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
617
+ </span><span class="inferred0"><a name="line17"></a> 17
618
+ </span><span class="marked1"><a name="line18"></a> 18 require 'fake_net_http'
619
+ </span><span class="marked0"><a name="line19"></a> 19 require 'singleton'
620
+ </span><span class="inferred1"><a name="line20"></a> 20
621
+ </span><span class="marked0"><a name="line21"></a> 21 module OpenURI #:nodoc: all
622
+ </span><span class="marked1"><a name="line22"></a> 22 class HTTPError &lt; StandardError; end;
623
+ </span><span class="inferred0"><a name="line23"></a> 23 end
624
+ </span><span class="inferred1"><a name="line24"></a> 24
625
+ </span><span class="marked0"><a name="line25"></a> 25 module FakeWeb
626
+ </span><span class="inferred1"><a name="line26"></a> 26
627
+ </span><span class="inferred0"><a name="line27"></a> 27 # Resets the FakeWeb Registry. This will force all subsequent web requests to
628
+ </span><span class="inferred1"><a name="line28"></a> 28 # behave as real requests.
629
+ </span><span class="marked0"><a name="line29"></a> 29 def FakeWeb.clean_registry; FakeWeb::Registry.instance.clean_registry; end
630
+ </span><span class="inferred1"><a name="line30"></a> 30
631
+ </span><span class="inferred0"><a name="line31"></a> 31 # Register +uri+ to be handled according to +options+. +uri+ can be a
632
+ </span><span class="inferred1"><a name="line32"></a> 32 # +String+ or an +URI+ object. +options+ must be a +Hash+ that must contain
633
+ </span><span class="inferred0"><a name="line33"></a> 33 # any one of the following keys:
634
+ </span><span class="inferred1"><a name="line34"></a> 34 #
635
+ </span><span class="inferred0"><a name="line35"></a> 35 # &lt;tt&gt;:string&lt;/tt&gt;::
636
+ </span><span class="inferred1"><a name="line36"></a> 36 # Takes a +String+ argument that is returned as the body of the response.
637
+ </span><span class="inferred0"><a name="line37"></a> 37 # FakeWeb.register_uri('http://example.com/', :string =&gt; &quot;Hello World!&quot;)
638
+ </span><span class="inferred1"><a name="line38"></a> 38 # &lt;tt&gt;:file&lt;/tt&gt;::
639
+ </span><span class="inferred0"><a name="line39"></a> 39 # Takes a valid filesystem path to a file that is slurped and returned as
640
+ </span><span class="inferred1"><a name="line40"></a> 40 # the body of the response.
641
+ </span><span class="inferred0"><a name="line41"></a> 41 # FakeWeb.register_uri('http://example.com/', :file =&gt; &quot;/tmp/my_response_body.txt&quot;)
642
+ </span><span class="inferred1"><a name="line42"></a> 42 # &lt;tt&gt;:response&lt;/tt&gt;::
643
+ </span><span class="inferred0"><a name="line43"></a> 43 # Either an &lt;tt&gt;Net::HTTPResponse&lt;/tt&gt;, an +IO+ or a +String+.
644
+ </span><span class="inferred1"><a name="line44"></a> 44 #
645
+ </span><span class="inferred0"><a name="line45"></a> 45 # The easier way by far is to pass the &lt;tt&gt;:response&lt;/tt&gt; option to
646
+ </span><span class="inferred1"><a name="line46"></a> 46 # +register_uri+ as a +String+ or an (open for reads) +IO+ object which
647
+ </span><span class="inferred0"><a name="line47"></a> 47 # will be used as the complete HTTP response, including headers and body.
648
+ </span><span class="inferred1"><a name="line48"></a> 48 # If the string points to a readable file, this file will be used as the
649
+ </span><span class="inferred0"><a name="line49"></a> 49 # content for the request.
650
+ </span><span class="inferred1"><a name="line50"></a> 50 #
651
+ </span><span class="inferred0"><a name="line51"></a> 51 # To obtain a complete response document, you can use the +curl+ command,
652
+ </span><span class="inferred1"><a name="line52"></a> 52 # like so:
653
+ </span><span class="inferred0"><a name="line53"></a> 53 #
654
+ </span><span class="inferred1"><a name="line54"></a> 54 # curl -i http://www.example.com/ &gt; response_for_www.example.com
655
+ </span><span class="inferred0"><a name="line55"></a> 55 #
656
+ </span><span class="inferred1"><a name="line56"></a> 56 # which can then be used in your test environment like so:
657
+ </span><span class="inferred0"><a name="line57"></a> 57 #
658
+ </span><span class="inferred1"><a name="line58"></a> 58 # FakeWeb.register_uri('http://www.example.com/', :response =&gt; 'response_for_www.example.com')
659
+ </span><span class="inferred0"><a name="line59"></a> 59 #
660
+ </span><span class="inferred1"><a name="line60"></a> 60 # See the &lt;tt&gt;Net::HTTPResponse&lt;/tt&gt;
661
+ </span><span class="inferred0"><a name="line61"></a> 61 # documentation[http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTPResponse.html]
662
+ </span><span class="inferred1"><a name="line62"></a> 62 # for more information on creating custom response objects.
663
+ </span><span class="inferred0"><a name="line63"></a> 63 #
664
+ </span><span class="inferred1"><a name="line64"></a> 64 # Two optional arguments are also accepted:
665
+ </span><span class="inferred0"><a name="line65"></a> 65 #
666
+ </span><span class="inferred1"><a name="line66"></a> 66 # &lt;tt&gt;:status&lt;/tt&gt;::
667
+ </span><span class="inferred0"><a name="line67"></a> 67 # Passing &lt;tt&gt;:status&lt;/tt&gt; as a two-value array will set the response code
668
+ </span><span class="inferred1"><a name="line68"></a> 68 # and message. The defaults are &lt;tt&gt;200&lt;/tt&gt; and &lt;tt&gt;OK&lt;/tt&gt;, respectively.
669
+ </span><span class="inferred0"><a name="line69"></a> 69 # Example:
670
+ </span><span class="inferred1"><a name="line70"></a> 70 # FakeWeb.register_uri('http://www.example.com/', :response =&gt; &quot;Go away!&quot;, :status =&gt; [ 404, &quot;Not Found&quot; ])
671
+ </span><span class="inferred0"><a name="line71"></a> 71 # &lt;tt&gt;:exception&lt;/tt&gt;::
672
+ </span><span class="inferred1"><a name="line72"></a> 72 # The argument passed via &lt;tt&gt;:exception&lt;/tt&gt; will be raised when the
673
+ </span><span class="inferred0"><a name="line73"></a> 73 # specified URL is requested. Any +Exception+ class is valid. Example:
674
+ </span><span class="inferred1"><a name="line74"></a> 74 # FakeWeb.register_uri('http://www.example.com/', :exception =&gt; Net::HTTPError)
675
+ </span><span class="inferred0"><a name="line75"></a> 75 #
676
+ </span><span class="marked1"><a name="line76"></a> 76 def FakeWeb.register_uri(uri, options); FakeWeb::Registry.instance.register_uri(uri, options); end
677
+ </span><span class="inferred0"><a name="line77"></a> 77
678
+ </span><span class="inferred1"><a name="line78"></a> 78 # Returns the faked Net::HTTPResponse object associated with +uri+.
679
+ </span><span class="marked0"><a name="line79"></a> 79 def FakeWeb.response_for(uri, &amp;block) #:nodoc: :yields: response
680
+ </span><span class="uncovered1"><a name="line80"></a> 80 FakeWeb::Registry.instance.response_for(uri, &amp;block)
681
+ </span><span class="uncovered0"><a name="line81"></a> 81 end
682
+ </span><span class="inferred1"><a name="line82"></a> 82
683
+ </span><span class="inferred0"><a name="line83"></a> 83 # Checks for presence of +uri+ in the +FakeWeb+ registry.
684
+ </span><span class="marked1"><a name="line84"></a> 84 def FakeWeb.registered_uri?(uri); FakeWeb::Registry.instance.registered_uri?(uri); end
685
+ </span><span class="inferred0"><a name="line85"></a> 85
686
+ </span><span class="marked1"><a name="line86"></a> 86 class Registry #:nodoc:
687
+ </span><span class="marked0"><a name="line87"></a> 87 include Singleton
688
+ </span><span class="inferred1"><a name="line88"></a> 88
689
+ </span><span class="marked0"><a name="line89"></a> 89 attr_accessor :uri_map
690
+ </span><span class="inferred1"><a name="line90"></a> 90
691
+ </span><span class="marked0"><a name="line91"></a> 91 def initialize
692
+ </span><span class="uncovered1"><a name="line92"></a> 92 clean_registry
693
+ </span><span class="uncovered0"><a name="line93"></a> 93 end
694
+ </span><span class="inferred1"><a name="line94"></a> 94
695
+ </span><span class="marked0"><a name="line95"></a> 95 def clean_registry
696
+ </span><span class="uncovered1"><a name="line96"></a> 96 self.uri_map = {}
697
+ </span><span class="uncovered0"><a name="line97"></a> 97 end
698
+ </span><span class="inferred1"><a name="line98"></a> 98
699
+ </span><span class="marked0"><a name="line99"></a> 99 def register_uri(uri, options)
700
+ </span><span class="uncovered1"><a name="line100"></a>100 uri_map[normalize_uri(uri)] = FakeWeb::Responder.new(uri, options)
701
+ </span><span class="uncovered0"><a name="line101"></a>101 end
702
+ </span><span class="inferred1"><a name="line102"></a>102
703
+ </span><span class="marked0"><a name="line103"></a>103 def registered_uri?(uri)
704
+ </span><span class="uncovered1"><a name="line104"></a>104 uri_map.has_key?(normalize_uri(uri))
705
+ </span><span class="uncovered0"><a name="line105"></a>105 end
706
+ </span><span class="inferred1"><a name="line106"></a>106
707
+ </span><span class="marked0"><a name="line107"></a>107 def registered_uri(uri)
708
+ </span><span class="uncovered1"><a name="line108"></a>108 uri = normalize_uri(uri)
709
+ </span><span class="uncovered0"><a name="line109"></a>109 return uri_map[uri] if registered_uri?(uri)
710
+ </span><span class="uncovered1"><a name="line110"></a>110 end
711
+ </span><span class="inferred0"><a name="line111"></a>111
712
+ </span><span class="marked1"><a name="line112"></a>112 def response_for(uri, &amp;block)
713
+ </span><span class="uncovered0"><a name="line113"></a>113 return registered_uri(uri).response(&amp;block)
714
+ </span><span class="uncovered1"><a name="line114"></a>114 end
715
+ </span><span class="inferred0"><a name="line115"></a>115
716
+ </span><span class="marked1"><a name="line116"></a>116 private
717
+ </span><span class="inferred0"><a name="line117"></a>117
718
+ </span><span class="marked1"><a name="line118"></a>118 def normalize_uri(uri)
719
+ </span><span class="uncovered0"><a name="line119"></a>119 case uri
720
+ </span><span class="uncovered1"><a name="line120"></a>120 when URI: uri
721
+ </span><span class="uncovered0"><a name="line121"></a>121 else
722
+ </span><span class="uncovered1"><a name="line122"></a>122 uri = 'http://' + uri unless uri.match('^https?://')
723
+ </span><span class="uncovered0"><a name="line123"></a>123 URI.parse(uri)
724
+ </span><span class="uncovered1"><a name="line124"></a>124 end
725
+ </span><span class="uncovered0"><a name="line125"></a>125 end
726
+ </span><span class="uncovered1"><a name="line126"></a>126 end
727
+ </span><span class="inferred0"><a name="line127"></a>127
728
+ </span><span class="marked1"><a name="line128"></a>128 module Response #:nodoc:
729
+ </span><span class="marked0"><a name="line129"></a>129 def read_body(*args, &amp;block)
730
+ </span><span class="uncovered1"><a name="line130"></a>130 yield @body if block_given?
731
+ </span><span class="uncovered0"><a name="line131"></a>131 @body
732
+ </span><span class="uncovered1"><a name="line132"></a>132 end
733
+ </span><span class="uncovered0"><a name="line133"></a>133 end
734
+ </span><span class="inferred1"><a name="line134"></a>134
735
+ </span><span class="marked0"><a name="line135"></a>135 class Responder #:nodoc:
736
+ </span><span class="inferred1"><a name="line136"></a>136
737
+ </span><span class="marked0"><a name="line137"></a>137 attr_accessor :uri, :options
738
+ </span><span class="inferred1"><a name="line138"></a>138
739
+ </span><span class="marked0"><a name="line139"></a>139 def initialize(uri, options)
740
+ </span><span class="uncovered1"><a name="line140"></a>140 self.uri = uri
741
+ </span><span class="uncovered0"><a name="line141"></a>141 self.options = options
742
+ </span><span class="uncovered1"><a name="line142"></a>142 end
743
+ </span><span class="inferred0"><a name="line143"></a>143
744
+ </span><span class="marked1"><a name="line144"></a>144 def response(&amp;block)
745
+ </span><span class="uncovered0"><a name="line145"></a>145 if has_baked_response?
746
+ </span><span class="uncovered1"><a name="line146"></a>146 response = baked_response
747
+ </span><span class="uncovered0"><a name="line147"></a>147 else
748
+ </span><span class="uncovered1"><a name="line148"></a>148 code, msg = meta_information
749
+ </span><span class="uncovered0"><a name="line149"></a>149 response = Net::HTTPResponse.send(:response_class, code.to_s).new(uri, code.to_s, msg)
750
+ </span><span class="uncovered1"><a name="line150"></a>150 response.instance_variable_set(:@body, content)
751
+ </span><span class="uncovered0"><a name="line151"></a>151 end
752
+ </span><span class="uncovered1"><a name="line152"></a>152 response.instance_variable_set(:@read, true)
753
+ </span><span class="uncovered0"><a name="line153"></a>153 response.extend FakeWeb::Response
754
+ </span><span class="uncovered1"><a name="line154"></a>154
755
+ </span><span class="uncovered0"><a name="line155"></a>155 optionally_raise(response)
756
+ </span><span class="uncovered1"><a name="line156"></a>156
757
+ </span><span class="uncovered0"><a name="line157"></a>157 yield response if block_given?
758
+ </span><span class="uncovered1"><a name="line158"></a>158
759
+ </span><span class="uncovered0"><a name="line159"></a>159 response
760
+ </span><span class="uncovered1"><a name="line160"></a>160 end
761
+ </span><span class="inferred0"><a name="line161"></a>161
762
+ </span><span class="marked1"><a name="line162"></a>162 private
763
+ </span><span class="inferred0"><a name="line163"></a>163
764
+ </span><span class="marked1"><a name="line164"></a>164 def content
765
+ </span><span class="uncovered0"><a name="line165"></a>165 [ :file, :string ].each do |map_option|
766
+ </span><span class="uncovered1"><a name="line166"></a>166 next unless options.has_key?(map_option)
767
+ </span><span class="uncovered0"><a name="line167"></a>167 return self.send(&quot;#{map_option}_response&quot;, options[map_option])
768
+ </span><span class="uncovered1"><a name="line168"></a>168 end
769
+ </span><span class="uncovered0"><a name="line169"></a>169
770
+ </span><span class="uncovered1"><a name="line170"></a>170 return ''
771
+ </span><span class="uncovered0"><a name="line171"></a>171 end
772
+ </span><span class="inferred1"><a name="line172"></a>172
773
+ </span><span class="marked0"><a name="line173"></a>173 def file_response(path)
774
+ </span><span class="uncovered1"><a name="line174"></a>174 IO.readlines(path).join(&quot;\n&quot;)
775
+ </span><span class="uncovered0"><a name="line175"></a>175 end
776
+ </span><span class="inferred1"><a name="line176"></a>176
777
+ </span><span class="marked0"><a name="line177"></a>177 def string_response(string)
778
+ </span><span class="uncovered1"><a name="line178"></a>178 string
779
+ </span><span class="uncovered0"><a name="line179"></a>179 end
780
+ </span><span class="inferred1"><a name="line180"></a>180
781
+ </span><span class="marked0"><a name="line181"></a>181 def baked_response
782
+ </span><span class="uncovered1"><a name="line182"></a>182 resp = case options[:response]
783
+ </span><span class="uncovered0"><a name="line183"></a>183 when Net::HTTPResponse: options[:response]
784
+ </span><span class="uncovered1"><a name="line184"></a>184 when String
785
+ </span><span class="uncovered0"><a name="line185"></a>185 socket = Net::BufferedIO.new(options[:response])
786
+ </span><span class="uncovered1"><a name="line186"></a>186 r = Net::HTTPResponse.read_new(socket)
787
+ </span><span class="uncovered0"><a name="line187"></a>187 r.instance_eval { @header['transfer-encoding'] = nil }
788
+ </span><span class="uncovered1"><a name="line188"></a>188 r.reading_body(socket, true) {}
789
+ </span><span class="uncovered0"><a name="line189"></a>189 r
790
+ </span><span class="uncovered1"><a name="line190"></a>190 else raise StandardError, &quot;Handler unimplemented for response #{options[:response]}&quot;
791
+ </span><span class="uncovered0"><a name="line191"></a>191 end
792
+ </span><span class="uncovered1"><a name="line192"></a>192 end
793
+ </span><span class="inferred0"><a name="line193"></a>193
794
+ </span><span class="marked1"><a name="line194"></a>194 def has_baked_response?
795
+ </span><span class="uncovered0"><a name="line195"></a>195 options.has_key?(:response)
796
+ </span><span class="uncovered1"><a name="line196"></a>196 end
797
+ </span><span class="inferred0"><a name="line197"></a>197
798
+ </span><span class="marked1"><a name="line198"></a>198 def optionally_raise(response)
799
+ </span><span class="uncovered0"><a name="line199"></a>199 return unless options.has_key?(:exception)
800
+ </span><span class="uncovered1"><a name="line200"></a>200 ex_alloc = options[:exception].allocate
801
+ </span><span class="uncovered0"><a name="line201"></a>201 ex_instance = case ex_alloc
802
+ </span><span class="uncovered1"><a name="line202"></a>202 when Net::HTTPError, OpenURI::HTTPError: options[:exception].new('Exception from FakeWeb', response)
803
+ </span><span class="uncovered0"><a name="line203"></a>203 else options[:exception].new
804
+ </span><span class="uncovered1"><a name="line204"></a>204 end
805
+ </span><span class="uncovered0"><a name="line205"></a>205 raise ex_instance
806
+ </span><span class="uncovered1"><a name="line206"></a>206 end
807
+ </span><span class="inferred0"><a name="line207"></a>207
808
+ </span><span class="marked1"><a name="line208"></a>208 def meta_information
809
+ </span><span class="uncovered0"><a name="line209"></a>209 if options.has_key?(:status); options[:status]
810
+ </span><span class="uncovered1"><a name="line210"></a>210 else; [ 200, 'OK' ]
811
+ </span><span class="uncovered0"><a name="line211"></a>211 end
812
+ </span><span class="uncovered1"><a name="line212"></a>212 end
813
+ </span><span class="uncovered0"><a name="line213"></a>213 end
814
+ </span><span class="inferred1"><a name="line214"></a>214
815
+ </span><span class="marked0"><a name="line215"></a>215 class SocketDelegator #:nodoc:
816
+ </span><span class="inferred1"><a name="line216"></a>216
817
+ </span><span class="marked0"><a name="line217"></a>217 def initialize(delegate=nil)
818
+ </span><span class="uncovered1"><a name="line218"></a>218 @delegate = nil
819
+ </span><span class="uncovered0"><a name="line219"></a>219 end
820
+ </span><span class="inferred1"><a name="line220"></a>220
821
+ </span><span class="marked0"><a name="line221"></a>221 def method_missing(method, *args, &amp;block)
822
+ </span><span class="uncovered1"><a name="line222"></a>222 return @delegate.send(method, *args, &amp;block) if @delegate
823
+ </span><span class="uncovered0"><a name="line223"></a>223 return self.send(&quot;my_#{method}&quot;, *args, &amp;block)
824
+ </span><span class="uncovered1"><a name="line224"></a>224 end
825
+ </span><span class="inferred0"><a name="line225"></a>225
826
+ </span><span class="marked1"><a name="line226"></a>226 def my_closed?
827
+ </span><span class="uncovered0"><a name="line227"></a>227 @closed ||= true
828
+ </span><span class="uncovered1"><a name="line228"></a>228 end
829
+ </span><span class="inferred0"><a name="line229"></a>229
830
+ </span><span class="marked1"><a name="line230"></a>230 def my_readuntil(*args)
831
+ </span><span class="inferred0"><a name="line231"></a>231 end
832
+ </span><span class="inferred1"><a name="line232"></a>232 end
833
+ </span><span class="inferred0"><a name="line233"></a>233 end
834
+ </span></pre><hr/>
835
+ <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
836
+ version 0.8.1.2.</p>
837
+ <p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
838
+ </a>
839
+ <a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
840
+ </a>
841
+ </p>
842
+ </body>
843
+ </html>