classx 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/ChangeLog +354 -0
  2. data/README +5 -0
  3. data/Rakefile +2 -2
  4. data/bench/attribute_get.rb +73 -0
  5. data/bench/attribute_set.rb +53 -19
  6. data/bench/define_attribute.rb +226 -0
  7. data/bench/initialize.rb +25 -7
  8. data/doc/output/coverage/index.html +74 -128
  9. data/doc/output/coverage/lib-classx-attribute_rb.html +291 -190
  10. data/doc/output/coverage/lib-classx-attributes_rb.html +167 -101
  11. data/doc/output/coverage/lib-classx-bracketable_rb.html +671 -0
  12. data/doc/output/coverage/lib-classx-class_attributes_rb.html +775 -0
  13. data/doc/output/coverage/lib-classx-commandable_rb.html +727 -0
  14. data/doc/output/coverage/{-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html → lib-classx-declare_rb.html} +60 -62
  15. data/doc/output/coverage/lib-classx-validate_rb.html +43 -41
  16. data/doc/output/coverage/lib-classx_rb.html +208 -78
  17. data/example/commandable.rb +1 -0
  18. data/lib/classx.rb +146 -16
  19. data/lib/classx/attribute.rb +244 -143
  20. data/lib/classx/attributes.rb +93 -27
  21. data/lib/classx/bracketable.rb +61 -0
  22. data/lib/classx/class_attributes.rb +165 -0
  23. data/lib/classx/commandable.rb +55 -4
  24. data/lib/classx/declare.rb +40 -3
  25. data/lib/classx/role/logger.rb +17 -13
  26. data/lib/classx/validate.rb +26 -24
  27. data/spec/classx/handles_spec.rb +21 -6
  28. data/spec/classx/serialize_spec.rb +57 -0
  29. data/spec/classx/{with_coerce.rb → with_coerce_spec.rb} +0 -0
  30. data/spec/classx/with_extend_spec.rb +58 -0
  31. data/spec/classx/with_include_spec.rb +58 -0
  32. data/spec/classx/with_validate_spec.rb +363 -0
  33. data/spec/classx/without_anyoption_spec.rb +1 -1
  34. data/spec/classx/writable_option_spec.rb +29 -4
  35. data/spec/classx_bracketable_spec.rb +160 -0
  36. data/spec/classx_class_attributes/default_option_spec.rb +121 -0
  37. data/spec/classx_class_attributes/dsl_accessor_spec.rb +88 -0
  38. data/spec/classx_class_attributes/handles_spec.rb +77 -0
  39. data/spec/classx_class_attributes/with_coerce_spec.rb +119 -0
  40. data/spec/classx_class_attributes/with_extend_spec.rb +64 -0
  41. data/spec/classx_class_attributes/with_include_spec.rb +64 -0
  42. data/spec/classx_class_attributes/with_multiple_class_spec.rb +60 -0
  43. data/spec/classx_class_attributes/with_validate_spec.rb +248 -0
  44. data/spec/classx_class_attributes/without_accessor_spec.rb +19 -0
  45. data/spec/classx_class_attributes/without_anyoption_spec.rb +21 -0
  46. data/spec/classx_class_attributes/writable_option_spec.rb +100 -0
  47. data/spec/classx_declare_spec.rb +117 -0
  48. data/spec/classx_validate_spec.rb +1 -3
  49. data/tasks/basic_tasks.rake +1 -1
  50. metadata +36 -26
  51. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +0 -932
  52. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +0 -779
  53. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +0 -867
  54. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +0 -1715
  55. data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +0 -1598
  56. data/spec/classx/with_extend.rb +0 -27
  57. data/spec/classx/with_include.rb +0 -27
