kennedy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/.yardoc +0 -0
  4. data/LICENSE +20 -0
  5. data/MAIN.rdoc +23 -0
  6. data/README.markdown +17 -0
  7. data/Rakefile +52 -0
  8. data/VERSION +1 -0
  9. data/bin/kennedy-gen +13 -0
  10. data/doc/Kennedy.html +98 -0
  11. data/doc/Kennedy/Backends.html +94 -0
  12. data/doc/Kennedy/Backends/LDAP.html +471 -0
  13. data/doc/Kennedy/BadTicketException.html +92 -0
  14. data/doc/Kennedy/Granter.html +570 -0
  15. data/doc/Kennedy/Server.html +258 -0
  16. data/doc/Kennedy/Ticket.html +875 -0
  17. data/doc/_index.html +170 -0
  18. data/doc/class_list.html +97 -0
  19. data/doc/css/common.css +1 -0
  20. data/doc/css/full_list.css +23 -0
  21. data/doc/css/style.css +261 -0
  22. data/doc/file.README.html +69 -0
  23. data/doc/file_list.html +29 -0
  24. data/doc/index.html +69 -0
  25. data/doc/js/app.js +91 -0
  26. data/doc/js/full_list.js +39 -0
  27. data/doc/js/jquery.js +19 -0
  28. data/doc/method_list.html +152 -0
  29. data/doc/top-level-namespace.html +80 -0
  30. data/kennedy.gemspec +114 -0
  31. data/lib/kennedy.rb +2 -0
  32. data/lib/kennedy/backends/ldap.rb +35 -0
  33. data/lib/kennedy/generator.rb +69 -0
  34. data/lib/kennedy/granter.rb +52 -0
  35. data/lib/kennedy/instance_configuration.rb +58 -0
  36. data/lib/kennedy/server.rb +164 -0
  37. data/lib/kennedy/ticket.rb +97 -0
  38. data/logo.png +0 -0
  39. data/template/config.ru.erb +22 -0
  40. data/template/config/api_keys.yml.erb +1 -0
  41. data/template/config/backend.rb +0 -0
  42. data/template/config/encryption.yml.erb +2 -0
  43. data/template/config/sessions.yml.erb +1 -0
  44. data/test/granter_test.rb +93 -0
  45. data/test/ldap_backend_test.rb +66 -0
  46. data/test/server_test.rb +285 -0
  47. data/test/teststrap.rb +34 -0
  48. data/test/ticket_test.rb +84 -0
  49. metadata +177 -0
