classx-pluggable 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 (42) hide show
  1. data/ChangeLog +221 -0
  2. data/README +88 -0
  3. data/Rakefile +52 -0
  4. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-attribute_rb.html +925 -0
  5. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-attributes_rb.html +772 -0
  6. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-bracketable_rb.html +671 -0
  7. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-role-logger_rb.html +716 -0
  8. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-validate_rb.html +663 -0
  9. data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx_rb.html +820 -0
  10. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html +661 -0
  11. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +932 -0
  12. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +779 -0
  13. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +867 -0
  14. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +1715 -0
  15. data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1598 -0
  16. data/doc/output/coverage/examples-test_runner-bin-test_runner_rb.html +628 -0
  17. data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-setup_fixture_rb.html +641 -0
  18. data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-test_info_rb.html +638 -0
  19. data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-test_timer_rb.html +666 -0
  20. data/doc/output/coverage/examples-test_runner-lib-test_runner_rb.html +643 -0
  21. data/doc/output/coverage/index.html +711 -0
  22. data/doc/output/coverage/lib-classx-pluggable-plugin_rb.html +676 -0
  23. data/doc/output/coverage/lib-classx-pluggable_rb.html +841 -0
  24. data/examples/test_runner/bin/test_runner.rb +18 -0
  25. data/examples/test_runner/conf/config.yaml +19 -0
  26. data/examples/test_runner/lib/test_runner.rb +33 -0
  27. data/examples/test_runner/lib/test_runner/plugin/setup_fixture.rb +31 -0
  28. data/examples/test_runner/lib/test_runner/plugin/test_info.rb +28 -0
  29. data/examples/test_runner/lib/test_runner/plugin/test_timer.rb +56 -0
  30. data/lib/classx/pluggable.rb +231 -0
  31. data/lib/classx/pluggable/plugin.rb +66 -0
  32. data/spec/classx-pluggable-util/module2path_spec.rb +30 -0
  33. data/spec/classx-pluggable-util/nested_autoload_spec.rb +48 -0
  34. data/spec/classx-pluggable-util/nested_const_get_spec.rb +48 -0
  35. data/spec/classx-pluggable/component_class_get.rb +18 -0
  36. data/spec/classx-pluggable_spec.rb +5 -0
  37. data/spec/example_spec.rb +20 -0
  38. data/spec/spec.opts +1 -0
  39. data/spec/spec_helper.rb +6 -0
  40. data/tasks/basic_config.rake +22 -0
  41. data/tasks/basic_tasks.rake +139 -0
  42. metadata +127 -0
