kennedy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>