classx 0.0.4 → 0.0.5

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.
@@ -1,896 +0,0 @@
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>lib/classx/attribute.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 Sep 13 00:31:29 +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='lib-classx-attribute_rb.html'>lib/classx/attribute.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>286</tt>
575
- </td>
576
- <td class='lines_code'><tt>221</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.6%</tt>
579
- &nbsp;</td>
580
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
581
- <td class='uncovered' width='1'/>
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'>98.2%</tt>
589
- &nbsp;</td>
590
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='98'/>
591
- <td class='uncovered' width='2'/>
592
- </tr>
593
- </table>
594
- </td>
595
- </tr>
596
- </table>
597
- </td>
598
- </tr>
599
- </tbody>
600
- </table>
601
- <pre><span class="marked0"><a name="line1"></a> 1 module ClassX
602
- </span><span class="marked1"><a name="line2"></a> 2 module AttributeMethods #:nodoc:
603
- </span><span class="marked0"><a name="line3"></a> 3 module ClassMethods #:nodoc:
604
- </span><span class="marked1"><a name="line4"></a> 4 def value_class
605
- </span><span class="marked0"><a name="line5"></a> 5 config[:isa] || config[:kind_of]
606
- </span><span class="marked1"><a name="line6"></a> 6 end
607
- </span><span class="inferred0"><a name="line7"></a> 7
608
- </span><span class="inferred1"><a name="line8"></a> 8 # description for attribute
609
- </span><span class="marked0"><a name="line9"></a> 9 def desc
610
- </span><span class="uncovered1"><a name="line10"></a> 10 config[:desc]
611
- </span><span class="uncovered0"><a name="line11"></a> 11 end
612
- </span><span class="inferred1"><a name="line12"></a> 12
613
- </span><span class="inferred0"><a name="line13"></a> 13 # when this option specify true, not raise error in #initialize without value.
614
- </span><span class="marked1"><a name="line14"></a> 14 def optional?
615
- </span><span class="marked0"><a name="line15"></a> 15 return config[:optional]
616
- </span><span class="marked1"><a name="line16"></a> 16 end
617
- </span><span class="inferred0"><a name="line17"></a> 17
618
- </span><span class="inferred1"><a name="line18"></a> 18 # when it lazy option specified, it will not be initialized when #initialize.
619
- </span><span class="marked0"><a name="line19"></a> 19 def lazy?
620
- </span><span class="marked1"><a name="line20"></a> 20 return config[:lazy]
621
- </span><span class="marked0"><a name="line21"></a> 21 end
622
- </span><span class="inferred1"><a name="line22"></a> 22
623
- </span><span class="marked0"><a name="line23"></a> 23 def inspect
624
- </span><span class="uncovered1"><a name="line24"></a> 24 &quot;ClassX::Attribute[#{self.config.inspect}]&quot;
625
- </span><span class="uncovered0"><a name="line25"></a> 25 end
626
- </span><span class="inferred1"><a name="line26"></a> 26
627
- </span><span class="marked0"><a name="line27"></a> 27 module CoerceWithHash #:nodoc:
628
- </span><span class="marked1"><a name="line28"></a> 28 def coerce val
629
- </span><span class="marked0"><a name="line29"></a> 29 result = val
630
- </span><span class="marked1"><a name="line30"></a> 30 config[:coerce].each do |cond, rule|
631
- </span><span class="marked0"><a name="line31"></a> 31 case cond
632
- </span><span class="marked1"><a name="line32"></a> 32 when Proc
633
- </span><span class="marked0"><a name="line33"></a> 33 if cond.call(val)
634
- </span><span class="marked1"><a name="line34"></a> 34 result = rule.call(val)
635
- </span><span class="marked0"><a name="line35"></a> 35 break
636
- </span><span class="inferred1"><a name="line36"></a> 36 end
637
- </span><span class="marked0"><a name="line37"></a> 37 when Symbol
638
- </span><span class="marked1"><a name="line38"></a> 38 if val.respond_to? cond
639
- </span><span class="marked0"><a name="line39"></a> 39 result = rule.call(val)
640
- </span><span class="marked1"><a name="line40"></a> 40 break
641
- </span><span class="inferred0"><a name="line41"></a> 41 end
642
- </span><span class="marked1"><a name="line42"></a> 42 when Module
643
- </span><span class="marked0"><a name="line43"></a> 43 if val.kind_of? cond
644
- </span><span class="marked1"><a name="line44"></a> 44 result = rule.call(val)
645
- </span><span class="marked0"><a name="line45"></a> 45 break
646
- </span><span class="inferred1"><a name="line46"></a> 46 end
647
- </span><span class="inferred0"><a name="line47"></a> 47 end
648
- </span><span class="inferred1"><a name="line48"></a> 48 end
649
- </span><span class="inferred0"><a name="line49"></a> 49
650
- </span><span class="marked1"><a name="line50"></a> 50 return result
651
- </span><span class="inferred0"><a name="line51"></a> 51 end
652
- </span><span class="inferred1"><a name="line52"></a> 52 end
653
- </span><span class="marked0"><a name="line53"></a> 53 module CoerceWithArray #:nodoc:
654
- </span><span class="marked1"><a name="line54"></a> 54 def coerce val
655
- </span><span class="marked0"><a name="line55"></a> 55 result = val
656
- </span><span class="marked1"><a name="line56"></a> 56 config[:coerce].each do |item|
657
- </span><span class="marked0"><a name="line57"></a> 57 raise unless item.kind_of? Hash
658
- </span><span class="inferred1"><a name="line58"></a> 58
659
- </span><span class="marked0"><a name="line59"></a> 59 case item
660
- </span><span class="marked1"><a name="line60"></a> 60 when Hash
661
- </span><span class="marked0"><a name="line61"></a> 61 item.each do |cond, rule|
662
- </span><span class="marked1"><a name="line62"></a> 62 case cond
663
- </span><span class="marked0"><a name="line63"></a> 63 when Proc
664
- </span><span class="marked1"><a name="line64"></a> 64 if cond.call(val)
665
- </span><span class="marked0"><a name="line65"></a> 65 result = rule.call(val)
666
- </span><span class="marked1"><a name="line66"></a> 66 break
667
- </span><span class="inferred0"><a name="line67"></a> 67 end
668
- </span><span class="inferred1"><a name="line68"></a> 68 end
669
- </span><span class="inferred0"><a name="line69"></a> 69
670
- </span><span class="marked1"><a name="line70"></a> 70 break if result
671
- </span><span class="inferred0"><a name="line71"></a> 71 end
672
- </span><span class="inferred1"><a name="line72"></a> 72 end
673
- </span><span class="inferred0"><a name="line73"></a> 73
674
- </span><span class="marked1"><a name="line74"></a> 74 break if result
675
- </span><span class="inferred0"><a name="line75"></a> 75 end
676
- </span><span class="inferred1"><a name="line76"></a> 76
677
- </span><span class="marked0"><a name="line77"></a> 77 return result
678
- </span><span class="inferred1"><a name="line78"></a> 78 end
679
- </span><span class="inferred0"><a name="line79"></a> 79 end
680
- </span><span class="inferred1"><a name="line80"></a> 80
681
- </span><span class="marked0"><a name="line81"></a> 81 module CoerceNothing #:nodoc:
682
- </span><span class="marked1"><a name="line82"></a> 82 def coerce val
683
- </span><span class="marked0"><a name="line83"></a> 83 val
684
- </span><span class="marked1"><a name="line84"></a> 84 end
685
- </span><span class="inferred0"><a name="line85"></a> 85 end
686
- </span><span class="inferred1"><a name="line86"></a> 86
687
- </span><span class="marked0"><a name="line87"></a> 87 module DefaultWithProc #:nodoc:
688
- </span><span class="marked1"><a name="line88"></a> 88 def default parent
689
- </span><span class="marked0"><a name="line89"></a> 89 config[:default].call(parent)
690
- </span><span class="marked1"><a name="line90"></a> 90 end
691
- </span><span class="inferred0"><a name="line91"></a> 91 end
692
- </span><span class="marked1"><a name="line92"></a> 92 module DefaultWithNoProc #:nodoc:
693
- </span><span class="marked0"><a name="line93"></a> 93 def default parent
694
- </span><span class="marked1"><a name="line94"></a> 94 begin
695
- </span><span class="marked0"><a name="line95"></a> 95 config[:default].dup
696
- </span><span class="inferred1"><a name="line96"></a> 96 rescue Exception
697
- </span><span class="marked0"><a name="line97"></a> 97 config[:default]
698
- </span><span class="inferred1"><a name="line98"></a> 98 end
699
- </span><span class="marked0"><a name="line99"></a> 99 end
700
- </span><span class="inferred1"><a name="line100"></a>100 end
701
- </span><span class="inferred0"><a name="line101"></a>101
702
- </span><span class="marked1"><a name="line102"></a>102 module ValidateWithProc #:nodoc:
703
- </span><span class="marked0"><a name="line103"></a>103 def validate? val
704
- </span><span class="marked1"><a name="line104"></a>104 return config[:validate].call(val)
705
- </span><span class="marked0"><a name="line105"></a>105 end
706
- </span><span class="inferred1"><a name="line106"></a>106 end
707
- </span><span class="inferred0"><a name="line107"></a>107
708
- </span><span class="marked1"><a name="line108"></a>108 module ValidateWithNotProc #:nodoc:
709
- </span><span class="marked0"><a name="line109"></a>109 def validate? val
710
- </span><span class="marked1"><a name="line110"></a>110 return config[:validate] === val
711
- </span><span class="marked0"><a name="line111"></a>111 end
712
- </span><span class="inferred1"><a name="line112"></a>112 end
713
- </span><span class="inferred0"><a name="line113"></a>113
714
- </span><span class="marked1"><a name="line114"></a>114 module ValidateEach #:nodoc:
715
- </span><span class="marked0"><a name="line115"></a>115 def validate? val
716
- </span><span class="marked1"><a name="line116"></a>116 return false unless val.respond_to? :all?
717
- </span><span class="inferred0"><a name="line117"></a>117
718
- </span><span class="marked1"><a name="line118"></a>118 if self.value_class
719
- </span><span class="marked0"><a name="line119"></a>119 return false unless val.kind_of?(self.value_class)
720
- </span><span class="inferred1"><a name="line120"></a>120
721
- </span><span class="marked0"><a name="line121"></a>121 case val
722
- </span><span class="marked1"><a name="line122"></a>122 when Hash
723
- </span><span class="marked0"><a name="line123"></a>123 if config[:validate_each].arity == 2
724
- </span><span class="marked1"><a name="line124"></a>124 val.all? {|item| config[:validate_each].call(*item) }
725
- </span><span class="inferred0"><a name="line125"></a>125 else
726
- </span><span class="marked1"><a name="line126"></a>126 ClassX::Validate.validate(val, &amp;config[:validate_each])
727
- </span><span class="inferred0"><a name="line127"></a>127 end
728
- </span><span class="inferred1"><a name="line128"></a>128 else
729
- </span><span class="marked0"><a name="line129"></a>129 val.all? {|item| config[:validate_each].call(*item) }
730
- </span><span class="inferred1"><a name="line130"></a>130 end
731
- </span><span class="inferred0"><a name="line131"></a>131 else
732
- </span><span class="marked1"><a name="line132"></a>132 val.all? {|item| config[:validate_each].call(*item) }
733
- </span><span class="inferred0"><a name="line133"></a>133 end
734
- </span><span class="inferred1"><a name="line134"></a>134 end
735
- </span><span class="inferred0"><a name="line135"></a>135 end
736
- </span><span class="inferred1"><a name="line136"></a>136
737
- </span><span class="marked0"><a name="line137"></a>137 module ValidateKindOf #:nodoc:
738
- </span><span class="marked1"><a name="line138"></a>138 def validate? val
739
- </span><span class="marked0"><a name="line139"></a>139 return val.kind_of?(self.value_class)
740
- </span><span class="marked1"><a name="line140"></a>140 end
741
- </span><span class="inferred0"><a name="line141"></a>141 end
742
- </span><span class="inferred1"><a name="line142"></a>142
743
- </span><span class="marked0"><a name="line143"></a>143 module ValidateRespondTo #:nodoc:
744
- </span><span class="marked1"><a name="line144"></a>144 def validate? val
745
- </span><span class="marked0"><a name="line145"></a>145 return val.respond_to?(config[:respond_to])
746
- </span><span class="marked1"><a name="line146"></a>146 end
747
- </span><span class="inferred0"><a name="line147"></a>147 end
748
- </span><span class="inferred1"><a name="line148"></a>148
749
- </span><span class="marked0"><a name="line149"></a>149 module ValidateNothing #:nodoc:
750
- </span><span class="marked1"><a name="line150"></a>150 def validate? val
751
- </span><span class="inferred0"><a name="line151"></a>151 # nothing checked.
752
- </span><span class="marked1"><a name="line152"></a>152 true
753
- </span><span class="marked0"><a name="line153"></a>153 end
754
- </span><span class="inferred1"><a name="line154"></a>154 end
755
- </span><span class="inferred0"><a name="line155"></a>155 end
756
- </span><span class="inferred1"><a name="line156"></a>156
757
- </span><span class="marked0"><a name="line157"></a>157 module InstanceMethods #:nodoc:
758
- </span><span class="marked1"><a name="line158"></a>158 def initialize val
759
- </span><span class="marked0"><a name="line159"></a>159 @parent = val
760
- </span><span class="marked1"><a name="line160"></a>160 @data = nil
761
- </span><span class="inferred0"><a name="line161"></a>161 end
762
- </span><span class="inferred1"><a name="line162"></a>162
763
- </span><span class="marked0"><a name="line163"></a>163 def get
764
- </span><span class="marked1"><a name="line164"></a>164 @data ||= self.class.default(@parent)
765
- </span><span class="marked0"><a name="line165"></a>165 end
766
- </span><span class="inferred1"><a name="line166"></a>166
767
- </span><span class="inferred0"><a name="line167"></a>167 # XXX:
768
- </span><span class="inferred1"><a name="line168"></a>168 # you should not call this method except for @parent instance's setter method.
769
- </span><span class="inferred0"><a name="line169"></a>169 # It's because caching as instance_variable in @parent instance for performance.
770
- </span><span class="marked1"><a name="line170"></a>170 def set val
771
- </span><span class="marked0"><a name="line171"></a>171 val = self.class.coerce(val)
772
- </span><span class="marked1"><a name="line172"></a>172 raise ClassX::InvalidAttrArgument unless self.class.validate? val
773
- </span><span class="marked0"><a name="line173"></a>173 @data = val
774
- </span><span class="inferred1"><a name="line174"></a>174 end
775
- </span><span class="inferred0"><a name="line175"></a>175
776
- </span><span class="marked1"><a name="line176"></a>176 def inspect
777
- </span><span class="marked0"><a name="line177"></a>177 &quot;&lt;#ClassX::Attribute:#{object_id} #{ @data.nil? ? '@data=nil' : '@data=' + @data.inspect } @parent=#{@parent} config=#{self.class.config.inspect}&gt;&quot;
778
- </span><span class="marked1"><a name="line178"></a>178 end
779
- </span><span class="inferred0"><a name="line179"></a>179 end
780
- </span><span class="inferred1"><a name="line180"></a>180 end
781
- </span><span class="inferred0"><a name="line181"></a>181
782
- </span><span class="inferred1"><a name="line182"></a>182 #
783
- </span><span class="inferred0"><a name="line183"></a>183 # generating anonymous class for meta attribute class.
784
- </span><span class="inferred1"><a name="line184"></a>184 #
785
- </span><span class="marked0"><a name="line185"></a>185 class AttributeFactory
786
- </span><span class="inferred1"><a name="line186"></a>186 #
787
- </span><span class="inferred0"><a name="line187"></a>187 # creating anonymous class for meta attribute class.
788
- </span><span class="marked1"><a name="line188"></a>188 def self.create args
789
- </span><span class="inferred0"><a name="line189"></a>189 # TODO: hmm, ClassX::Commandable do nothing when freezed.
790
- </span><span class="inferred1"><a name="line190"></a>190 #
791
- </span><span class="inferred0"><a name="line191"></a>191 # if you would like to change attribute's infomation, it's better to redefine attribute.
792
- </span><span class="inferred1"><a name="line192"></a>192 # So, config should freezed.
793
- </span><span class="inferred0"><a name="line193"></a>193 # args.each do |key, val|
794
- </span><span class="inferred1"><a name="line194"></a>194 # key.freeze
795
- </span><span class="inferred0"><a name="line195"></a>195 # val.freeze
796
- </span><span class="inferred1"><a name="line196"></a>196 # end
797
- </span><span class="inferred0"><a name="line197"></a>197 # args.freeze
798
- </span><span class="inferred1"><a name="line198"></a>198
799
- </span><span class="marked0"><a name="line199"></a>199 raise ClassX::RequiredAttrShouldNotHaveDefault if args[:optional] == false &amp;&amp; !args[:default].nil?
800
- </span><span class="marked1"><a name="line200"></a>200 raise ClassX::OptionalAttrShouldBeWritable if args[:optional] &amp;&amp; args[:writable] == false
801
- </span><span class="inferred0"><a name="line201"></a>201
802
- </span><span class="marked1"><a name="line202"></a>202 klass = Class.new
803
- </span><span class="inferred0"><a name="line203"></a>203
804
- </span><span class="marked1"><a name="line204"></a>204 klass.extend(ClassX::AttributeMethods::ClassMethods)
805
- </span><span class="inferred0"><a name="line205"></a>205
806
- </span><span class="inferred1"><a name="line206"></a>206 # you specify type changing rule with :coerce option.
807
- </span><span class="marked0"><a name="line207"></a>207 if args[:coerce]
808
- </span><span class="marked1"><a name="line208"></a>208 case args[:coerce]
809
- </span><span class="marked0"><a name="line209"></a>209 when Hash
810
- </span><span class="marked1"><a name="line210"></a>210 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceWithHash)
811
- </span><span class="marked0"><a name="line211"></a>211 when Array
812
- </span><span class="marked1"><a name="line212"></a>212 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceWithArray)
813
- </span><span class="inferred0"><a name="line213"></a>213 end
814
- </span><span class="inferred1"><a name="line214"></a>214 else
815
- </span><span class="marked0"><a name="line215"></a>215 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceNothing)
816
- </span><span class="inferred1"><a name="line216"></a>216 end
817
- </span><span class="inferred0"><a name="line217"></a>217
818
- </span><span class="inferred1"><a name="line218"></a>218 # default paramater for attribute.
819
- </span><span class="inferred0"><a name="line219"></a>219 # if default is Proc, run Proc every time in instanciate.
820
- </span><span class="marked1"><a name="line220"></a>220 case args[:default]
821
- </span><span class="marked0"><a name="line221"></a>221 when Proc
822
- </span><span class="marked1"><a name="line222"></a>222 klass.extend(ClassX::AttributeMethods::ClassMethods::DefaultWithProc)
823
- </span><span class="inferred0"><a name="line223"></a>223 else
824
- </span><span class="marked1"><a name="line224"></a>224 klass.extend(ClassX::AttributeMethods::ClassMethods::DefaultWithNoProc)
825
- </span><span class="inferred0"><a name="line225"></a>225 end
826
- </span><span class="inferred1"><a name="line226"></a>226
827
- </span><span class="inferred0"><a name="line227"></a>227 # you can specify :validate option for checking when value is setted.
828
- </span><span class="inferred1"><a name="line228"></a>228 # you can use :respond_to as shotcut for specifying { :validate =&gt; proc {|val| respond_to?(val, true) } }
829
- </span><span class="inferred0"><a name="line229"></a>229 # you can use :isa or :kind_of as shotcut for specifying { :validate =&gt; proc {|val| kind_of?(val) } }
830
- </span><span class="marked1"><a name="line230"></a>230 if args[:validate]
831
- </span><span class="marked0"><a name="line231"></a>231 case args[:validate]
832
- </span><span class="marked1"><a name="line232"></a>232 when Proc
833
- </span><span class="marked0"><a name="line233"></a>233 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateWithProc)
834
- </span><span class="inferred1"><a name="line234"></a>234 else
835
- </span><span class="marked0"><a name="line235"></a>235 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateWithNotProc)
836
- </span><span class="inferred1"><a name="line236"></a>236 end
837
- </span><span class="marked0"><a name="line237"></a>237 elsif args[:validate_each]
838
- </span><span class="marked1"><a name="line238"></a>238 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateEach)
839
- </span><span class="marked0"><a name="line239"></a>239 elsif mod = ( args[:isa] || args[:kind_of] )
840
- </span><span class="marked1"><a name="line240"></a>240 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateKindOf)
841
- </span><span class="marked0"><a name="line241"></a>241 elsif args[:respond_to]
842
- </span><span class="marked1"><a name="line242"></a>242 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateRespondTo)
843
- </span><span class="inferred0"><a name="line243"></a>243 else
844
- </span><span class="marked1"><a name="line244"></a>244 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateNothing)
845
- </span><span class="inferred0"><a name="line245"></a>245 end
846
- </span><span class="inferred1"><a name="line246"></a>246
847
- </span><span class="inferred0"><a name="line247"></a>247 # for extending attribute point.
848
- </span><span class="marked1"><a name="line248"></a>248 if args[:include]
849
- </span><span class="marked0"><a name="line249"></a>249 case args[:include]
850
- </span><span class="marked1"><a name="line250"></a>250 when Array
851
- </span><span class="marked0"><a name="line251"></a>251 args[:include].each do |mod|
852
- </span><span class="marked1"><a name="line252"></a>252 klass.__send__ :include, mod
853
- </span><span class="inferred0"><a name="line253"></a>253 end
854
- </span><span class="inferred1"><a name="line254"></a>254 else
855
- </span><span class="marked0"><a name="line255"></a>255 klass.__send__ :include, args[:include]
856
- </span><span class="inferred1"><a name="line256"></a>256 end
857
- </span><span class="inferred0"><a name="line257"></a>257 end
858
- </span><span class="inferred1"><a name="line258"></a>258
859
- </span><span class="marked0"><a name="line259"></a>259 if args[:extend]
860
- </span><span class="marked1"><a name="line260"></a>260 case args[:extend]
861
- </span><span class="marked0"><a name="line261"></a>261 when Array
862
- </span><span class="marked1"><a name="line262"></a>262 args[:extend].each do |mod|
863
- </span><span class="marked0"><a name="line263"></a>263 klass.__send__ :extend, mod
864
- </span><span class="inferred1"><a name="line264"></a>264 end
865
- </span><span class="inferred0"><a name="line265"></a>265 else
866
- </span><span class="marked1"><a name="line266"></a>266 klass.__send__ :extend, args[:extend]
867
- </span><span class="inferred0"><a name="line267"></a>267 end
868
- </span><span class="inferred1"><a name="line268"></a>268 end
869
- </span><span class="inferred0"><a name="line269"></a>269
870
- </span><span class="inferred1"><a name="line270"></a>270 # XXX: Hack for defining class method for klass
871
- </span><span class="marked0"><a name="line271"></a>271 tmp_mod = Module.new
872
- </span><span class="marked1"><a name="line272"></a>272 tmp_mod.module_eval do
873
- </span><span class="marked0"><a name="line273"></a>273 define_method :config do
874
- </span><span class="marked1"><a name="line274"></a>274 args
875
- </span><span class="inferred0"><a name="line275"></a>275 end
876
- </span><span class="inferred1"><a name="line276"></a>276 end
877
- </span><span class="marked0"><a name="line277"></a>277 klass.extend(tmp_mod)
878
- </span><span class="inferred1"><a name="line278"></a>278
879
- </span><span class="marked0"><a name="line279"></a>279 klass.class_eval do
880
- </span><span class="marked1"><a name="line280"></a>280 include ClassX::AttributeMethods::InstanceMethods
881
- </span><span class="inferred0"><a name="line281"></a>281 end
882
- </span><span class="inferred1"><a name="line282"></a>282
883
- </span><span class="marked0"><a name="line283"></a>283 klass
884
- </span><span class="inferred1"><a name="line284"></a>284 end
885
- </span><span class="inferred0"><a name="line285"></a>285 end
886
- </span><span class="inferred1"><a name="line286"></a>286 end
887
- </span></pre><hr/>
888
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
889
- version 0.8.1.2.</p>
890
- <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'/>
891
- </a>
892
- <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'/>
893
- </a>
894
- </p>
895
- </body>
896
- </html>