@@ -1,867 +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>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/hunk.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 Aug 23 14:29:19 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
557
- </p>
558
- <hr/>
559
- <pre><span class='marked0'>Code reported as executed by Ruby looks like this...
560
- </span><span class='marked1'>and this: this line is also marked as covered.
561
- </span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
562
- </span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
563
- </span><span class='uncovered0'>Finally, here&apos;s a line marked as not executed.
564
- </span></pre>
565
- <table class='report'><thead><tr><td class='heading'>Name</td>
566
- <td class='heading'>Total lines</td>
567
- <td class='heading'>Lines of code</td>
568
- <td class='heading'>Total coverage</td>
569
- <td class='heading'>Code coverage</td>
570
- </tr>
571
- </thead>
572
- <tbody><tr class='light'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/hunk.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>257</tt>
575
- </td>
576
- <td class='lines_code'><tt>170</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>25.3%</tt>
579
- &nbsp;</td>
580
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='25'/>
581
- <td class='uncovered' width='75'/>
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'>11.8%</tt>
589
- &nbsp;</td>
590
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='12'/>
591
- <td class='uncovered' width='88'/>
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 #! /usr/env/bin ruby
602
- </span><span class="inferred1"><a name="line2"></a> 2 #--
603
- </span><span class="inferred0"><a name="line3"></a> 3 # Copyright 2004 Austin Ziegler &lt;diff-lcs@halostatue.ca&gt;
604
- </span><span class="inferred1"><a name="line4"></a> 4 # adapted from:
605
- </span><span class="inferred0"><a name="line5"></a> 5 # Algorithm::Diff (Perl) by Ned Konz &lt;perl@bike-nomad.com&gt;
606
- </span><span class="inferred1"><a name="line6"></a> 6 # Smalltalk by Mario I. Wolczko &lt;mario@wolczko.com&gt;
607
- </span><span class="inferred0"><a name="line7"></a> 7 # implements McIlroy-Hunt diff algorithm
608
- </span><span class="inferred1"><a name="line8"></a> 8 #
609
- </span><span class="inferred0"><a name="line9"></a> 9 # This program is free software. It may be redistributed and/or modified under
610
- </span><span class="inferred1"><a name="line10"></a> 10 # the terms of the GPL version 2 (or later), the Perl Artistic licence, or the
611
- </span><span class="inferred0"><a name="line11"></a> 11 # Ruby licence.
612
- </span><span class="inferred1"><a name="line12"></a> 12 #
613
- </span><span class="inferred0"><a name="line13"></a> 13 # $Id: hunk.rb,v 1.2 2004/08/08 20:33:09 austin Exp $
614
- </span><span class="inferred1"><a name="line14"></a> 14 #++
615
- </span><span class="inferred0"><a name="line15"></a> 15 # Contains Diff::LCS::Hunk for bin/ldiff.
616
- </span><span class="inferred1"><a name="line16"></a> 16
617
- </span><span class="marked0"><a name="line17"></a> 17 require 'diff/lcs/block'
618
- </span><span class="inferred1"><a name="line18"></a> 18
619
- </span><span class="inferred0"><a name="line19"></a> 19 # A Hunk is a group of Blocks which overlap because of the context
620
- </span><span class="inferred1"><a name="line20"></a> 20 # surrounding each block. (So if we're not using context, every hunk will
621
- </span><span class="inferred0"><a name="line21"></a> 21 # contain one block.) Used in the diff program (bin/diff).
622
- </span><span class="marked1"><a name="line22"></a> 22 class Diff::LCS::Hunk
623
- </span><span class="inferred0"><a name="line23"></a> 23 # Create a hunk using references to both the old and new data, as well as
624
- </span><span class="inferred1"><a name="line24"></a> 24 # the piece of data
625
- </span><span class="marked0"><a name="line25"></a> 25 def initialize(data_old, data_new, piece, context, file_length_difference)
626
- </span><span class="uncovered1"><a name="line26"></a> 26 # At first, a hunk will have just one Block in it
627
- </span><span class="uncovered0"><a name="line27"></a> 27 @blocks = [ Diff::LCS::Block.new(piece) ]
628
- </span><span class="uncovered1"><a name="line28"></a> 28 @data_old = data_old
629
- </span><span class="uncovered0"><a name="line29"></a> 29 @data_new = data_new
630
- </span><span class="uncovered1"><a name="line30"></a> 30
631
- </span><span class="uncovered0"><a name="line31"></a> 31 before = after = file_length_difference
632
- </span><span class="uncovered1"><a name="line32"></a> 32 after += @blocks[0].diff_size
633
- </span><span class="uncovered0"><a name="line33"></a> 33 @file_length_difference = after # The caller must get this manually
634
- </span><span class="uncovered1"><a name="line34"></a> 34
635
- </span><span class="uncovered0"><a name="line35"></a> 35 # Save the start &amp; end of each array. If the array doesn't exist
636
- </span><span class="uncovered1"><a name="line36"></a> 36 # (e.g., we're only adding items in this block), then figure out the
637
- </span><span class="uncovered0"><a name="line37"></a> 37 # line number based on the line number of the other file and the
638
- </span><span class="uncovered1"><a name="line38"></a> 38 # current difference in file lengths.
639
- </span><span class="uncovered0"><a name="line39"></a> 39 if @blocks[0].remove.empty?
640
- </span><span class="uncovered1"><a name="line40"></a> 40 a1 = a2 = nil
641
- </span><span class="uncovered0"><a name="line41"></a> 41 else
642
- </span><span class="uncovered1"><a name="line42"></a> 42 a1 = @blocks[0].remove[0].position
643
- </span><span class="uncovered0"><a name="line43"></a> 43 a2 = @blocks[0].remove[-1].position
644
- </span><span class="uncovered1"><a name="line44"></a> 44 end
645
- </span><span class="uncovered0"><a name="line45"></a> 45
646
- </span><span class="uncovered1"><a name="line46"></a> 46 if @blocks[0].insert.empty?
647
- </span><span class="uncovered0"><a name="line47"></a> 47 b1 = b2 = nil
648
- </span><span class="uncovered1"><a name="line48"></a> 48 else
649
- </span><span class="uncovered0"><a name="line49"></a> 49 b1 = @blocks[0].insert[0].position
650
- </span><span class="uncovered1"><a name="line50"></a> 50 b2 = @blocks[0].insert[-1].position
651
- </span><span class="uncovered0"><a name="line51"></a> 51 end
652
- </span><span class="uncovered1"><a name="line52"></a> 52
653
- </span><span class="uncovered0"><a name="line53"></a> 53 @start_old = a1 || (b1 - before)
654
- </span><span class="uncovered1"><a name="line54"></a> 54 @start_new = b1 || (a1 + before)
655
- </span><span class="uncovered0"><a name="line55"></a> 55 @end_old = a2 || (b2 - after)
656
- </span><span class="uncovered1"><a name="line56"></a> 56 @end_new = b2 || (a2 + after)
657
- </span><span class="uncovered0"><a name="line57"></a> 57
658
- </span><span class="uncovered1"><a name="line58"></a> 58 self.flag_context = context
659
- </span><span class="uncovered0"><a name="line59"></a> 59 end
660
- </span><span class="inferred1"><a name="line60"></a> 60
661
- </span><span class="marked0"><a name="line61"></a> 61 attr_reader :blocks
662
- </span><span class="marked1"><a name="line62"></a> 62 attr_reader :start_old, :start_new
663
- </span><span class="marked0"><a name="line63"></a> 63 attr_reader :end_old, :end_new
664
- </span><span class="marked1"><a name="line64"></a> 64 attr_reader :file_length_difference
665
- </span><span class="inferred0"><a name="line65"></a> 65
666
- </span><span class="inferred1"><a name="line66"></a> 66 # Change the &quot;start&quot; and &quot;end&quot; fields to note that context should be added
667
- </span><span class="inferred0"><a name="line67"></a> 67 # to this hunk
668
- </span><span class="marked1"><a name="line68"></a> 68 attr_accessor :flag_context
669
- </span><span class="marked0"><a name="line69"></a> 69 def flag_context=(context) #:nodoc:
670
- </span><span class="uncovered1"><a name="line70"></a> 70 return if context.nil? or context.zero?
671
- </span><span class="uncovered0"><a name="line71"></a> 71
672
- </span><span class="uncovered1"><a name="line72"></a> 72 add_start = (context &gt; @start_old) ? @start_old : context
673
- </span><span class="uncovered0"><a name="line73"></a> 73 @start_old -= add_start
674
- </span><span class="uncovered1"><a name="line74"></a> 74 @start_new -= add_start
675
- </span><span class="uncovered0"><a name="line75"></a> 75
676
- </span><span class="uncovered1"><a name="line76"></a> 76 if (@end_old + context) &gt; @data_old.size
677
- </span><span class="uncovered0"><a name="line77"></a> 77 add_end = @data_old.size - @end_old
678
- </span><span class="uncovered1"><a name="line78"></a> 78 else
679
- </span><span class="uncovered0"><a name="line79"></a> 79 add_end = context
680
- </span><span class="uncovered1"><a name="line80"></a> 80 end
681
- </span><span class="uncovered0"><a name="line81"></a> 81 @end_old += add_end
682
- </span><span class="uncovered1"><a name="line82"></a> 82 @end_new += add_end
683
- </span><span class="uncovered0"><a name="line83"></a> 83 end
684
- </span><span class="inferred1"><a name="line84"></a> 84
685
- </span><span class="marked0"><a name="line85"></a> 85 def unshift(hunk)
686
- </span><span class="uncovered1"><a name="line86"></a> 86 @start_old = hunk.start_old
687
- </span><span class="uncovered0"><a name="line87"></a> 87 @start_new = hunk.start_new
688
- </span><span class="uncovered1"><a name="line88"></a> 88 blocks.unshift(*hunk.blocks)
689
- </span><span class="uncovered0"><a name="line89"></a> 89 end
690
- </span><span class="inferred1"><a name="line90"></a> 90
691
- </span><span class="inferred0"><a name="line91"></a> 91 # Is there an overlap between hunk arg0 and old hunk arg1? Note: if end
692
- </span><span class="inferred1"><a name="line92"></a> 92 # of old hunk is one less than beginning of second, they overlap
693
- </span><span class="marked0"><a name="line93"></a> 93 def overlaps?(hunk = nil)
694
- </span><span class="uncovered1"><a name="line94"></a> 94 return nil if hunk.nil?
695
- </span><span class="uncovered0"><a name="line95"></a> 95
696
- </span><span class="uncovered1"><a name="line96"></a> 96 a = (@start_old - hunk.end_old) &lt;= 1
697
- </span><span class="uncovered0"><a name="line97"></a> 97 b = (@start_new - hunk.end_new) &lt;= 1
698
- </span><span class="uncovered1"><a name="line98"></a> 98 return (a or b)
699
- </span><span class="uncovered0"><a name="line99"></a> 99 end
700
- </span><span class="inferred1"><a name="line100"></a>100
701
- </span><span class="marked0"><a name="line101"></a>101 def diff(format)
702
- </span><span class="uncovered1"><a name="line102"></a>102 case format
703
- </span><span class="uncovered0"><a name="line103"></a>103 when :old
704
- </span><span class="uncovered1"><a name="line104"></a>104 old_diff
705
- </span><span class="uncovered0"><a name="line105"></a>105 when :unified
706
- </span><span class="uncovered1"><a name="line106"></a>106 unified_diff
707
- </span><span class="uncovered0"><a name="line107"></a>107 when :context
708
- </span><span class="uncovered1"><a name="line108"></a>108 context_diff
709
- </span><span class="uncovered0"><a name="line109"></a>109 when :ed
710
- </span><span class="uncovered1"><a name="line110"></a>110 self
711
- </span><span class="uncovered0"><a name="line111"></a>111 when :reverse_ed, :ed_finish
712
- </span><span class="uncovered1"><a name="line112"></a>112 ed_diff(format)
713
- </span><span class="uncovered0"><a name="line113"></a>113 else
714
- </span><span class="uncovered1"><a name="line114"></a>114 raise &quot;Unknown diff format #{format}.&quot;
715
- </span><span class="uncovered0"><a name="line115"></a>115 end
716
- </span><span class="uncovered1"><a name="line116"></a>116 end
717
- </span><span class="inferred0"><a name="line117"></a>117
718
- </span><span class="marked1"><a name="line118"></a>118 def each_old(block)
719
- </span><span class="uncovered0"><a name="line119"></a>119 @data_old[@start_old .. @end_old].each { |e| yield e }
720
- </span><span class="uncovered1"><a name="line120"></a>120 end
721
- </span><span class="inferred0"><a name="line121"></a>121
722
- </span><span class="marked1"><a name="line122"></a>122 private
723
- </span><span class="inferred0"><a name="line123"></a>123 # Note that an old diff can't have any context. Therefore, we know that
724
- </span><span class="inferred1"><a name="line124"></a>124 # there's only one block in the hunk.
725
- </span><span class="marked0"><a name="line125"></a>125 def old_diff
726
- </span><span class="uncovered1"><a name="line126"></a>126 warn &quot;Expecting only one block in an old diff hunk!&quot; if @blocks.size &gt; 1
727
- </span><span class="uncovered0"><a name="line127"></a>127 op_act = { &quot;+&quot; =&gt; 'a', &quot;-&quot; =&gt; 'd', &quot;!&quot; =&gt; &quot;c&quot; }
728
- </span><span class="uncovered1"><a name="line128"></a>128
729
- </span><span class="uncovered0"><a name="line129"></a>129 block = @blocks[0]
730
- </span><span class="uncovered1"><a name="line130"></a>130
731
- </span><span class="uncovered0"><a name="line131"></a>131 # Calculate item number range. Old diff range is just like a context
732
- </span><span class="uncovered1"><a name="line132"></a>132 # diff range, except the ranges are on one line with the action between
733
- </span><span class="uncovered0"><a name="line133"></a>133 # them.
734
- </span><span class="uncovered1"><a name="line134"></a>134 s = &quot;#{context_range(:old)}#{op_act[block.op]}#{context_range(:new)}\n&quot;
735
- </span><span class="uncovered0"><a name="line135"></a>135 # If removing anything, just print out all the remove lines in the hunk
736
- </span><span class="uncovered1"><a name="line136"></a>136 # which is just all the remove lines in the block.
737
- </span><span class="uncovered0"><a name="line137"></a>137 @data_old[@start_old .. @end_old].each { |e| s &lt;&lt; &quot;&lt; #{e}\n&quot; } unless block.remove.empty?
738
- </span><span class="uncovered1"><a name="line138"></a>138 s &lt;&lt; &quot;---\n&quot; if block.op == &quot;!&quot;
739
- </span><span class="uncovered0"><a name="line139"></a>139 @data_new[@start_new .. @end_new].each { |e| s &lt;&lt; &quot;&gt; #{e}\n&quot; } unless block.insert.empty?
740
- </span><span class="uncovered1"><a name="line140"></a>140 s
741
- </span><span class="uncovered0"><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 def unified_diff
744
- </span><span class="uncovered1"><a name="line144"></a>144 # Calculate item number range.
745
- </span><span class="uncovered0"><a name="line145"></a>145 s = &quot;@@ -#{unified_range(:old)} +#{unified_range(:new)} @@\n&quot;
746
- </span><span class="uncovered1"><a name="line146"></a>146
747
- </span><span class="uncovered0"><a name="line147"></a>147 # Outlist starts containing the hunk of the old file. Removing an item
748
- </span><span class="uncovered1"><a name="line148"></a>148 # just means putting a '-' in front of it. Inserting an item requires
749
- </span><span class="uncovered0"><a name="line149"></a>149 # getting it from the new file and splicing it in. We splice in
750
- </span><span class="uncovered1"><a name="line150"></a>150 # +num_added+ items. Remove blocks use +num_added+ because splicing
751
- </span><span class="uncovered0"><a name="line151"></a>151 # changed the length of outlist.
752
- </span><span class="uncovered1"><a name="line152"></a>152 #
753
- </span><span class="uncovered0"><a name="line153"></a>153 # We remove +num_removed+ items. Insert blocks use +num_removed+
754
- </span><span class="uncovered1"><a name="line154"></a>154 # because their item numbers -- corresponding to positions in the NEW
755
- </span><span class="uncovered0"><a name="line155"></a>155 # file -- don't take removed items into account.
756
- </span><span class="uncovered1"><a name="line156"></a>156 lo, hi, num_added, num_removed = @start_old, @end_old, 0, 0
757
- </span><span class="uncovered0"><a name="line157"></a>157
758
- </span><span class="uncovered1"><a name="line158"></a>158 outlist = @data_old[lo .. hi].collect { |e| e.gsub(/^/, ' ') }
759
- </span><span class="uncovered0"><a name="line159"></a>159
760
- </span><span class="uncovered1"><a name="line160"></a>160 @blocks.each do |block|
761
- </span><span class="uncovered0"><a name="line161"></a>161 block.remove.each do |item|
762
- </span><span class="uncovered1"><a name="line162"></a>162 op = item.action.to_s # -
763
- </span><span class="uncovered0"><a name="line163"></a>163 offset = item.position - lo + num_added
764
- </span><span class="uncovered1"><a name="line164"></a>164 outlist[offset].gsub!(/^ /, op.to_s)
765
- </span><span class="uncovered0"><a name="line165"></a>165 num_removed += 1
766
- </span><span class="uncovered1"><a name="line166"></a>166 end
767
- </span><span class="uncovered0"><a name="line167"></a>167 block.insert.each do |item|
768
- </span><span class="uncovered1"><a name="line168"></a>168 op = item.action.to_s # +
769
- </span><span class="uncovered0"><a name="line169"></a>169 offset = item.position - @start_new + num_removed
770
- </span><span class="uncovered1"><a name="line170"></a>170 outlist[offset, 0] = &quot;#{op}#{@data_new[item.position]}&quot;
771
- </span><span class="uncovered0"><a name="line171"></a>171 num_added += 1
772
- </span><span class="uncovered1"><a name="line172"></a>172 end
773
- </span><span class="uncovered0"><a name="line173"></a>173 end
774
- </span><span class="uncovered1"><a name="line174"></a>174
775
- </span><span class="uncovered0"><a name="line175"></a>175 s &lt;&lt; outlist.join(&quot;\n&quot;)
776
- </span><span class="uncovered1"><a name="line176"></a>176 end
777
- </span><span class="inferred0"><a name="line177"></a>177
778
- </span><span class="marked1"><a name="line178"></a>178 def context_diff
779
- </span><span class="uncovered0"><a name="line179"></a>179 s = &quot;***************\n&quot;
780
- </span><span class="uncovered1"><a name="line180"></a>180 s &lt;&lt; &quot;*** #{context_range(:old)} ****\n&quot;
781
- </span><span class="uncovered0"><a name="line181"></a>181 r = context_range(:new)
782
- </span><span class="uncovered1"><a name="line182"></a>182
783
- </span><span class="uncovered0"><a name="line183"></a>183 # Print out file 1 part for each block in context diff format if there
784
- </span><span class="uncovered1"><a name="line184"></a>184 # are any blocks that remove items
785
- </span><span class="uncovered0"><a name="line185"></a>185 lo, hi = @start_old, @end_old
786
- </span><span class="uncovered1"><a name="line186"></a>186 removes = @blocks.select { |e| not e.remove.empty? }
787
- </span><span class="uncovered0"><a name="line187"></a>187 if removes
788
- </span><span class="uncovered1"><a name="line188"></a>188 outlist = @data_old[lo .. hi].collect { |e| e.gsub(/^/, ' ') }
789
- </span><span class="uncovered0"><a name="line189"></a>189 removes.each do |block|
790
- </span><span class="uncovered1"><a name="line190"></a>190 block.remove.each do |item|
791
- </span><span class="uncovered0"><a name="line191"></a>191 outlist[item.position - lo].gsub!(/^ /) { block.op } # - or !
792
- </span><span class="uncovered1"><a name="line192"></a>192 end
793
- </span><span class="uncovered0"><a name="line193"></a>193 end
794
- </span><span class="uncovered1"><a name="line194"></a>194 s &lt;&lt; outlist.join(&quot;\n&quot;)
795
- </span><span class="uncovered0"><a name="line195"></a>195 end
796
- </span><span class="uncovered1"><a name="line196"></a>196
797
- </span><span class="uncovered0"><a name="line197"></a>197 s &lt;&lt; &quot;\n--- #{r} ----\n&quot;
798
- </span><span class="uncovered1"><a name="line198"></a>198 lo, hi = @start_new, @end_new
799
- </span><span class="uncovered0"><a name="line199"></a>199 inserts = @blocks.select { |e| not e.insert.empty? }
800
- </span><span class="uncovered1"><a name="line200"></a>200 if inserts
801
- </span><span class="uncovered0"><a name="line201"></a>201 outlist = @data_new[lo .. hi].collect { |e| e.gsub(/^/, ' ') }
802
- </span><span class="uncovered1"><a name="line202"></a>202 inserts.each do |block|
803
- </span><span class="uncovered0"><a name="line203"></a>203 block.insert.each do |item|
804
- </span><span class="uncovered1"><a name="line204"></a>204 outlist[item.position - lo].gsub!(/^ /) { block.op } # + or !
805
- </span><span class="uncovered0"><a name="line205"></a>205 end
806
- </span><span class="uncovered1"><a name="line206"></a>206 end
807
- </span><span class="uncovered0"><a name="line207"></a>207 s &lt;&lt; outlist.join(&quot;\n&quot;)
808
- </span><span class="uncovered1"><a name="line208"></a>208 end
809
- </span><span class="uncovered0"><a name="line209"></a>209 s
810
- </span><span class="uncovered1"><a name="line210"></a>210 end
811
- </span><span class="inferred0"><a name="line211"></a>211
812
- </span><span class="marked1"><a name="line212"></a>212 def ed_diff(format)
813
- </span><span class="uncovered0"><a name="line213"></a>213 op_act = { &quot;+&quot; =&gt; 'a', &quot;-&quot; =&gt; 'd', &quot;!&quot; =&gt; &quot;c&quot; }
814
- </span><span class="uncovered1"><a name="line214"></a>214 warn &quot;Expecting only one block in an old diff hunk!&quot; if @blocks.size &gt; 1
815
- </span><span class="uncovered0"><a name="line215"></a>215
816
- </span><span class="uncovered1"><a name="line216"></a>216 if format == :reverse_ed
817
- </span><span class="uncovered0"><a name="line217"></a>217 s = &quot;#{op_act[@blocks[0].op]}#{context_range(:old)}\n&quot;
818
- </span><span class="uncovered1"><a name="line218"></a>218 else
819
- </span><span class="uncovered0"><a name="line219"></a>219 s = &quot;#{context_range(:old).gsub(/,/, ' ')}#{op_act[@blocks[0].op]}\n&quot;
820
- </span><span class="uncovered1"><a name="line220"></a>220 end
821
- </span><span class="uncovered0"><a name="line221"></a>221
822
- </span><span class="uncovered1"><a name="line222"></a>222 unless @blocks[0].insert.empty?
823
- </span><span class="uncovered0"><a name="line223"></a>223 @data_new[@start_new .. @end_new].each { |e| s &lt;&lt; &quot;#{e}\n&quot; }
824
- </span><span class="uncovered1"><a name="line224"></a>224 s &lt;&lt; &quot;.\n&quot;
825
- </span><span class="uncovered0"><a name="line225"></a>225 end
826
- </span><span class="uncovered1"><a name="line226"></a>226 s
827
- </span><span class="uncovered0"><a name="line227"></a>227 end
828
- </span><span class="inferred1"><a name="line228"></a>228
829
- </span><span class="inferred0"><a name="line229"></a>229 # Generate a range of item numbers to print. Only print 1 number if the
830
- </span><span class="inferred1"><a name="line230"></a>230 # range has only one item in it. Otherwise, it's 'start,end'
831
- </span><span class="marked0"><a name="line231"></a>231 def context_range(mode)
832
- </span><span class="uncovered1"><a name="line232"></a>232 case mode
833
- </span><span class="uncovered0"><a name="line233"></a>233 when :old
834
- </span><span class="uncovered1"><a name="line234"></a>234 s, e = (@start_old + 1), (@end_old + 1)
835
- </span><span class="uncovered0"><a name="line235"></a>235 when :new
836
- </span><span class="uncovered1"><a name="line236"></a>236 s, e = (@start_new + 1), (@end_new + 1)
837
- </span><span class="uncovered0"><a name="line237"></a>237 end
838
- </span><span class="uncovered1"><a name="line238"></a>238
839
- </span><span class="uncovered0"><a name="line239"></a>239 (s &lt; e) ? &quot;#{s},#{e}&quot; : &quot;#{e}&quot;
840
- </span><span class="uncovered1"><a name="line240"></a>240 end
841
- </span><span class="inferred0"><a name="line241"></a>241
842
- </span><span class="inferred1"><a name="line242"></a>242 # Generate a range of item numbers to print for unified diff. Print
843
- </span><span class="inferred0"><a name="line243"></a>243 # number where block starts, followed by number of lines in the block
844
- </span><span class="inferred1"><a name="line244"></a>244 # (don't print number of lines if it's 1)
845
- </span><span class="marked0"><a name="line245"></a>245 def unified_range(mode)
846
- </span><span class="uncovered1"><a name="line246"></a>246 case mode
847
- </span><span class="uncovered0"><a name="line247"></a>247 when :old
848
- </span><span class="uncovered1"><a name="line248"></a>248 s, e = (@start_old + 1), (@end_old + 1)
849
- </span><span class="uncovered0"><a name="line249"></a>249 when :new
850
- </span><span class="uncovered1"><a name="line250"></a>250 s, e = (@start_new + 1), (@end_new + 1)
851
- </span><span class="uncovered0"><a name="line251"></a>251 end
852
- </span><span class="uncovered1"><a name="line252"></a>252
853
- </span><span class="uncovered0"><a name="line253"></a>253 length = e - s + 1
854
- </span><span class="uncovered1"><a name="line254"></a>254 first = (length &lt; 2) ? e : s # &quot;strange, but correct&quot;
855
- </span><span class="uncovered0"><a name="line255"></a>255 (length == 1) ? &quot;#{first}&quot; : &quot;#{first},#{length}&quot;
856
- </span><span class="uncovered1"><a name="line256"></a>256 end
857
- </span><span class="uncovered0"><a name="line257"></a>257 end
858
- </span></pre><hr/>
859
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
860
- version 0.8.1.2.</p>
861
- <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'/>
862
- </a>
863
- <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'/>
864
- </a>
865
- </p>
866
- </body>
867
- </html>