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.
- data/ChangeLog +221 -0
- data/README +88 -0
- data/Rakefile +52 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-attribute_rb.html +925 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-attributes_rb.html +772 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-bracketable_rb.html +671 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-role-logger_rb.html +716 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx-validate_rb.html +663 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-classx-0_0_5-lib-classx_rb.html +820 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html +661 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +932 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +779 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +867 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +1715 -0
- data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1598 -0
- data/doc/output/coverage/examples-test_runner-bin-test_runner_rb.html +628 -0
- data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-setup_fixture_rb.html +641 -0
- data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-test_info_rb.html +638 -0
- data/doc/output/coverage/examples-test_runner-lib-test_runner-plugin-test_timer_rb.html +666 -0
- data/doc/output/coverage/examples-test_runner-lib-test_runner_rb.html +643 -0
- data/doc/output/coverage/index.html +711 -0
- data/doc/output/coverage/lib-classx-pluggable-plugin_rb.html +676 -0
- data/doc/output/coverage/lib-classx-pluggable_rb.html +841 -0
- data/examples/test_runner/bin/test_runner.rb +18 -0
- data/examples/test_runner/conf/config.yaml +19 -0
- data/examples/test_runner/lib/test_runner.rb +33 -0
- data/examples/test_runner/lib/test_runner/plugin/setup_fixture.rb +31 -0
- data/examples/test_runner/lib/test_runner/plugin/test_info.rb +28 -0
- data/examples/test_runner/lib/test_runner/plugin/test_timer.rb +56 -0
- data/lib/classx/pluggable.rb +231 -0
- data/lib/classx/pluggable/plugin.rb +66 -0
- data/spec/classx-pluggable-util/module2path_spec.rb +30 -0
- data/spec/classx-pluggable-util/nested_autoload_spec.rb +48 -0
- data/spec/classx-pluggable-util/nested_const_get_spec.rb +48 -0
- data/spec/classx-pluggable/component_class_get.rb +18 -0
- data/spec/classx-pluggable_spec.rb +5 -0
- data/spec/example_spec.rb +20 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +6 -0
- data/tasks/basic_config.rake +22 -0
- data/tasks/basic_tasks.rake +139 -0
- metadata +127 -0
@@ -0,0 +1,841 @@
|
|
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/pluggable.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:44 +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'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-pluggable_rb.html'>lib/classx/pluggable.rb</a>
|
573
|
+
</td>
|
574
|
+
<td class='lines_total'><tt>231</tt>
|
575
|
+
</td>
|
576
|
+
<td class='lines_code'><tt>152</tt>
|
577
|
+
</td>
|
578
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>91.3%</tt>
|
579
|
+
</td>
|
580
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='91'/>
|
581
|
+
<td class='uncovered' width='9'/>
|
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'>86.8%</tt>
|
589
|
+
</td>
|
590
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='87'/>
|
591
|
+
<td class='uncovered' width='13'/>
|
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 require 'classx'
|
602
|
+
</span><span class="marked1"><a name="line2"></a> 2 require 'ostruct'
|
603
|
+
</span><span class="inferred0"><a name="line3"></a> 3
|
604
|
+
</span><span class="marked1"><a name="line4"></a> 4 module ClassX
|
605
|
+
</span><span class="inferred0"><a name="line5"></a> 5 # in your context class.
|
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 # require 'classx/pluggable'
|
609
|
+
</span><span class="inferred0"><a name="line9"></a> 9 # class YourApp
|
610
|
+
</span><span class="inferred1"><a name="line10"></a> 10 # include ClassX
|
611
|
+
</span><span class="inferred0"><a name="line11"></a> 11 # include ClassX::Pluggable
|
612
|
+
</span><span class="inferred1"><a name="line12"></a> 12 #
|
613
|
+
</span><span class="inferred0"><a name="line13"></a> 13 # def run
|
614
|
+
</span><span class="inferred1"><a name="line14"></a> 14 # call_event("SETUP", {})
|
615
|
+
</span><span class="inferred0"><a name="line15"></a> 15 # # you app
|
616
|
+
</span><span class="inferred1"><a name="line16"></a> 16 # call_event("TEARDOWN", {})
|
617
|
+
</span><span class="inferred0"><a name="line17"></a> 17 # end
|
618
|
+
</span><span class="inferred1"><a name="line18"></a> 18 #
|
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 # in your plugin class
|
622
|
+
</span><span class="inferred1"><a name="line22"></a> 22 #
|
623
|
+
</span><span class="inferred0"><a name="line23"></a> 23 # require 'classx'
|
624
|
+
</span><span class="inferred1"><a name="line24"></a> 24 # require 'classx/pluggable'
|
625
|
+
</span><span class="inferred0"><a name="line25"></a> 25 # class YourApp
|
626
|
+
</span><span class="inferred1"><a name="line26"></a> 26 # class Plugin
|
627
|
+
</span><span class="inferred0"><a name="line27"></a> 27 # include ClassX
|
628
|
+
</span><span class="inferred1"><a name="line28"></a> 28 # include ClassX::Pluggable::Plugin
|
629
|
+
</span><span class="inferred0"><a name="line29"></a> 29 #
|
630
|
+
</span><span class="inferred1"><a name="line30"></a> 30 # class SomePlugin < Plugin
|
631
|
+
</span><span class="inferred0"><a name="line31"></a> 31 # def register
|
632
|
+
</span><span class="inferred1"><a name="line32"></a> 32 # add_event("SETUP", :on_setup)
|
633
|
+
</span><span class="inferred0"><a name="line33"></a> 33 # end
|
634
|
+
</span><span class="inferred1"><a name="line34"></a> 34 #
|
635
|
+
</span><span class="inferred0"><a name="line35"></a> 35 # def on_setup param
|
636
|
+
</span><span class="inferred1"><a name="line36"></a> 36 # # param is Hash
|
637
|
+
</span><span class="inferred0"><a name="line37"></a> 37 # # hooked setup
|
638
|
+
</span><span class="inferred1"><a name="line38"></a> 38 # end
|
639
|
+
</span><span class="inferred0"><a name="line39"></a> 39 # end
|
640
|
+
</span><span class="inferred1"><a name="line40"></a> 40 # end
|
641
|
+
</span><span class="inferred0"><a name="line41"></a> 41 # end
|
642
|
+
</span><span class="inferred1"><a name="line42"></a> 42 #
|
643
|
+
</span><span class="marked0"><a name="line43"></a> 43 module Pluggable
|
644
|
+
</span><span class="marked1"><a name="line44"></a> 44 extend ClassX::Attributes
|
645
|
+
</span><span class="marked0"><a name="line45"></a> 45 extend ClassX::Role::Logger
|
646
|
+
</span><span class="inferred1"><a name="line46"></a> 46
|
647
|
+
</span><span class="marked0"><a name="line47"></a> 47 class PluginLoadError < ::Exception; end
|
648
|
+
</span><span class="inferred1"><a name="line48"></a> 48
|
649
|
+
</span><span class="marked0"><a name="line49"></a> 49 has :__classx_pluggable_events_of,
|
650
|
+
</span><span class="inferred1"><a name="line50"></a> 50 :lazy => true,
|
651
|
+
</span><span class="inferred0"><a name="line51"></a> 51 :no_cmd_option => true,
|
652
|
+
</span><span class="marked1"><a name="line52"></a> 52 :default => proc {|mine| mine.events.inject({}) {|h,event| h[event] = []; h } }
|
653
|
+
</span><span class="inferred0"><a name="line53"></a> 53
|
654
|
+
</span><span class="marked1"><a name="line54"></a> 54 has :plugin_dir,
|
655
|
+
</span><span class="inferred0"><a name="line55"></a> 55 :optional => true,
|
656
|
+
</span><span class="inferred1"><a name="line56"></a> 56 :kind_of => Array
|
657
|
+
</span><span class="inferred0"><a name="line57"></a> 57
|
658
|
+
</span><span class="marked1"><a name="line58"></a> 58 has :check_events,
|
659
|
+
</span><span class="inferred0"><a name="line59"></a> 59 :default => false,
|
660
|
+
</span><span class="inferred1"><a name="line60"></a> 60 :optional => true,
|
661
|
+
</span><span class="inferred0"><a name="line61"></a> 61 :desc => "only add events that define before add_event."
|
662
|
+
</span><span class="inferred1"><a name="line62"></a> 62
|
663
|
+
</span><span class="marked0"><a name="line63"></a> 63 has :events,
|
664
|
+
</span><span class="inferred1"><a name="line64"></a> 64 :lazy => true,
|
665
|
+
</span><span class="inferred0"><a name="line65"></a> 65 :optional => true,
|
666
|
+
</span><span class="inferred1"><a name="line66"></a> 66 :kind_of => Array,
|
667
|
+
</span><span class="inferred0"><a name="line67"></a> 67 :desc => "hook point for #{self}'s instance",
|
668
|
+
</span><span class="inferred1"><a name="line68"></a> 68 :default => proc { [] }
|
669
|
+
</span><span class="inferred0"><a name="line69"></a> 69
|
670
|
+
</span><span class="inferred1"><a name="line70"></a> 70 # register plugin and method to hook point.
|
671
|
+
</span><span class="inferred0"><a name="line71"></a> 71 #
|
672
|
+
</span><span class="marked1"><a name="line72"></a> 72 def add_event name, plugin, meth
|
673
|
+
</span><span class="marked0"><a name="line73"></a> 73 name = name.to_s
|
674
|
+
</span><span class="marked1"><a name="line74"></a> 74 if self.check_events && !self.events.include?(name)
|
675
|
+
</span><span class="uncovered0"><a name="line75"></a> 75 raise "#{name.inspect} should be declared before call add_event. not in #{self.events.inspect}"
|
676
|
+
</span><span class="inferred1"><a name="line76"></a> 76 else
|
677
|
+
</span><span class="marked0"><a name="line77"></a> 77 self.__classx_pluggable_events_of[name] ||= []
|
678
|
+
</span><span class="inferred1"><a name="line78"></a> 78 end
|
679
|
+
</span><span class="marked0"><a name="line79"></a> 79 self.__classx_pluggable_events_of[name] << { :plugin => plugin, :method => meth }
|
680
|
+
</span><span class="inferred1"><a name="line80"></a> 80 end
|
681
|
+
</span><span class="inferred0"><a name="line81"></a> 81
|
682
|
+
</span><span class="inferred1"><a name="line82"></a> 82 # load plugins.
|
683
|
+
</span><span class="inferred0"><a name="line83"></a> 83 #
|
684
|
+
</span><span class="inferred1"><a name="line84"></a> 84 # app.load_plugins([
|
685
|
+
</span><span class="inferred0"><a name="line85"></a> 85 # { :module => "YourApp::Plugin::Foo", :confiig => { :some_config => "foo"} },
|
686
|
+
</span><span class="inferred1"><a name="line86"></a> 86 # { :module => "+Bar", :confiig => { } }, # It's same meaning of YourApp::Plugin::Bar
|
687
|
+
</span><span class="inferred0"><a name="line87"></a> 87 # ])
|
688
|
+
</span><span class="inferred1"><a name="line88"></a> 88 #
|
689
|
+
</span><span class="marked0"><a name="line89"></a> 89 def load_plugins plugins
|
690
|
+
</span><span class="marked1"><a name="line90"></a> 90 load_components("plugin", plugins)
|
691
|
+
</span><span class="marked0"><a name="line91"></a> 91 end
|
692
|
+
</span><span class="inferred1"><a name="line92"></a> 92
|
693
|
+
</span><span class="inferred0"><a name="line93"></a> 93 # if you customize Plugin name space. you can use this instead of +load_plugins+.
|
694
|
+
</span><span class="inferred1"><a name="line94"></a> 94 #
|
695
|
+
</span><span class="inferred0"><a name="line95"></a> 95 # app.load_components('engine', [
|
696
|
+
</span><span class="inferred1"><a name="line96"></a> 96 # { :module => "YourApp::Engine::Foo", :confiig => { :some_config => "foo"} },
|
697
|
+
</span><span class="inferred0"><a name="line97"></a> 97 # { :module => "+Bar", :confiig => { } }, # It's same meaning of YourApp::Engine::Bar
|
698
|
+
</span><span class="inferred1"><a name="line98"></a> 98 # ])
|
699
|
+
</span><span class="inferred0"><a name="line99"></a> 99 #
|
700
|
+
</span><span class="marked1"><a name="line100"></a>100 def load_components type, components
|
701
|
+
</span><span class="marked0"><a name="line101"></a>101 components.each do |component|
|
702
|
+
</span><span class="marked1"><a name="line102"></a>102 load_component type, component
|
703
|
+
</span><span class="inferred0"><a name="line103"></a>103 end
|
704
|
+
</span><span class="marked1"><a name="line104"></a>104 end
|
705
|
+
</span><span class="inferred0"><a name="line105"></a>105
|
706
|
+
</span><span class="marked1"><a name="line106"></a>106 def load_component type, hash
|
707
|
+
</span><span class="marked0"><a name="line107"></a>107 component = OpenStruct.new(hash.dup)
|
708
|
+
</span><span class="marked1"><a name="line108"></a>108 mod = self.class.component_class_get(type, component.module, { :plugin_dir => self.plugin_dir })
|
709
|
+
</span><span class="marked0"><a name="line109"></a>109 component.config ||= {}
|
710
|
+
</span><span class="marked1"><a name="line110"></a>110 component.config[:context] = self
|
711
|
+
</span><span class="marked0"><a name="line111"></a>111 instance = mod.new(component.config)
|
712
|
+
</span><span class="marked1"><a name="line112"></a>112 instance.register
|
713
|
+
</span><span class="marked0"><a name="line113"></a>113 logger.debug("ClassX::Pluggable: loaded #{type} #{component.module}, config=#{instance.inspect}")
|
714
|
+
</span><span class="inferred1"><a name="line114"></a>114 end
|
715
|
+
</span><span class="inferred0"><a name="line115"></a>115
|
716
|
+
</span><span class="inferred1"><a name="line116"></a>116 # invoke registered event of +name+ with +args+. and return array of result each callback.
|
717
|
+
</span><span class="marked0"><a name="line117"></a>117 def call_event name, *args
|
718
|
+
</span><span class="marked1"><a name="line118"></a>118 name = name.to_s
|
719
|
+
</span><span class="marked0"><a name="line119"></a>119 if events = self.__classx_pluggable_events_of[name]
|
720
|
+
</span><span class="marked1"><a name="line120"></a>120 events.map do |event|
|
721
|
+
</span><span class="marked0"><a name="line121"></a>121 event[:plugin].__send__(event[:method], *args)
|
722
|
+
</span><span class="inferred1"><a name="line122"></a>122 end
|
723
|
+
</span><span class="inferred0"><a name="line123"></a>123 else
|
724
|
+
</span><span class="marked1"><a name="line124"></a>124 []
|
725
|
+
</span><span class="inferred0"><a name="line125"></a>125 end
|
726
|
+
</span><span class="inferred1"><a name="line126"></a>126 end
|
727
|
+
</span><span class="inferred0"><a name="line127"></a>127
|
728
|
+
</span><span class="inferred1"><a name="line128"></a>128 # invoke registered event of BEFORE_xxxx and yield block and invoke hook AFTER_xxxx.
|
729
|
+
</span><span class="marked0"><a name="line129"></a>129 def call_event_around name, *args, &block
|
730
|
+
</span><span class="marked1"><a name="line130"></a>130 name = name.to_s
|
731
|
+
</span><span class="marked0"><a name="line131"></a>131 around_name = "AROUND_#{name}"
|
732
|
+
</span><span class="inferred1"><a name="line132"></a>132
|
733
|
+
</span><span class="marked0"><a name="line133"></a>133 call_event("BEFORE_#{name}", *args)
|
734
|
+
</span><span class="marked1"><a name="line134"></a>134 if events = self.__classx_pluggable_events_of[around_name]
|
735
|
+
</span><span class="marked0"><a name="line135"></a>135 procs = []
|
736
|
+
</span><span class="marked1"><a name="line136"></a>136 procs << block
|
737
|
+
</span><span class="marked0"><a name="line137"></a>137 index = 0
|
738
|
+
</span><span class="marked1"><a name="line138"></a>138 nested_proc = events.inject(block) {|bl, event| proc { event[:plugin].__send__(event[:method], *args, &bl ) } }
|
739
|
+
</span><span class="marked0"><a name="line139"></a>139 nested_proc.call
|
740
|
+
</span><span class="inferred1"><a name="line140"></a>140 end
|
741
|
+
</span><span class="marked0"><a name="line141"></a>141 call_event("AFTER_#{name}", *args)
|
742
|
+
</span><span class="inferred1"><a name="line142"></a>142 end
|
743
|
+
</span><span class="inferred0"><a name="line143"></a>143
|
744
|
+
</span><span class="marked1"><a name="line144"></a>144 private
|
745
|
+
</span><span class="inferred0"><a name="line145"></a>145
|
746
|
+
</span><span class="marked1"><a name="line146"></a>146 module Util
|
747
|
+
</span><span class="marked0"><a name="line147"></a>147 def module2path mod
|
748
|
+
</span><span class="marked1"><a name="line148"></a>148 mod.split(/::/).map { |s|
|
749
|
+
</span><span class="marked0"><a name="line149"></a>149 s.gsub(/([A-Z][a-z]+)(?=[A-Z][a-z]*?)/, '\1_').gsub(/([A-Z])(?=[A-Z][a-z]+)/, '\1_').downcase
|
750
|
+
</span><span class="inferred1"><a name="line150"></a>150 }.join(File::SEPARATOR)
|
751
|
+
</span><span class="marked0"><a name="line151"></a>151 end
|
752
|
+
</span><span class="inferred1"><a name="line152"></a>152
|
753
|
+
</span><span class="marked0"><a name="line153"></a>153 def nested_const_get mod
|
754
|
+
</span><span class="marked1"><a name="line154"></a>154 name_spaces = mod.split(/::/)
|
755
|
+
</span><span class="marked0"><a name="line155"></a>155 result = ::Object
|
756
|
+
</span><span class="marked1"><a name="line156"></a>156 name_spaces.each do |const|
|
757
|
+
</span><span class="marked0"><a name="line157"></a>157 result = result.const_get(const)
|
758
|
+
</span><span class="inferred1"><a name="line158"></a>158 end
|
759
|
+
</span><span class="marked0"><a name="line159"></a>159 return result
|
760
|
+
</span><span class="inferred1"><a name="line160"></a>160 end
|
761
|
+
</span><span class="inferred0"><a name="line161"></a>161
|
762
|
+
</span><span class="marked1"><a name="line162"></a>162 def nested_autoload mod, path
|
763
|
+
</span><span class="marked0"><a name="line163"></a>163 name_spaces = mod.split(/::/)
|
764
|
+
</span><span class="marked1"><a name="line164"></a>164 target = name_spaces.pop
|
765
|
+
</span><span class="marked0"><a name="line165"></a>165 tmp = ::Object
|
766
|
+
</span><span class="marked1"><a name="line166"></a>166 name_spaces.each do |const|
|
767
|
+
</span><span class="marked0"><a name="line167"></a>167 tmp = tmp.const_get(const)
|
768
|
+
</span><span class="inferred1"><a name="line168"></a>168 end
|
769
|
+
</span><span class="marked0"><a name="line169"></a>169 tmp.autoload(target, path)
|
770
|
+
</span><span class="inferred1"><a name="line170"></a>170 end
|
771
|
+
</span><span class="inferred0"><a name="line171"></a>171
|
772
|
+
</span><span class="marked1"><a name="line172"></a>172 module_function :module2path, :nested_const_get, :nested_autoload
|
773
|
+
</span><span class="inferred0"><a name="line173"></a>173 end
|
774
|
+
</span><span class="inferred1"><a name="line174"></a>174
|
775
|
+
</span><span class="marked0"><a name="line175"></a>175 module ClassMethods
|
776
|
+
</span><span class="marked1"><a name="line176"></a>176 include ClassX::Pluggable::Util
|
777
|
+
</span><span class="inferred0"><a name="line177"></a>177
|
778
|
+
</span><span class="marked1"><a name="line178"></a>178 def component_class_get type, name, options={}
|
779
|
+
</span><span class="marked0"><a name="line179"></a>179 case name
|
780
|
+
</span><span class="marked1"><a name="line180"></a>180 when ::Class
|
781
|
+
</span><span class="uncovered0"><a name="line181"></a>181 return name
|
782
|
+
</span><span class="inferred1"><a name="line182"></a>182 else
|
783
|
+
</span><span class="marked0"><a name="line183"></a>183 mod_name = nil
|
784
|
+
</span><span class="marked1"><a name="line184"></a>184 target_name = nil
|
785
|
+
</span><span class="marked0"><a name="line185"></a>185 if name =~ /\A\+([\w:]+)\z/
|
786
|
+
</span><span class="marked1"><a name="line186"></a>186 target_name = $1
|
787
|
+
</span><span class="marked0"><a name="line187"></a>187 mod_name = [ self, type.capitalize, target_name ].join("::")
|
788
|
+
</span><span class="inferred1"><a name="line188"></a>188 else
|
789
|
+
</span><span class="marked0"><a name="line189"></a>189 mod_name = name
|
790
|
+
</span><span class="inferred1"><a name="line190"></a>190 end
|
791
|
+
</span><span class="marked0"><a name="line191"></a>191 begin
|
792
|
+
</span><span class="marked1"><a name="line192"></a>192 return nested_const_get(mod_name)
|
793
|
+
</span><span class="inferred0"><a name="line193"></a>193 rescue NameError => e
|
794
|
+
</span><span class="marked1"><a name="line194"></a>194 begin
|
795
|
+
</span><span class="marked0"><a name="line195"></a>195 if options[:plugin_dir]
|
796
|
+
</span><span class="uncovered1"><a name="line196"></a>196 options[:plugin_dir].each do |path|
|
797
|
+
</span><span class="uncovered0"><a name="line197"></a>197 begin
|
798
|
+
</span><span class="uncovered1"><a name="line198"></a>198 begin
|
799
|
+
</span><span class="uncovered0"><a name="line199"></a>199 self.const_get(type.capitalize).autoload(name, File.expand_path(File.join(path, module2path(target_name))))
|
800
|
+
</span><span class="uncovered1"><a name="line200"></a>200 rescue LoadError => e
|
801
|
+
</span><span class="uncovered0"><a name="line201"></a>201 raise ::ClassX::Pluggable::PluginLoadError, "class: #{mod_name} is not found"
|
802
|
+
</span><span class="uncovered1"><a name="line202"></a>202 end
|
803
|
+
</span><span class="uncovered0"><a name="line203"></a>203 return nested_const_get(mod_name)
|
804
|
+
</span><span class="uncovered1"><a name="line204"></a>204 rescue NameError => e
|
805
|
+
</span><span class="uncovered0"><a name="line205"></a>205 next
|
806
|
+
</span><span class="uncovered1"><a name="line206"></a>206 end
|
807
|
+
</span><span class="uncovered0"><a name="line207"></a>207 raise NameError, "must not happened unless your code is something wrong!!"
|
808
|
+
</span><span class="uncovered1"><a name="line208"></a>208 end
|
809
|
+
</span><span class="inferred0"><a name="line209"></a>209 else
|
810
|
+
</span><span class="marked1"><a name="line210"></a>210 nested_autoload(mod_name, module2path(mod_name))
|
811
|
+
</span><span class="marked0"><a name="line211"></a>211 nested_const_get mod_name
|
812
|
+
</span><span class="inferred1"><a name="line212"></a>212 end
|
813
|
+
</span><span class="uncovered0"><a name="line213"></a>213 rescue LoadError => e
|
814
|
+
</span><span class="uncovered1"><a name="line214"></a>214 raise ::ClassX::Pluggable::PluginLoadError, "class: #{mod_name} is not found."
|
815
|
+
</span><span class="uncovered0"><a name="line215"></a>215 end
|
816
|
+
</span><span class="uncovered1"><a name="line216"></a>216 end
|
817
|
+
</span><span class="uncovered0"><a name="line217"></a>217 end
|
818
|
+
</span><span class="marked1"><a name="line218"></a>218 end
|
819
|
+
</span><span class="inferred0"><a name="line219"></a>219 end
|
820
|
+
</span><span class="inferred1"><a name="line220"></a>220
|
821
|
+
</span><span class="marked0"><a name="line221"></a>221 def self.included klass
|
822
|
+
</span><span class="marked1"><a name="line222"></a>222 klass.extend ClassMethods
|
823
|
+
</span><span class="marked0"><a name="line223"></a>223 end
|
824
|
+
</span><span class="inferred1"><a name="line224"></a>224
|
825
|
+
</span><span class="inferred0"><a name="line225"></a>225 # It's useful for testing.
|
826
|
+
</span><span class="marked1"><a name="line226"></a>226 class MockContext
|
827
|
+
</span><span class="marked0"><a name="line227"></a>227 include ClassX
|
828
|
+
</span><span class="marked1"><a name="line228"></a>228 include ClassX::Pluggable
|
829
|
+
</span><span class="inferred0"><a name="line229"></a>229 end
|
830
|
+
</span><span class="inferred1"><a name="line230"></a>230 end
|
831
|
+
</span><span class="inferred0"><a name="line231"></a>231 end
|
832
|
+
</span></pre><hr/>
|
833
|
+
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
834
|
+
version 0.8.1.2.</p>
|
835
|
+
<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'/>
|
836
|
+
</a>
|
837
|
+
<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'/>
|
838
|
+
</a>
|
839
|
+
</p>
|
840
|
+
</body>
|
841
|
+
</html>
|