classx 0.0.6 → 0.0.7

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,775 +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/class_attributes.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 Fri Dec 26 09:01:48 +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-class_attributes_rb.html'>lib/classx/class_attributes.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>165</tt>
575
- </td>
576
- <td class='lines_code'><tt>108</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>95.2%</tt>
579
- &nbsp;</td>
580
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='95'/>
581
- <td class='uncovered' width='5'/>
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'>92.6%</tt>
589
- &nbsp;</td>
590
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='93'/>
591
- <td class='uncovered' width='7'/>
592
- </tr>
593
- </table>
594
- </td>
595
- </tr>
596
- </table>
597
- </td>
598
- </tr>
599
- </tbody>
600
- </table>
601
- <pre><span class="inferred0"><a name="line1"></a> 1
602
- </span><span class="inferred1"><a name="line2"></a> 2
603
- </span><span class="marked0"><a name="line3"></a> 3 module ClassX
604
- </span><span class="inferred1"><a name="line4"></a> 4 #
605
- </span><span class="inferred0"><a name="line5"></a> 5 # for easy defining inheritable class accessor using classx attribute interface.
606
- </span><span class="inferred1"><a name="line6"></a> 6 #
607
- </span><span class="inferred0"><a name="line7"></a> 7 # require 'classx'
608
- </span><span class="inferred1"><a name="line8"></a> 8 # class YourClass
609
- </span><span class="inferred0"><a name="line9"></a> 9 # extend ClassX::ClassAttributes
610
- </span><span class="inferred1"><a name="line10"></a> 10 #
611
- </span><span class="inferred0"><a name="line11"></a> 11 # class_has :table_name, :writable =&gt; true, :default =&gt; proc {|klass| klass.to_s.downcase }
612
- </span><span class="inferred1"><a name="line12"></a> 12 # end
613
- </span><span class="inferred0"><a name="line13"></a> 13 #
614
- </span><span class="inferred1"><a name="line14"></a> 14 # YourClass.table_name #=&gt; 'yourclass'
615
- </span><span class="inferred0"><a name="line15"></a> 15 # YourClass.table_name = 'test'
616
- </span><span class="inferred1"><a name="line16"></a> 16 # YourClass.table_name #=&gt; 'test'
617
- </span><span class="inferred0"><a name="line17"></a> 17 #
618
- </span><span class="inferred1"><a name="line18"></a> 18 # class SubClass &lt; YourClass
619
- </span><span class="inferred0"><a name="line19"></a> 19 # end
620
- </span><span class="inferred1"><a name="line20"></a> 20 #
621
- </span><span class="inferred0"><a name="line21"></a> 21 # SubClass.table_name #=&gt; 'subclass' # it's not &quot;test&quot;!!
622
- </span><span class="inferred1"><a name="line22"></a> 22 #
623
- </span><span class="inferred0"><a name="line23"></a> 23 # # you can also write following:
624
- </span><span class="inferred1"><a name="line24"></a> 24 # SubClass.table_name('test2')
625
- </span><span class="inferred0"><a name="line25"></a> 25 # SubClass.table_name #=&gt; 'test2'
626
- </span><span class="inferred1"><a name="line26"></a> 26 #
627
- </span><span class="inferred0"><a name="line27"></a> 27 #
628
- </span><span class="inferred1"><a name="line28"></a> 28 # == SEE ALSO
629
- </span><span class="inferred0"><a name="line29"></a> 29 # dsl_accessor:
630
- </span><span class="inferred1"><a name="line30"></a> 30 # It's have also similar functions. It's implemented simply using activesupport's inheritable_accessor.
631
- </span><span class="inferred0"><a name="line31"></a> 31 # classx is complex but more extensible to define class attribute.
632
- </span><span class="inferred1"><a name="line32"></a> 32 #
633
- </span><span class="marked0"><a name="line33"></a> 33 module ClassAttributes
634
- </span><span class="marked1"><a name="line34"></a> 34 CLASS_ATTRIBUTE_REGEX = /\Aclass_attribute_of:(\w+)\z/
635
- </span><span class="inferred0"><a name="line35"></a> 35
636
- </span><span class="marked1"><a name="line36"></a> 36 def class_attribute_of
637
- </span><span class="marked0"><a name="line37"></a> 37 unless instance_variable_defined?('@__class_attribute_of') &amp;&amp; @__class_attribute_of
638
- </span><span class="marked1"><a name="line38"></a> 38 @__class_attribute_of = {}
639
- </span><span class="marked0"><a name="line39"></a> 39 private_methods.select {|meth| meth.to_s =~ CLASS_ATTRIBUTE_REGEX }.each do |meth|
640
- </span><span class="marked1"><a name="line40"></a> 40 key = meth.to_s.sub(CLASS_ATTRIBUTE_REGEX) { $1 }
641
- </span><span class="marked0"><a name="line41"></a> 41 @__class_attribute_of[key] = __send__(&quot;class_attribute_of:#{key}&quot;).new(self)
642
- </span><span class="inferred1"><a name="line42"></a> 42 end
643
- </span><span class="inferred0"><a name="line43"></a> 43 end
644
- </span><span class="inferred1"><a name="line44"></a> 44
645
- </span><span class="marked0"><a name="line45"></a> 45 @__class_attribute_of
646
- </span><span class="inferred1"><a name="line46"></a> 46 end
647
- </span><span class="inferred0"><a name="line47"></a> 47
648
- </span><span class="marked1"><a name="line48"></a> 48 private
649
- </span><span class="marked0"><a name="line49"></a> 49 def define_class_attribute name, attribute
650
- </span><span class="marked1"><a name="line50"></a> 50 klass_attribute = ClassX::AttributeFactory.create(attribute)
651
- </span><span class="marked0"><a name="line51"></a> 51 mod = nil
652
- </span><span class="marked1"><a name="line52"></a> 52 if self.const_defined? 'ClassMethods'
653
- </span><span class="marked0"><a name="line53"></a> 53 mod = self.const_get('ClassMethods')
654
- </span><span class="inferred1"><a name="line54"></a> 54 else
655
- </span><span class="marked0"><a name="line55"></a> 55 mod = Module.new
656
- </span><span class="marked1"><a name="line56"></a> 56 const_set('ClassMethods', mod)
657
- </span><span class="inferred0"><a name="line57"></a> 57 end
658
- </span><span class="marked1"><a name="line58"></a> 58 mod.module_eval do
659
- </span><span class="marked0"><a name="line59"></a> 59 define_method &quot;class_attribute_of:#{name}&quot; do
660
- </span><span class="marked1"><a name="line60"></a> 60 klass_attribute
661
- </span><span class="inferred0"><a name="line61"></a> 61 end
662
- </span><span class="inferred1"><a name="line62"></a> 62
663
- </span><span class="marked0"><a name="line63"></a> 63 private &quot;class_attribute_of:#{name}&quot;
664
- </span><span class="inferred1"><a name="line64"></a> 64 end
665
- </span><span class="marked0"><a name="line65"></a> 65 self.extend(mod)
666
- </span><span class="marked1"><a name="line66"></a> 66 @__class_attribute_of ||= self.class_attribute_of
667
- </span><span class="marked0"><a name="line67"></a> 67 @__class_attribute_of[name] = klass_attribute.new(self)
668
- </span><span class="inferred1"><a name="line68"></a> 68
669
- </span><span class="marked0"><a name="line69"></a> 69 klass_attribute
670
- </span><span class="inferred1"><a name="line70"></a> 70 end
671
- </span><span class="inferred0"><a name="line71"></a> 71
672
- </span><span class="marked1"><a name="line72"></a> 72 def add_class_attribute name, attrs={}
673
- </span><span class="marked0"><a name="line73"></a> 73 name = name.to_s
674
- </span><span class="inferred1"><a name="line74"></a> 74
675
- </span><span class="marked0"><a name="line75"></a> 75 attr_class = define_class_attribute(name, attrs)
676
- </span><span class="inferred1"><a name="line76"></a> 76
677
- </span><span class="marked0"><a name="line77"></a> 77 mod = nil
678
- </span><span class="marked1"><a name="line78"></a> 78 if self.const_defined? 'ClassMethods'
679
- </span><span class="marked0"><a name="line79"></a> 79 mod = self.const_get('ClassMethods')
680
- </span><span class="uncovered1"><a name="line80"></a> 80 else
681
- </span><span class="uncovered0"><a name="line81"></a> 81 mod = Module.new
682
- </span><span class="uncovered1"><a name="line82"></a> 82 const_set('ClassMethods', mod)
683
- </span><span class="uncovered0"><a name="line83"></a> 83 end
684
- </span><span class="marked1"><a name="line84"></a> 84 mod.module_eval do
685
- </span><span class="inferred0"><a name="line85"></a> 85 # XXX: Why this can take *args?
686
- </span><span class="inferred1"><a name="line86"></a> 86 # =&gt; It's for avoid warnings when you call it without values.
687
- </span><span class="marked0"><a name="line87"></a> 87 define_method name do |*vals|
688
- </span><span class="marked1"><a name="line88"></a> 88 name = name.to_s
689
- </span><span class="marked0"><a name="line89"></a> 89 if vals == []
690
- </span><span class="marked1"><a name="line90"></a> 90 @__class_attribute_data_of ||= {}
691
- </span><span class="marked0"><a name="line91"></a> 91 if @__class_attribute_data_of[name]
692
- </span><span class="marked1"><a name="line92"></a> 92 return @__class_attribute_data_of[name]
693
- </span><span class="inferred0"><a name="line93"></a> 93 else
694
- </span><span class="marked1"><a name="line94"></a> 94 attr_instance = nil
695
- </span><span class="marked0"><a name="line95"></a> 95 if instance_variable_defined?('@__class_attribute_of') &amp;&amp; @__class_attribute_of
696
- </span><span class="marked1"><a name="line96"></a> 96 attr_instance = @__class_attribute_of[name]
697
- </span><span class="inferred0"><a name="line97"></a> 97 else
698
- </span><span class="marked1"><a name="line98"></a> 98 @__class_attribute_of = self.class_attribute_of
699
- </span><span class="marked0"><a name="line99"></a> 99 attr_instance = @__class_attribute_of[name]
700
- </span><span class="inferred1"><a name="line100"></a>100 end
701
- </span><span class="marked0"><a name="line101"></a>101 result = attr_instance.get
702
- </span><span class="marked1"><a name="line102"></a>102 raise ClassX::AttrRequiredError if result.nil? &amp;&amp; !attr_instance.class.config[:optional]
703
- </span><span class="marked0"><a name="line103"></a>103 return @__class_attribute_data_of[name] = result
704
- </span><span class="inferred1"><a name="line104"></a>104 end
705
- </span><span class="inferred0"><a name="line105"></a>105 else
706
- </span><span class="marked1"><a name="line106"></a>106 raise ArgumentError if vals.size &gt; 1
707
- </span><span class="marked0"><a name="line107"></a>107 val = vals.first
708
- </span><span class="inferred1"><a name="line108"></a>108 # TODO: It's not consider whether setter method is writable.
709
- </span><span class="inferred0"><a name="line109"></a>109 # I want to write following when setter method is private:
710
- </span><span class="inferred1"><a name="line110"></a>110 #
711
- </span><span class="inferred0"><a name="line111"></a>111 # class SomeClass
712
- </span><span class="inferred1"><a name="line112"></a>112 # class_has :attr
713
- </span><span class="inferred0"><a name="line113"></a>113 # attr 'setting value example'
714
- </span><span class="inferred1"><a name="line114"></a>114 # self.attr = 'stting value example' # It's same meaning above but longer and not declaretive.
715
- </span><span class="inferred0"><a name="line115"></a>115 # end
716
- </span><span class="inferred1"><a name="line116"></a>116 #
717
- </span><span class="marked0"><a name="line117"></a>117 __send__ &quot;#{name}=&quot;, val
718
- </span><span class="inferred1"><a name="line118"></a>118 end
719
- </span><span class="inferred0"><a name="line119"></a>119 end
720
- </span><span class="inferred1"><a name="line120"></a>120
721
- </span><span class="marked0"><a name="line121"></a>121 define_method &quot;#{name}=&quot; do |val|
722
- </span><span class="marked1"><a name="line122"></a>122 nam = name.to_s
723
- </span><span class="marked0"><a name="line123"></a>123 attr_instance = nil
724
- </span><span class="marked1"><a name="line124"></a>124 if @__class_attribute_of
725
- </span><span class="marked0"><a name="line125"></a>125 attr_instance = @__class_attribute_of[name]
726
- </span><span class="uncovered1"><a name="line126"></a>126 else
727
- </span><span class="uncovered0"><a name="line127"></a>127 @__class_attribute_of = self.class_attribute_of
728
- </span><span class="uncovered1"><a name="line128"></a>128 attr_instance = @__class_attribute_of[name]
729
- </span><span class="uncovered0"><a name="line129"></a>129 end
730
- </span><span class="inferred1"><a name="line130"></a>130
731
- </span><span class="marked0"><a name="line131"></a>131 attr_instance.set val
732
- </span><span class="marked1"><a name="line132"></a>132 @__class_attribute_data_of ||= {}
733
- </span><span class="marked0"><a name="line133"></a>133 @__class_attribute_data_of[name] = val
734
- </span><span class="inferred1"><a name="line134"></a>134 end
735
- </span><span class="inferred0"><a name="line135"></a>135
736
- </span><span class="marked1"><a name="line136"></a>136 if attr_class.config[:writable] == false
737
- </span><span class="marked0"><a name="line137"></a>137 private &quot;#{name}=&quot;
738
- </span><span class="inferred1"><a name="line138"></a>138 end
739
- </span><span class="inferred0"><a name="line139"></a>139
740
- </span><span class="marked1"><a name="line140"></a>140 if attr_class.config[:handles]
741
- </span><span class="marked0"><a name="line141"></a>141 case attr_class.config[:handles]
742
- </span><span class="marked1"><a name="line142"></a>142 when Hash
743
- </span><span class="marked0"><a name="line143"></a>143 attr_class.config[:handles].each do |before, after|
744
- </span><span class="marked1"><a name="line144"></a>144 define_method before do |*args|
745
- </span><span class="marked0"><a name="line145"></a>145 __send__(&quot;#{name}&quot;).__send__ after, *args
746
- </span><span class="inferred1"><a name="line146"></a>146 end
747
- </span><span class="inferred0"><a name="line147"></a>147 end
748
- </span><span class="marked1"><a name="line148"></a>148 when Array
749
- </span><span class="marked0"><a name="line149"></a>149 attr_class.config[:handles].each do |meth|
750
- </span><span class="marked1"><a name="line150"></a>150 define_method meth do |*args|
751
- </span><span class="marked0"><a name="line151"></a>151 __send__(&quot;#{name}&quot;).__send__ meth, *args
752
- </span><span class="inferred1"><a name="line152"></a>152 end
753
- </span><span class="inferred0"><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 end
757
- </span><span class="marked0"><a name="line157"></a>157 self.extend(mod)
758
- </span><span class="inferred1"><a name="line158"></a>158 end
759
- </span><span class="inferred0"><a name="line159"></a>159
760
- </span><span class="marked1"><a name="line160"></a>160 alias class_has add_class_attribute
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="inferred0"><a name="line163"></a>163 # alias for lazy people.
764
- </span><span class="marked1"><a name="line164"></a>164 CAttrs = ClassAttributes
765
- </span><span class="inferred0"><a name="line165"></a>165 end
766
- </span></pre><hr/>
767
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
768
- version 0.8.1.2.</p>
769
- <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'/>
770
- </a>
771
- <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'/>
772
- </a>
773
- </p>
774
- </body>
775
- </html>