@@ -0,0 +1,820 @@
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/gems/classx-0.0.5/lib/classx.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 Nov 08 17:43:41 +0900 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-gems-classx-0_0_5-lib-classx_rb.html'>/Library/Ruby/Gems/gems/classx-0.0.5/lib/classx.rb</a>
573
+ </td>
574
+ <td class='lines_total'><tt>210</tt>
575
+ </td>
576
+ <td class='lines_code'><tt>136</tt>
577
+ </td>
578
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>75.7%</tt>
579
+ &nbsp;</td>
580
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='76'/>
581
+ <td class='uncovered' width='24'/>
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'>64.7%</tt>
589
+ &nbsp;</td>
590
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='65'/>
591
+ <td class='uncovered' width='35'/>
592
+ </tr>
593
+ </table>
594
+ </td>
595
+ </tr>
596
+ </table>
597
+ </td>
598
+ </tr>
599
+ </tbody>
600
+ </table>
601
+ <pre><span class="marked1"><a name="line1"></a> 1 require 'classx/attribute'
602
+ </span><span class="marked0"><a name="line2"></a> 2 require 'classx/attributes'
603
+ </span><span class="inferred1"><a name="line3"></a> 3
604
+ </span><span class="inferred0"><a name="line4"></a> 4 # usage
605
+ </span><span class="inferred1"><a name="line5"></a> 5 #
606
+ </span><span class="inferred0"><a name="line6"></a> 6 # require 'classx'
607
+ </span><span class="inferred1"><a name="line7"></a> 7 # class Point
608
+ </span><span class="inferred0"><a name="line8"></a> 8 # include ClassX
609
+ </span><span class="inferred1"><a name="line9"></a> 9 #
610
+ </span><span class="inferred0"><a name="line10"></a> 10 # has :x, :kind_of =&gt; Fixnum
611
+ </span><span class="inferred1"><a name="line11"></a> 11 # has :y, :kind_of =&gt; Fixnum
612
+ </span><span class="inferred0"><a name="line12"></a> 12 # end
613
+ </span><span class="inferred1"><a name="line13"></a> 13 #
614
+ </span><span class="inferred0"><a name="line14"></a> 14 # class Point3D &lt; Point
615
+ </span><span class="inferred1"><a name="line15"></a> 15 # has :z, :writable =&gt; true, :kind_of =&gt; Fixnum, :optional =&gt; true
616
+ </span><span class="inferred0"><a name="line16"></a> 16 # end
617
+ </span><span class="inferred1"><a name="line17"></a> 17 #
618
+ </span><span class="inferred0"><a name="line18"></a> 18 # Point.new(:x =&gt; 30, :y =&gt; 40) #=&gt; &lt;# Point @x=30, @y=40 &gt;
619
+ </span><span class="inferred1"><a name="line19"></a> 19 # point3d = Point3D.new(:x =&gt; 30, :y =&gt; 40, :z =&gt; 50) #=&gt; &lt;# Point3D @x=30, @y=40, @z=50 &gt;
620
+ </span><span class="inferred0"><a name="line20"></a> 20 # point3d.z = 60.0 # raise ClassX::InvalidAttrArgument
621
+ </span><span class="marked1"><a name="line21"></a> 21 module ClassX
622
+ </span><span class="marked0"><a name="line22"></a> 22 autoload :ClassAttributes, 'classx/class_attributes'
623
+ </span><span class="marked1"><a name="line23"></a> 23 autoload :CAttrs, 'classx/class_attributes'
624
+ </span><span class="marked0"><a name="line24"></a> 24 autoload :Validate, 'classx/validate'
625
+ </span><span class="marked1"><a name="line25"></a> 25 autoload :Commandable, 'classx/commandable'
626
+ </span><span class="marked0"><a name="line26"></a> 26 autoload :Declare, 'classx/declare'
627
+ </span><span class="marked1"><a name="line27"></a> 27 autoload :Bracketable, 'classx/bracketable'
628
+ </span><span class="marked0"><a name="line28"></a> 28 module Role
629
+ </span><span class="marked1"><a name="line29"></a> 29 autoload :Logger, 'classx/role/logger'
630
+ </span><span class="inferred0"><a name="line30"></a> 30 end
631
+ </span><span class="inferred1"><a name="line31"></a> 31
632
+ </span><span class="marked0"><a name="line32"></a> 32 MODULE_USAGE_MAP_OF = {
633
+ </span><span class="inferred1"><a name="line33"></a> 33 :ClassAttributes =&gt; :extend,
634
+ </span><span class="inferred0"><a name="line34"></a> 34 :CAttrs =&gt; :extend,
635
+ </span><span class="inferred1"><a name="line35"></a> 35 :Commandable =&gt; :extend,
636
+ </span><span class="inferred0"><a name="line36"></a> 36 :Declare =&gt; :extend,
637
+ </span><span class="inferred1"><a name="line37"></a> 37 :Bracketable =&gt; :include,
638
+ </span><span class="inferred0"><a name="line38"></a> 38 :Validate =&gt; :include,
639
+ </span><span class="inferred1"><a name="line39"></a> 39 }
640
+ </span><span class="inferred0"><a name="line40"></a> 40
641
+ </span><span class="marked1"><a name="line41"></a> 41 class InstanceException &lt; Exception; end
642
+ </span><span class="marked0"><a name="line42"></a> 42 class AttrRequiredError &lt; InstanceException; end
643
+ </span><span class="marked1"><a name="line43"></a> 43 class InvalidAttrArgument &lt; InstanceException; end
644
+ </span><span class="marked0"><a name="line44"></a> 44 class LazyOptionShouldHaveDefault &lt; Exception; end
645
+ </span><span class="marked1"><a name="line45"></a> 45 class OptionalAttrShouldBeWritable &lt; Exception; end
646
+ </span><span class="marked0"><a name="line46"></a> 46 class RequiredAttrShouldNotHaveDefault &lt; Exception; end
647
+ </span><span class="inferred1"><a name="line47"></a> 47
648
+ </span><span class="inferred0"><a name="line48"></a> 48 # *args is Hash in default.
649
+ </span><span class="inferred1"><a name="line49"></a> 49 # Hash should have attribute's key and valid value for attribute.
650
+ </span><span class="inferred0"><a name="line50"></a> 50 # This method checking required value is setted and taking value is valid to attribute.
651
+ </span><span class="inferred1"><a name="line51"></a> 51 #
652
+ </span><span class="marked0"><a name="line52"></a> 52 def initialize *args
653
+ </span><span class="marked1"><a name="line53"></a> 53 if respond_to? :before_init
654
+ </span><span class="uncovered0"><a name="line54"></a> 54 warn 'before_init is deprecated. please define process_init_args class method'
655
+ </span><span class="inferred1"><a name="line55"></a> 55 else
656
+ </span><span class="marked0"><a name="line56"></a> 56 hash = self.class.process_init_args(*args)
657
+ </span><span class="inferred1"><a name="line57"></a> 57 end
658
+ </span><span class="inferred0"><a name="line58"></a> 58
659
+ </span><span class="marked1"><a name="line59"></a> 59 unless hash &amp;&amp; hash.kind_of?(Hash)
660
+ </span><span class="uncovered0"><a name="line60"></a> 60 raise ArgumentError, &quot;#{hash.inspect} was wrong as arguments. please specify kind of Hash instance&quot;
661
+ </span><span class="uncovered1"><a name="line61"></a> 61 end
662
+ </span><span class="inferred0"><a name="line62"></a> 62
663
+ </span><span class="inferred1"><a name="line63"></a> 63 # allow String or Symbol for key
664
+ </span><span class="marked0"><a name="line64"></a> 64 tmp_hash = {}
665
+ </span><span class="marked1"><a name="line65"></a> 65 hash.each do |key,val|
666
+ </span><span class="marked0"><a name="line66"></a> 66 tmp_hash[key.to_s] = val
667
+ </span><span class="inferred1"><a name="line67"></a> 67 end
668
+ </span><span class="marked0"><a name="line68"></a> 68 hash = tmp_hash
669
+ </span><span class="inferred1"><a name="line69"></a> 69
670
+ </span><span class="marked0"><a name="line70"></a> 70 hash.each do |key, val|
671
+ </span><span class="marked1"><a name="line71"></a> 71 if attribute_of[key]
672
+ </span><span class="marked0"><a name="line72"></a> 72 attribute_of[key].set val
673
+ </span><span class="inferred1"><a name="line73"></a> 73 end
674
+ </span><span class="inferred0"><a name="line74"></a> 74 end
675
+ </span><span class="inferred1"><a name="line75"></a> 75
676
+ </span><span class="marked0"><a name="line76"></a> 76 attribute_of.each do |key, val|
677
+ </span><span class="marked1"><a name="line77"></a> 77 next if val.class.lazy?
678
+ </span><span class="marked0"><a name="line78"></a> 78 raise AttrRequiredError, &quot;param: :#{key} is required to #{hash.inspect}&quot; if !val.class.optional? &amp;&amp; !val.get
679
+ </span><span class="inferred1"><a name="line79"></a> 79 end
680
+ </span><span class="inferred0"><a name="line80"></a> 80
681
+ </span><span class="marked1"><a name="line81"></a> 81 after_init
682
+ </span><span class="inferred0"><a name="line82"></a> 82 end
683
+ </span><span class="inferred1"><a name="line83"></a> 83
684
+ </span><span class="inferred0"><a name="line84"></a> 84 # return Hash of attribute's name as a key and attribute's meta class instance as a value.
685
+ </span><span class="inferred1"><a name="line85"></a> 85 # for example,
686
+ </span><span class="inferred0"><a name="line86"></a> 86 #
687
+ </span><span class="inferred1"><a name="line87"></a> 87 # class YourClass
688
+ </span><span class="inferred0"><a name="line88"></a> 88 # include ClassX
689
+ </span><span class="inferred1"><a name="line89"></a> 89 # has :x
690
+ </span><span class="inferred0"><a name="line90"></a> 90 # end
691
+ </span><span class="inferred1"><a name="line91"></a> 91 #
692
+ </span><span class="inferred0"><a name="line92"></a> 92 # obj = YourClass.new(:x =&gt; 10)
693
+ </span><span class="inferred1"><a name="line93"></a> 93 # obj.attribute_of #=&gt; { &quot;x&quot; =&gt; &lt;#&lt;ClassX::Attribute&gt; parent=&lt;# YourClass&gt; ... &gt; }
694
+ </span><span class="inferred0"><a name="line94"></a> 94 #
695
+ </span><span class="marked1"><a name="line95"></a> 95 def attribute_of
696
+ </span><span class="marked0"><a name="line96"></a> 96 unless instance_variable_defined?('@__attribute_of') &amp;&amp; @__attribute_of
697
+ </span><span class="marked1"><a name="line97"></a> 97 @__attribute_of = {}
698
+ </span><span class="marked0"><a name="line98"></a> 98 if self.class.attribute_of
699
+ </span><span class="marked1"><a name="line99"></a> 99 self.class.attribute_of.keys.each do |key|
700
+ </span><span class="marked0"><a name="line100"></a>100 @__attribute_of[key] = __send__ &quot;attribute_of:#{key}&quot;
701
+ </span><span class="inferred1"><a name="line101"></a>101 end
702
+ </span><span class="inferred0"><a name="line102"></a>102 end
703
+ </span><span class="inferred1"><a name="line103"></a>103 end
704
+ </span><span class="inferred0"><a name="line104"></a>104
705
+ </span><span class="marked1"><a name="line105"></a>105 @__attribute_of
706
+ </span><span class="inferred0"><a name="line106"></a>106 end
707
+ </span><span class="inferred1"><a name="line107"></a>107
708
+ </span><span class="inferred0"><a name="line108"></a>108 # automatically called this method on last of #initialize.
709
+ </span><span class="inferred1"><a name="line109"></a>109 # you can override this method.
710
+ </span><span class="marked0"><a name="line110"></a>110 def after_init
711
+ </span><span class="marked1"><a name="line111"></a>111 end
712
+ </span><span class="inferred0"><a name="line112"></a>112
713
+ </span><span class="inferred1"><a name="line113"></a>113 # shared implementation for comparing classx based object.
714
+ </span><span class="marked0"><a name="line114"></a>114 def == other
715
+ </span><span class="uncovered1"><a name="line115"></a>115 return false unless other.kind_of? self.class
716
+ </span><span class="uncovered0"><a name="line116"></a>116 attribute_of.all? do |key, val|
717
+ </span><span class="uncovered1"><a name="line117"></a>117 val.get == other.__send__(key)
718
+ </span><span class="uncovered0"><a name="line118"></a>118 end
719
+ </span><span class="uncovered1"><a name="line119"></a>119 end
720
+ </span><span class="inferred0"><a name="line120"></a>120
721
+ </span><span class="marked1"><a name="line121"></a>121 UNSERIALIZE_INSTANCE_VARIABLES = [&quot;@__attribute_of&quot;, &quot;@__attribute_data_of&quot;]
722
+ </span><span class="inferred0"><a name="line122"></a>122
723
+ </span><span class="inferred1"><a name="line123"></a>123 # convert attribute key and value to Hash.
724
+ </span><span class="marked0"><a name="line124"></a>124 def to_hash
725
+ </span><span class="marked1"><a name="line125"></a>125 result = {}
726
+ </span><span class="inferred0"><a name="line126"></a>126
727
+ </span><span class="marked1"><a name="line127"></a>127 attribute_of.each do |key, val|
728
+ </span><span class="marked0"><a name="line128"></a>128 result[key] = val.get
729
+ </span><span class="inferred1"><a name="line129"></a>129 end
730
+ </span><span class="inferred0"><a name="line130"></a>130
731
+ </span><span class="marked1"><a name="line131"></a>131 result
732
+ </span><span class="inferred0"><a name="line132"></a>132 end
733
+ </span><span class="inferred1"><a name="line133"></a>133
734
+ </span><span class="inferred0"><a name="line134"></a>134 # dupping classx based class.
735
+ </span><span class="marked1"><a name="line135"></a>135 def dup
736
+ </span><span class="uncovered0"><a name="line136"></a>136 self.class.new(to_hash)
737
+ </span><span class="uncovered1"><a name="line137"></a>137 end
738
+ </span><span class="inferred0"><a name="line138"></a>138
739
+ </span><span class="inferred1"><a name="line139"></a>139 # for Marshal.dump
740
+ </span><span class="marked0"><a name="line140"></a>140 def marshal_dump
741
+ </span><span class="uncovered1"><a name="line141"></a>141 dump_of = {}
742
+ </span><span class="uncovered0"><a name="line142"></a>142 dump_of[:attribute_of] = to_hash
743
+ </span><span class="uncovered1"><a name="line143"></a>143 dump_of[:instance_variable_of] = {}
744
+ </span><span class="uncovered0"><a name="line144"></a>144 ( instance_variables.map {|ival| ival.to_s } - UNSERIALIZE_INSTANCE_VARIABLES ).each do |ival|
745
+ </span><span class="uncovered1"><a name="line145"></a>145 dump_of[:instance_variable_of][ival] = instance_variable_get(ival)
746
+ </span><span class="uncovered0"><a name="line146"></a>146 end
747
+ </span><span class="uncovered1"><a name="line147"></a>147
748
+ </span><span class="uncovered0"><a name="line148"></a>148 dump_of
749
+ </span><span class="uncovered1"><a name="line149"></a>149 end
750
+ </span><span class="inferred0"><a name="line150"></a>150
751
+ </span><span class="inferred1"><a name="line151"></a>151 # for Marshal.load
752
+ </span><span class="marked0"><a name="line152"></a>152 def marshal_load val
753
+ </span><span class="uncovered1"><a name="line153"></a>153 self.attribute_of.each do |k, v|
754
+ </span><span class="uncovered0"><a name="line154"></a>154 v.set(val[:attribute_of][k])
755
+ </span><span class="uncovered1"><a name="line155"></a>155 end
756
+ </span><span class="uncovered0"><a name="line156"></a>156 val[:instance_variable_of].each do |key, val|
757
+ </span><span class="uncovered1"><a name="line157"></a>157 instance_variable_set(key, val)
758
+ </span><span class="uncovered0"><a name="line158"></a>158 end
759
+ </span><span class="uncovered1"><a name="line159"></a>159 end
760
+ </span><span class="inferred0"><a name="line160"></a>160
761
+ </span><span class="inferred1"><a name="line161"></a>161 # for YAML.dump
762
+ </span><span class="marked0"><a name="line162"></a>162 def to_yaml opts={}
763
+ </span><span class="uncovered1"><a name="line163"></a>163 require 'yaml'
764
+ </span><span class="uncovered0"><a name="line164"></a>164 YAML.quick_emit(self, opts) do |out|
765
+ </span><span class="uncovered1"><a name="line165"></a>165 out.map( taguri, to_yaml_style ) do |map|
766
+ </span><span class="uncovered0"><a name="line166"></a>166 attribute_of = {}
767
+ </span><span class="uncovered1"><a name="line167"></a>167 to_hash.each do |key, val|
768
+ </span><span class="uncovered0"><a name="line168"></a>168 attribute_of[key] = val
769
+ </span><span class="uncovered1"><a name="line169"></a>169 end
770
+ </span><span class="uncovered0"><a name="line170"></a>170 map.add(:attribute_of, attribute_of)
771
+ </span><span class="uncovered1"><a name="line171"></a>171
772
+ </span><span class="uncovered0"><a name="line172"></a>172 instance_variable_of = {}
773
+ </span><span class="uncovered1"><a name="line173"></a>173 ( instance_variables.map {|ival| ival.to_s } - UNSERIALIZE_INSTANCE_VARIABLES ).each do |ival|
774
+ </span><span class="uncovered0"><a name="line174"></a>174 instance_variable_of[ival] = instance_variable_get(ival)
775
+ </span><span class="uncovered1"><a name="line175"></a>175 end
776
+ </span><span class="uncovered0"><a name="line176"></a>176 map.add(:instance_variable_of, instance_variable_of)
777
+ </span><span class="uncovered1"><a name="line177"></a>177 end
778
+ </span><span class="uncovered0"><a name="line178"></a>178 end
779
+ </span><span class="uncovered1"><a name="line179"></a>179 end
780
+ </span><span class="inferred0"><a name="line180"></a>180
781
+ </span><span class="inferred1"><a name="line181"></a>181 # for YAML.load
782
+ </span><span class="marked0"><a name="line182"></a>182 def yaml_initialize tag, val
783
+ </span><span class="uncovered1"><a name="line183"></a>183 self.attribute_of.each do |k, v|
784
+ </span><span class="uncovered0"><a name="line184"></a>184 v.set(val[:attribute_of][k])
785
+ </span><span class="uncovered1"><a name="line185"></a>185 end
786
+ </span><span class="uncovered0"><a name="line186"></a>186
787
+ </span><span class="uncovered1"><a name="line187"></a>187 val[:instance_variable_of].each do |k, v|
788
+ </span><span class="uncovered0"><a name="line188"></a>188 instance_variable_set(k, v)
789
+ </span><span class="uncovered1"><a name="line189"></a>189 end
790
+ </span><span class="uncovered0"><a name="line190"></a>190 end
791
+ </span><span class="inferred1"><a name="line191"></a>191
792
+ </span><span class="marked0"><a name="line192"></a>192 module ClassMethods
793
+ </span><span class="inferred1"><a name="line193"></a>193 # processing initialize argument to hash
794
+ </span><span class="inferred0"><a name="line194"></a>194 # you can override this method for not taking initializer your classx based class.
795
+ </span><span class="marked1"><a name="line195"></a>195 def process_init_args *args
796
+ </span><span class="marked0"><a name="line196"></a>196 raise ArgumentError if args.size &gt; 1
797
+ </span><span class="inferred1"><a name="line197"></a>197
798
+ </span><span class="marked0"><a name="line198"></a>198 hash = args.first
799
+ </span><span class="marked1"><a name="line199"></a>199 hash.nil? ? {} : hash
800
+ </span><span class="inferred0"><a name="line200"></a>200 end
801
+ </span><span class="inferred1"><a name="line201"></a>201 end
802
+ </span><span class="inferred0"><a name="line202"></a>202
803
+ </span><span class="marked1"><a name="line203"></a>203 private
804
+ </span><span class="inferred0"><a name="line204"></a>204
805
+ </span><span class="marked1"><a name="line205"></a>205 def self.included klass
806
+ </span><span class="marked0"><a name="line206"></a>206 klass.extend(Attributes)
807
+ </span><span class="marked1"><a name="line207"></a>207 klass.extend(ClassMethods)
808
+ </span><span class="inferred0"><a name="line208"></a>208 end
809
+ </span><span class="inferred1"><a name="line209"></a>209
810
+ </span><span class="inferred0"><a name="line210"></a>210 end
811
+ </span></pre><hr/>
812
+ <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
813
+ version 0.8.1.2.</p>
814
+ <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'/>
815
+ </a>
816
+ <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'/>
817
+ </a>
818
+ </p>
819
+ </body>
820
+ </html>