@@ -0,0 +1,92 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=UTF-8" />
6
+ <title>Exception: Kennedy::BadTicketException</title>
7
+ <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="../css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '..';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <div id="header">
20
+ <div id="menu">
21
+
22
+ <a href="../_index.html">Index (B)</a> &raquo;
23
+ <a title="Kennedy" href="../Kennedy.html">Kennedy</a>
24
+ &raquo;
25
+ <span class="title">BadTicketException</span>
26
+
27
+ </div>
28
+
29
+ <div id="search">
30
+ <a id="class_list_link" href="#">Namespace List</a>
31
+ <a id="method_list_link" href="#">Method List</a>
32
+ <a id ="file_list_link" href="#">File List</a>
33
+ </div>
34
+
35
+ <div class="clear"></div>
36
+ </div>
37
+
38
+ <iframe id="search_frame"></iframe>
39
+
40
+ <div id="content"><h1>Exception: Kennedy::BadTicketException
41
+
42
+
43
+ </h1>
44
+
45
+ <dl class="box">
46
+
47
+ <dt class="r1">Inherits:</dt>
48
+ <dd class="r1">
49
+ <span class="inheritName">RuntimeError</span>
50
+
51
+ <ul class="fullTree">
52
+ <li>Object</li>
53
+
54
+ <li class="next">RuntimeError</li>
55
+
56
+ <li class="next">Kennedy::BadTicketException</li>
57
+
58
+ </ul>
59
+ <a href="#" class="inheritanceTree">show all</a>
60
+
61
+ </dd>
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+ <dt class="r2 last">Defined in:</dt>
71
+ <dd class="r2 last">lib/kennedy/ticket.rb</dd>
72
+
73
+ </dl>
74
+ <div class="clear"></div>
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+ </div>
84
+
85
+ <div id="footer">
86
+ Generated on Tue Dec 8 16:39:39 2009 by
87
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool">yard</a>
88
+ 0.4.0 (ruby-1.8.7).
89
+ </div>
90
+
91
+ </body>
92
+ </html>
@@ -0,0 +1,570 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=UTF-8" />
6
+ <title>Class: Kennedy::Granter</title>
7
+ <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="../css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '..';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <div id="header">
20
+ <div id="menu">
21
+
22
+ <a href="../_index.html">Index (G)</a> &raquo;
23
+ <a title="Kennedy" href="../Kennedy.html">Kennedy</a>
24
+ &raquo;
25
+ <span class="title">Granter</span>
26
+
27
+ </div>
28
+
29
+ <div id="search">
30
+ <a id="class_list_link" href="#">Namespace List</a>
31
+ <a id="method_list_link" href="#">Method List</a>
32
+ <a id ="file_list_link" href="#">File List</a>
33
+ </div>
34
+
35
+ <div class="clear"></div>
36
+ </div>
37
+
38
+ <iframe id="search_frame"></iframe>
39
+
40
+ <div id="content"><h1>Class: Kennedy::Granter
41
+
42
+
43
+ </h1>
44
+
45
+ <dl class="box">
46
+
47
+ <dt class="r1">Inherits:</dt>
48
+ <dd class="r1">
49
+ <span class="inheritName">Object</span>
50
+
51
+ </dd>
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+ <dt class="r2 last">Defined in:</dt>
61
+ <dd class="r2 last">lib/kennedy/granter.rb</dd>
62
+
63
+ </dl>
64
+ <div class="clear"></div>
65
+
66
+ <h2>Overview</h2><div class="docstring">
67
+ <div class="discussion">
68
+ <p>
69
+ Granter is used to authenticate credentials and grant tickets to services
70
+ once a client has been authenticated.
71
+ </p>
72
+
73
+
74
+ </div>
75
+ </div>
76
+ <div class="tags">
77
+
78
+ </div>
79
+
80
+
81
+ <h2>Method Summary</h2>
82
+ <ul class="summary">
83
+
84
+ <li class="public ">
85
+ <span class="summary_signature"><a title="#authenticate (instance method)" href="#authenticate-instance_method">- (true) <strong>authenticate</strong>(args = {}) </a>
86
+
87
+ </span>
88
+
89
+
90
+
91
+
92
+
93
+
94
+ <span class="summary_desc">
95
+ Authenticates the given credentials against the current backend.
96
+
97
+ </span>
98
+
99
+ </li>
100
+
101
+
102
+ <li class="public ">
103
+ <span class="summary_signature"><a title="#generate_ticket (instance method)" href="#generate_ticket-instance_method">- (Kennedy::Ticket) <strong>generate_ticket</strong>(args = {}) </a>
104
+
105
+ </span>
106
+
107
+
108
+
109
+
110
+
111
+
112
+ <span class="summary_desc">
113
+ Generates a ticket object to pass back to clients requesting
114
+ authentication.
115
+
116
+ </span>
117
+
118
+ </li>
119
+
120
+
121
+ <li class="public ">
122
+ <span class="summary_signature"><a title="#initialize (instance method)" href="#initialize-instance_method">- (Granter) <strong>initialize</strong>(args = {}) </a>
123
+
124
+ </span>
125
+
126
+
127
+
128
+
129
+
130
+
131
+ <span class="summary_desc">
132
+ A new instance of <tt>Granter</tt>.
133
+
134
+ </span>
135
+
136
+ </li>
137
+
138
+
139
+ <li class="public ">
140
+ <span class="summary_signature"><a title="#read_ticket (instance method)" href="#read_ticket-instance_method">- (Object) <strong>read_ticket</strong>(args = {}) </a>
141
+
142
+ </span>
143
+
144
+
145
+
146
+
147
+
148
+
149
+ <span class="summary_desc"></span>
150
+
151
+ </li>
152
+
153
+
154
+ </ul>
155
+
156
+ <div id="constructor_details">
157
+ <h2>Constructor Details</h2>
158
+
159
+ <div class="method_details first">
160
+ <p class="signature first" id="initialize-instance_method">
161
+
162
+ - (<tt><a title="Granter" href="">Granter</a></tt>) <strong>initialize</strong>(args = {})
163
+
164
+
165
+
166
+ </p><div class="docstring">
167
+ <div class="discussion">
168
+ <p>
169
+ A new instance of <tt>Granter</tt>
170
+ </p>
171
+
172
+
173
+ </div>
174
+ </div>
175
+ <div class="tags">
176
+ <h3>Parameters:</h3>
177
+ <ul class="param">
178
+
179
+ <li>
180
+
181
+ <span class='type'>(<tt>Hash</tt>)</span>
182
+
183
+
184
+ <span class='name'>args</span>
185
+
186
+
187
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
188
+
189
+
190
+ &mdash;
191
+
192
+ The arguments to create the granter with
193
+
194
+
195
+
196
+ </li>
197
+
198
+ </ul>
199
+
200
+
201
+
202
+
203
+ <h3>Options Hash (<tt>args</tt>):</h3>
204
+ <ul class="option">
205
+
206
+ <li>
207
+ <span class="type">(<tt>String</tt>)</span>
208
+ <span class="name">:iv</span>
209
+ <span class="default">
210
+
211
+ <span class="na">N/A</span>
212
+
213
+ </span>
214
+ &mdash;
215
+ The AES-256 initialization vector to use for encryption and decryption
216
+
217
+
218
+ </tr>
219
+
220
+ <li>
221
+ <span class="type">(<tt>String</tt>)</span>
222
+ <span class="name">:passphrase</span>
223
+ <span class="default">
224
+
225
+ <span class="na">N/A</span>
226
+
227
+ </span>
228
+ &mdash;
229
+ The AES-256 passphrase to use for encryption and decryption
230
+
231
+
232
+ </tr>
233
+
234
+ <li>
235
+ <span class="type">(<tt>Object</tt>)</span>
236
+ <span class="name">:backend</span>
237
+ <span class="default">
238
+
239
+ <span class="na">N/A</span>
240
+
241
+ </span>
242
+ &mdash;
243
+ An instance of a backend to use for authentication
244
+
245
+
246
+ </tr>
247
+
248
+ </ul>
249
+
250
+ <h3>Returns:</h3>
251
+ <ul class="return">
252
+
253
+ <li>
254
+
255
+ <span class='type'>(<tt><a title="Granter" href="">Granter</a></tt>)</span>
256
+
257
+
258
+
259
+
260
+ &mdash;
261
+
262
+ a new instance of <tt>Granter</tt>
263
+
264
+
265
+
266
+ </li>
267
+
268
+ </ul>
269
+
270
+ </div><table class="source_code">
271
+ <tr>
272
+ <td>
273
+ <pre class="lines">
274
+
275
+
276
+ 12
277
+ 13
278
+ 14
279
+ 15
280
+ 16</pre>
281
+ </td>
282
+ <td>
283
+ <pre class="code"><span class="info file"># File 'lib/kennedy/granter.rb', line 12</span>
284
+
285
+ <span class='def def kw'>def</span> <span class='initialize identifier id'>initialize</span><span class='lparen token'>(</span><span class='args identifier id'>args</span> <span class='assign token'>=</span> <span class='lbrace token'>{</span><span class='rbrace token'>}</span><span class='rparen token'>)</span>
286
+ <span class='@iv ivar id'>@iv</span> <span class='assign token'>=</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:iv</span><span class='rbrack token'>]</span> <span class='orop op'>||</span> <span class='raise identifier id'>raise</span><span class='lparen token'>(</span><span class='ArgumentError constant id'>ArgumentError</span><span class='comma token'>,</span> <span class='string val'>&quot;Encryption IV must be given as :iv&quot;</span><span class='rparen token'>)</span>
287
+ <span class='@passphrase ivar id'>@passphrase</span> <span class='assign token'>=</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:passphrase</span><span class='rbrack token'>]</span> <span class='orop op'>||</span> <span class='raise identifier id'>raise</span><span class='lparen token'>(</span><span class='ArgumentError constant id'>ArgumentError</span><span class='comma token'>,</span> <span class='string val'>&quot;Encryption passphrase must be given as :passphrase&quot;</span><span class='rparen token'>)</span>
288
+ <span class='@backend ivar id'>@backend</span> <span class='assign token'>=</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:backend</span><span class='rbrack token'>]</span> <span class='orop op'>||</span> <span class='raise identifier id'>raise</span><span class='lparen token'>(</span><span class='ArgumentError constant id'>ArgumentError</span><span class='comma token'>,</span> <span class='string val'>&quot;Authentication backend must be given as :backend&quot;</span><span class='rparen token'>)</span>
289
+ <span class='end end kw'>end</span>
290
+ </pre>
291
+ </td>
292
+ </tr>
293
+ </table>
294
+ </div>
295
+
296
+ </div>
297
+
298
+
299
+ <div id="method_details">
300
+ <h2>Method Details</h2>
301
+
302
+ <div class="method_details first">
303
+ <p class="signature first" id="authenticate-instance_method">
304
+
305
+ - (<tt>true</tt>) <strong>authenticate</strong>(args = {})
306
+
307
+
308
+
309
+ </p><div class="docstring">
310
+ <div class="discussion">
311
+ <p>
312
+ Authenticates the given credentials against the current backend
313
+ </p>
314
+
315
+
316
+ </div>
317
+ </div>
318
+ <div class="tags">
319
+ <h3>Parameters:</h3>
320
+ <ul class="param">
321
+
322
+ <li>
323
+
324
+ <span class='type'>(<tt>Hash</tt>)</span>
325
+
326
+
327
+ <span class='name'>args</span>
328
+
329
+
330
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
331
+
332
+
333
+ &mdash;
334
+
335
+ The arguments to authenticate with
336
+
337
+
338
+
339
+ </li>
340
+
341
+ </ul>
342
+
343
+
344
+
345
+
346
+ <h3>Options Hash (<tt>args</tt>):</h3>
347
+ <ul class="option">
348
+
349
+ <li>
350
+ <span class="type">(<tt>String</tt>)</span>
351
+ <span class="name">:identifier</span>
352
+ <span class="default">
353
+
354
+ <span class="na">N/A</span>
355
+
356
+ </span>
357
+ &mdash;
358
+ The identifier (email address, for example) to use for authentication
359
+
360
+
361
+ </tr>
362
+
363
+ <li>
364
+ <span class="type">(<tt>String</tt>)</span>
365
+ <span class="name">:password</span>
366
+ <span class="default">
367
+
368
+ <span class="na">N/A</span>
369
+
370
+ </span>
371
+ &mdash;
372
+ The password to use for authentication
373
+
374
+
375
+ </tr>
376
+
377
+ </ul>
378
+
379
+ <h3>Returns:</h3>
380
+ <ul class="return">
381
+
382
+ <li>
383
+
384
+ <span class='type'>(<tt>true</tt>, <tt>false</tt>)</span>
385
+
386
+
387
+
388
+
389
+ &mdash;
390
+
391
+ A boolean indication of whether authentication was successful or not
392
+
393
+
394
+
395
+ </li>
396
+
397
+ </ul>
398
+
399
+ </div><table class="source_code">
400
+ <tr>
401
+ <td>
402
+ <pre class="lines">
403
+
404
+
405
+ 23
406
+ 24
407
+ 25</pre>
408
+ </td>
409
+ <td>
410
+ <pre class="code"><span class="info file"># File 'lib/kennedy/granter.rb', line 23</span>
411
+
412
+ <span class='def def kw'>def</span> <span class='authenticate identifier id'>authenticate</span><span class='lparen token'>(</span><span class='args identifier id'>args</span> <span class='assign token'>=</span> <span class='lbrace token'>{</span><span class='rbrace token'>}</span><span class='rparen token'>)</span>
413
+ <span class='notop op'>!</span><span class='notop op'>!</span><span class='@backend ivar id'>@backend</span><span class='dot token'>.</span><span class='authenticate identifier id'>authenticate</span><span class='lparen token'>(</span><span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:identifier</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:password</span><span class='rbrack token'>]</span><span class='rparen token'>)</span>
414
+ <span class='end end kw'>end</span>
415
+ </pre>
416
+ </td>
417
+ </tr>
418
+ </table>
419
+ </div>
420
+
421
+ <div class="method_details ">
422
+ <p class="signature " id="generate_ticket-instance_method">
423
+
424
+ - (<tt><a title="Kennedy::Ticket" href="Ticket.html">Kennedy::Ticket</a></tt>) <strong>generate_ticket</strong>(args = {})
425
+
426
+
427
+
428
+ </p><div class="docstring">
429
+ <div class="discussion">
430
+ <p>
431
+ Generates a ticket object to pass back to clients requesting authentication
432
+ </p>
433
+
434
+
435
+ </div>
436
+ </div>
437
+ <div class="tags">
438
+ <h3>Parameters:</h3>
439
+ <ul class="param">
440
+
441
+ <li>
442
+
443
+ <span class='type'>(<tt>Hash</tt>)</span>
444
+
445
+
446
+ <span class='name'>args</span>
447
+
448
+
449
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
450
+
451
+
452
+ &mdash;
453
+
454
+ The arguments to generate the ticket with
455
+
456
+
457
+
458
+ </li>
459
+
460
+ </ul>
461
+
462
+
463
+
464
+
465
+ <h3>Options Hash (<tt>args</tt>):</h3>
466
+ <ul class="option">
467
+
468
+ <li>
469
+ <span class="type">(<tt>String</tt>)</span>
470
+ <span class="name">:identifier</span>
471
+ <span class="default">
472
+
473
+ <span class="na">N/A</span>
474
+
475
+ </span>
476
+ &mdash;
477
+ The identifier (email address, for example) the ticket grants access for
478
+
479
+
480
+ </tr>
481
+
482
+ </ul>
483
+
484
+ <h3>Returns:</h3>
485
+ <ul class="return">
486
+
487
+ <li>
488
+
489
+ <span class='type'>(<tt><a title="Kennedy::Ticket" href="Ticket.html">Kennedy::Ticket</a></tt>)</span>
490
+
491
+
492
+
493
+
494
+ &mdash;
495
+
496
+ A Kennedy::Ticket object
497
+
498
+
499
+
500
+ </li>
501
+
502
+ </ul>
503
+
504
+ </div><table class="source_code">
505
+ <tr>
506
+ <td>
507
+ <pre class="lines">
508
+
509
+
510
+ 31
511
+ 32
512
+ 33
513
+ 34</pre>
514
+ </td>
515
+ <td>
516
+ <pre class="code"><span class="info file"># File 'lib/kennedy/granter.rb', line 31</span>
517
+
518
+ <span class='def def kw'>def</span> <span class='generate_ticket identifier id'>generate_ticket</span><span class='lparen token'>(</span><span class='args identifier id'>args</span> <span class='assign token'>=</span> <span class='lbrace token'>{</span><span class='rbrace token'>}</span><span class='rparen token'>)</span>
519
+ <span class='identifier identifier id'>identifier</span> <span class='assign token'>=</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:identifier</span><span class='rbrack token'>]</span> <span class='orop op'>||</span> <span class='raise identifier id'>raise</span><span class='lparen token'>(</span><span class='ArgumentError constant id'>ArgumentError</span><span class='comma token'>,</span> <span class='string val'>&quot;An identifier must be given as :identifier&quot;</span><span class='rparen token'>)</span>
520
+ <span class='new_ticket identifier id'>new_ticket</span><span class='lparen token'>(</span><span class='identifier identifier id'>identifier</span><span class='rparen token'>)</span>
521
+ <span class='end end kw'>end</span>
522
+ </pre>
523
+ </td>
524
+ </tr>
525
+ </table>
526
+ </div>
527
+
528
+ <div class="method_details ">
529
+ <p class="signature " id="read_ticket-instance_method">
530
+
531
+ - (<tt>Object</tt>) <strong>read_ticket</strong>(args = {})
532
+
533
+
534
+
535
+ </p><table class="source_code">
536
+ <tr>
537
+ <td>
538
+ <pre class="lines">
539
+
540
+
541
+ 36
542
+ 37
543
+ 38
544
+ 39</pre>
545
+ </td>
546
+ <td>
547
+ <pre class="code"><span class="info file"># File 'lib/kennedy/granter.rb', line 36</span>
548
+
549
+ <span class='def def kw'>def</span> <span class='read_ticket identifier id'>read_ticket</span><span class='lparen token'>(</span><span class='args identifier id'>args</span> <span class='assign token'>=</span> <span class='lbrace token'>{</span><span class='rbrace token'>}</span><span class='rparen token'>)</span>
550
+ <span class='data identifier id'>data</span> <span class='assign token'>=</span> <span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:data</span><span class='rbrack token'>]</span> <span class='orop op'>||</span> <span class='raise identifier id'>raise</span><span class='lparen token'>(</span><span class='ArgumentError constant id'>ArgumentError</span><span class='comma token'>,</span> <span class='string val'>&quot;Data must be given as :data&quot;</span><span class='rparen token'>)</span>
551
+ <span class='decrypt_ticket identifier id'>decrypt_ticket</span><span class='lparen token'>(</span><span class='args identifier id'>args</span><span class='lbrack token'>[</span><span class='symbol val'>:data</span><span class='rbrack token'>]</span><span class='rparen token'>)</span>
552
+ <span class='end end kw'>end</span>
553
+ </pre>
554
+ </td>
555
+ </tr>
556
+ </table>
557
+ </div>
558
+
559
+ </div>
560
+
561
+ </div>
562
+
563
+ <div id="footer">
564
+ Generated on Tue Dec 8 16:39:39 2009 by
565
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool">yard</a>
566
+ 0.4.0 (ruby-1.8.7).
567
+ </div>
568
+
569
+ </body>
570
+ </html>