hash_dealer 1.4.10 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/VERSION +1 -1
  2. data/coverage/assets/0.5.3/app.js +88 -0
  3. data/coverage/assets/0.5.3/fancybox/blank.gif +0 -0
  4. data/coverage/assets/0.5.3/fancybox/fancy_close.png +0 -0
  5. data/coverage/assets/0.5.3/fancybox/fancy_loading.png +0 -0
  6. data/coverage/assets/0.5.3/fancybox/fancy_nav_left.png +0 -0
  7. data/coverage/assets/0.5.3/fancybox/fancy_nav_right.png +0 -0
  8. data/coverage/assets/0.5.3/fancybox/fancy_shadow_e.png +0 -0
  9. data/coverage/assets/0.5.3/fancybox/fancy_shadow_n.png +0 -0
  10. data/coverage/assets/0.5.3/fancybox/fancy_shadow_ne.png +0 -0
  11. data/coverage/assets/0.5.3/fancybox/fancy_shadow_nw.png +0 -0
  12. data/coverage/assets/0.5.3/fancybox/fancy_shadow_s.png +0 -0
  13. data/coverage/assets/0.5.3/fancybox/fancy_shadow_se.png +0 -0
  14. data/coverage/assets/0.5.3/fancybox/fancy_shadow_sw.png +0 -0
  15. data/coverage/assets/0.5.3/fancybox/fancy_shadow_w.png +0 -0
  16. data/coverage/assets/0.5.3/fancybox/fancy_title_left.png +0 -0
  17. data/coverage/assets/0.5.3/fancybox/fancy_title_main.png +0 -0
  18. data/coverage/assets/0.5.3/fancybox/fancy_title_over.png +0 -0
  19. data/coverage/assets/0.5.3/fancybox/fancy_title_right.png +0 -0
  20. data/coverage/assets/0.5.3/fancybox/fancybox-x.png +0 -0
  21. data/coverage/assets/0.5.3/fancybox/fancybox-y.png +0 -0
  22. data/coverage/assets/0.5.3/fancybox/fancybox.png +0 -0
  23. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css +363 -0
  24. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  25. data/coverage/assets/0.5.3/favicon_green.png +0 -0
  26. data/coverage/assets/0.5.3/favicon_red.png +0 -0
  27. data/coverage/assets/0.5.3/favicon_yellow.png +0 -0
  28. data/coverage/assets/0.5.3/highlight.css +129 -0
  29. data/coverage/assets/0.5.3/highlight.pack.js +1 -0
  30. data/coverage/assets/0.5.3/jquery-1.6.2.min.js +18 -0
  31. data/coverage/assets/0.5.3/jquery.dataTables.min.js +152 -0
  32. data/coverage/assets/0.5.3/jquery.timeago.js +141 -0
  33. data/coverage/assets/0.5.3/jquery.url.js +174 -0
  34. data/coverage/assets/0.5.3/loading.gif +0 -0
  35. data/coverage/assets/0.5.3/magnify.png +0 -0
  36. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  37. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  38. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  39. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  40. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  41. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  42. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  43. data/coverage/assets/0.5.3/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  44. data/coverage/assets/0.5.3/smoothness/images/ui-icons_222222_256x240.png +0 -0
  45. data/coverage/assets/0.5.3/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  46. data/coverage/assets/0.5.3/smoothness/images/ui-icons_454545_256x240.png +0 -0
  47. data/coverage/assets/0.5.3/smoothness/images/ui-icons_888888_256x240.png +0 -0
  48. data/coverage/assets/0.5.3/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  49. data/coverage/assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  50. data/coverage/assets/0.5.3/stylesheet.css +383 -0
  51. data/coverage/index.html +3777 -0
  52. data/hash_dealer.gemspec +4 -24
  53. data/lib/hash.rb +34 -0
  54. data/lib/hash_dealer.rb +24 -4
  55. data/pkg/hash_dealer-1.4.10.gem +0 -0
  56. data/spec/lib/hash_dealer_spec.rb +18 -0
  57. metadata +59 -11
  58. data/.document +0 -5
  59. data/.rspec +0 -3
@@ -0,0 +1,383 @@
1
+ /* -----------------------------------------------------------------------
2
+
3
+
4
+ Blueprint CSS Framework 0.9
5
+ http://blueprintcss.org
6
+
7
+ * Copyright (c) 2007-Present. See LICENSE for more info.
8
+ * See README for instructions on how to use Blueprint.
9
+ * For credits and origins, see AUTHORS.
10
+ * This is a compressed file. See the sources in the 'src' directory.
11
+
12
+ ----------------------------------------------------------------------- */
13
+
14
+ /* reset.css */
15
+ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
16
+ article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
17
+ body {line-height:1.5;}
18
+ table {border-collapse:separate;border-spacing:0;}
19
+ caption, th, td {text-align:left;font-weight:normal;}
20
+ table, td, th {vertical-align:middle;}
21
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
22
+ blockquote, q {quotes:"" "";}
23
+ a img {border:none;}
24
+
25
+ /* typography.css */
26
+ html {font-size:100.01%;}
27
+ body {font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
28
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
29
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
30
+ h2 {font-size:2em;margin-bottom:0.75em;}
31
+ h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
32
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
33
+ h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
34
+ h6 {font-size:1em;font-weight:bold;}
35
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
36
+ p {margin:0 0 1.5em;}
37
+ p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
38
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
39
+ a:focus, a:hover {color:#000;}
40
+ a {color:#009;text-decoration:underline;}
41
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
42
+ strong {font-weight:bold;}
43
+ em, dfn {font-style:italic;}
44
+ dfn {font-weight:bold;}
45
+ sup, sub {line-height:0;}
46
+ abbr, acronym {border-bottom:1px dotted #666;}
47
+ address {margin:0 0 1.5em;font-style:italic;}
48
+ del {color:#666;}
49
+ pre {margin:1.5em 0;white-space:pre;}
50
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
51
+ li ul, li ol {margin:0;}
52
+ ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
53
+ ul {list-style-type:disc;}
54
+ ol {list-style-type:decimal;}
55
+ dl {margin:0 0 1.5em 0;}
56
+ dl dt {font-weight:bold;}
57
+ dd {margin-left:1.5em;}
58
+ table {margin-bottom:1.4em;width:100%;}
59
+ th {font-weight:bold;}
60
+ thead th {background:#c3d9ff;}
61
+ th, td, caption {padding:4px 10px 4px 5px;}
62
+ tr.even td {background:#efefef;}
63
+ tfoot {font-style:italic;}
64
+ caption {background:#eee;}
65
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
66
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
67
+ .hide {display:none;}
68
+ .quiet {color:#666;}
69
+ .loud {color:#000;}
70
+ .highlight {background:#ff0;}
71
+ .added {background:#060;color:#fff;}
72
+ .removed {background:#900;color:#fff;}
73
+ .first {margin-left:0;padding-left:0;}
74
+ .last {margin-right:0;padding-right:0;}
75
+ .top {margin-top:0;padding-top:0;}
76
+ .bottom {margin-bottom:0;padding-bottom:0;}
77
+
78
+ /* forms.css */
79
+ label {font-weight:bold;}
80
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
81
+ legend {font-weight:bold;font-size:1.2em;}
82
+ input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
83
+ input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
84
+ input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
85
+ input.text, input.title {width:300px;padding:5px;}
86
+ input.title {font-size:1.5em;}
87
+ textarea {width:390px;height:250px;padding:5px;}
88
+ input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
89
+ form.inline {line-height:3;}
90
+ form.inline p {margin-bottom:0;}
91
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
92
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
93
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
94
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
95
+ .error a {color:#8a1f11;}
96
+ .notice a {color:#514721;}
97
+ .success a {color:#264409;}
98
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
99
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
100
+ hr.space {background:#fff;color:#fff;visibility:hidden;}
101
+ .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
102
+ .clearfix, .container {display:block;}
103
+ .clear {clear:both;}
104
+
105
+ #loading {
106
+ position: fixed;
107
+ left: 40%;
108
+ top: 50%;
109
+ }
110
+
111
+ a {
112
+ color: #333;
113
+ text-decoration: none;
114
+ }
115
+
116
+ a:hover {
117
+ color: #000;
118
+ text-decoration: underline;
119
+ }
120
+
121
+ body {
122
+ font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif;
123
+ padding: 12px;
124
+ background-color: #333;
125
+ }
126
+
127
+ h1, h2, h3, h4 {
128
+ color: #1C2324;
129
+ margin: 0;
130
+ padding: 0;
131
+ margin-bottom: 12px;
132
+ }
133
+
134
+ table {
135
+ width: 100%;
136
+ }
137
+
138
+ #content {
139
+ clear: left;
140
+ background-color: white;
141
+ border: 2px solid #ddd;
142
+ border-top: 8px solid #ddd;
143
+ padding: 18px;
144
+ -webkit-border-bottom-left-radius: 5px;
145
+ -webkit-border-bottom-right-radius: 5px;
146
+ -webkit-border-top-right-radius: 5px;
147
+ -moz-border-radius-bottomleft: 5px;
148
+ -moz-border-radius-bottomright: 5px;
149
+ -moz-border-radius-topright: 5px;
150
+ border-bottom-left-radius: 5px;
151
+ border-bottom-right-radius: 5px;
152
+ border-top-right-radius: 5px;
153
+ }
154
+
155
+ .dataTables_filter, .dataTables_info {
156
+ padding: 2px 6px;
157
+ }
158
+
159
+ abbr.timeago {
160
+ text-decoration: none;
161
+ border: none;
162
+ font-weight: bold;
163
+ }
164
+
165
+ .timestamp {
166
+ float: right;
167
+ color: #ddd;
168
+ }
169
+
170
+ .group_tabs {
171
+ list-style: none;
172
+ float: left;
173
+ margin: 0;
174
+ padding: 0;
175
+ }
176
+ .group_tabs li {
177
+ display: inline;
178
+ float: left;
179
+ }
180
+
181
+ .group_tabs li a {
182
+ font-family: Helvetica, Arial, sans-serif;
183
+ display: block;
184
+ float: left;
185
+ text-decoration: none;
186
+ padding: 4px 8px;
187
+ background-color: #aaa;
188
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#DDD), to(#aaa));
189
+ background: -moz-linear-gradient(#DDD, #aaa);
190
+ background: linear-gradient(#DDD, #aaa);
191
+ text-shadow: #e5e5e5 1px 1px 0px;
192
+ border-bottom: none;
193
+ color: #333;
194
+ font-weight: bold;
195
+ margin-right: 8px;
196
+ border-top: 1px solid #efefef;
197
+ -webkit-border-top-left-radius: 2px;
198
+ -webkit-border-top-right-radius: 2px;
199
+ -moz-border-radius-topleft: 2px;
200
+ -moz-border-radius-topright: 2px;
201
+ border-top-left-radius: 2px;
202
+ border-top-right-radius: 2px;
203
+ }
204
+
205
+ .group_tabs li a:hover {
206
+ background-color: #ccc;
207
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eee), to(#aaa));
208
+ background: -moz-linear-gradient(#eee, #aaa);
209
+ background: linear-gradient(#eee, #aaa);
210
+ }
211
+
212
+ .group_tabs li a:active {
213
+ padding-top: 5px;
214
+ padding-bottom: 3px;
215
+ }
216
+
217
+ .group_tabs li.active a {
218
+ color: black;
219
+ text-shadow: #fff 1px 1px 0px;
220
+ background-color: #ddd;
221
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#fff), to(#ddd));
222
+ background: -moz-linear-gradient(#fff, #ddd);
223
+ background: linear-gradient(#fff, #ddd);
224
+ }
225
+
226
+ .file_list {
227
+ margin-bottom: 18px;
228
+ }
229
+
230
+ a.src_link {
231
+ background: url('./magnify.png') no-repeat left 50%;
232
+ padding-left: 18px;
233
+ }
234
+
235
+ tr, td {
236
+ margin: 0;
237
+ padding: 0;
238
+ }
239
+
240
+ th {
241
+ white-space: nowrap;
242
+ }
243
+
244
+ th.ui-state-default {
245
+ cursor: pointer;
246
+ }
247
+
248
+ th span.ui-icon {
249
+ float: left;
250
+ }
251
+
252
+ td {
253
+ padding: 4px 8px;
254
+ }
255
+
256
+ td.strong {
257
+ font-weight: bold;
258
+ }
259
+
260
+ .source_table h3, .source_table h4 {
261
+ padding: 0;
262
+ margin: 0;
263
+ margin-bottom: 4px;
264
+ }
265
+
266
+ .source_table .header {
267
+ padding: 10px;
268
+ }
269
+
270
+ .source_table pre {
271
+ margin: 0;
272
+ padding: 0;
273
+ white-space: normal;
274
+ }
275
+
276
+ .source_table pre, .source_table code {
277
+ color: #000;
278
+ font-family: "Monaco", "Inconsolata", "Consolas", monospace;
279
+ }
280
+
281
+ .source_table pre {
282
+ background-color: #333;
283
+ }
284
+
285
+ .source_table pre ol {
286
+ margin: 0px;
287
+ padding: 0px;
288
+ margin-left: 45px;
289
+ font-size: 12px;
290
+ color: white;
291
+ }
292
+
293
+ .source_table pre li {
294
+ margin: 0px;
295
+ padding: 2px 6px;
296
+ border-left: 5px solid white;
297
+ }
298
+
299
+ .source_table pre li code {
300
+ white-space: pre;
301
+ white-space: pre-wrap;
302
+ }
303
+
304
+ .source_table pre .hits {
305
+ float: right;
306
+ margin-left: 10px;
307
+ padding: 2px 4px;
308
+
309
+ background-color: #444;
310
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222), to(#666));
311
+ background: -moz-linear-gradient(#222, #666);
312
+ background: linear-gradient(#222, #666);
313
+
314
+ color: white;
315
+ font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
316
+ font-size: 10px;
317
+ font-weight: bold;
318
+ text-align: center;
319
+ border-radius: 6px;
320
+ }
321
+
322
+ #footer {
323
+ color: #ddd;
324
+ font-size: 12px;
325
+ font-weight: bold;
326
+ margin-top: 12px;
327
+ text-align: right;
328
+ }
329
+ #footer a {
330
+ color: #eee;
331
+ text-decoration: underline;
332
+ }
333
+ #footer a:hover {
334
+ color: #fff;
335
+ text-decoration: none;
336
+ }
337
+
338
+ .green {
339
+ color: #090;
340
+ }
341
+ .red {
342
+ color: #900;
343
+ }
344
+ .yellow {
345
+ color: #da0;
346
+ }
347
+ .source_table .covered {
348
+ border-color: #090;
349
+ }
350
+ .source_table .missed {
351
+ border-color: #900;
352
+ }
353
+ .source_table .never {
354
+ border-color: black;
355
+ }
356
+ .source_table .skipped {
357
+ border-color: #fc0;
358
+ }
359
+
360
+ .source_table .covered:nth-child(odd) {
361
+ background-color: #CDF2CD;
362
+ }
363
+ .source_table .covered:nth-child(even) {
364
+ background-color: #DBF2DB;
365
+ }
366
+ .source_table .missed:nth-child(odd) {
367
+ background-color: #F7C0C0;
368
+ }
369
+ .source_table .missed:nth-child(even) {
370
+ background-color: #F7CFCF;
371
+ }
372
+ .source_table .never:nth-child(odd) {
373
+ background-color: #efefef;
374
+ }
375
+ .source_table .never:nth-child(even) {
376
+ background-color: #f4f4f4;
377
+ }
378
+ .source_table .skipped:nth-child(odd) {
379
+ background-color: #FBF0C0;
380
+ }
381
+ .source_table .skipped:nth-child(even) {
382
+ background-color: #FBFfCf;
383
+ }
@@ -0,0 +1,3777 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Hash dealer</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.5.3/jquery-1.6.2.min.js' type='text/javascript'></script>
7
+ <script src='./assets/0.5.3/jquery.dataTables.min.js' type='text/javascript'></script>
8
+ <script src='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js' type='text/javascript'></script>
9
+ <script src='./assets/0.5.3/jquery.timeago.js' type='text/javascript'></script>
10
+ <script src='./assets/0.5.3/jquery.url.js' type='text/javascript'></script>
11
+ <script src='./assets/0.5.3/highlight.pack.js' type='text/javascript'></script>
12
+ <script src='./assets/0.5.3/app.js' type='text/javascript'></script>
13
+ <link href='./assets/0.5.3/stylesheet.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
14
+ <link href='./assets/0.5.3/highlight.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
15
+ <link href='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
16
+ <link href='./assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
17
+ <link rel="shortcut icon" type="image/png" href="./assets/0.5.3/favicon_yellow.png" />
18
+ <link rel="icon" type="image/png" href="./assets/0.5.3/favicon.png" />
19
+ </head>
20
+
21
+ <body>
22
+ <div id="loading">
23
+ <img src="./assets/0.5.3/loading.gif" alt="loading"/>
24
+ </div>
25
+ <div id="wrapper" style="display:none;">
26
+ <div class="timestamp">Generated <abbr class="timeago" title="2012-12-27T12:57:33-05:00">2012-12-27T12:57:33-05:00</abbr></div>
27
+ <ul class="group_tabs"></ul>
28
+
29
+ <div id="content">
30
+ <div class="file_list_container" id="AllFiles">
31
+ <h2>
32
+ <span class="group_name">All Files</span>
33
+ (<span class="covered_percent"><span class="yellow">80.41%</span></span>
34
+ covered at
35
+ <span class="covered_strength">
36
+ <span class="green">
37
+ 13.55
38
+ </span>
39
+ </span> hits/line)
40
+ </h2>
41
+ <a name="AllFiles"></a>
42
+ <div>
43
+ <b>6</b> files in total.
44
+ <b>291</b> relevant lines.
45
+ <span class="green"><b>234</b> lines covered</span> and
46
+ <span class="red"><b>57</b> lines missed </span>
47
+ </div>
48
+ <table class="file_list">
49
+ <thead>
50
+ <tr>
51
+ <th>File</th>
52
+ <th>% covered</th>
53
+ <th>Lines</th>
54
+ <th>Relevant Lines</th>
55
+ <th>Lines covered</th>
56
+ <th>Lines missed</th>
57
+ <th>Avg. Hits / Line</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+
62
+ <tr>
63
+ <td class="strong"><a href="#23ece676ee554bd0a62670e8964fe96af2adc01a" class="src_link" title="lib/comparator.rb">lib/comparator.rb</a></td>
64
+ <td class="green strong">95.56 %</td>
65
+ <td>74</td>
66
+ <td>45</td>
67
+ <td>43</td>
68
+ <td>2</td>
69
+ <td>12.4</td>
70
+ </tr>
71
+
72
+ <tr>
73
+ <td class="strong"><a href="#62f8063523b24e1e0397e524e8e048ddb0ac289c" class="src_link" title="lib/core_extensions.rb">lib/core_extensions.rb</a></td>
74
+ <td class="yellow strong">88.24 %</td>
75
+ <td>183</td>
76
+ <td>85</td>
77
+ <td>75</td>
78
+ <td>10</td>
79
+ <td>35.9</td>
80
+ </tr>
81
+
82
+ <tr>
83
+ <td class="strong"><a href="#9082f1e417147c61ee326c565b15a99cad953b35" class="src_link" title="lib/hash_dealer.rb">lib/hash_dealer.rb</a></td>
84
+ <td class="green strong">97.37 %</td>
85
+ <td>72</td>
86
+ <td>38</td>
87
+ <td>37</td>
88
+ <td>1</td>
89
+ <td>21.0</td>
90
+ </tr>
91
+
92
+ <tr>
93
+ <td class="strong"><a href="#4cc7721b735165eef9b1e5afd4a168c1a72d5103" class="src_link" title="lib/matcher.rb">lib/matcher.rb</a></td>
94
+ <td class="red strong">48.84 %</td>
95
+ <td>69</td>
96
+ <td>43</td>
97
+ <td>21</td>
98
+ <td>22</td>
99
+ <td>2.2</td>
100
+ </tr>
101
+
102
+ <tr>
103
+ <td class="strong"><a href="#a262d63e5dc399019853b13f0e4b947eb9908f86" class="src_link" title="lib/path_string.rb">lib/path_string.rb</a></td>
104
+ <td class="red strong">69.57 %</td>
105
+ <td>125</td>
106
+ <td>69</td>
107
+ <td>48</td>
108
+ <td>21</td>
109
+ <td>6.4</td>
110
+ </tr>
111
+
112
+ <tr>
113
+ <td class="strong"><a href="#a53828a5413df9e3a1d0192504eac81ee4166020" class="src_link" title="lib/variable_array.rb">lib/variable_array.rb</a></td>
114
+ <td class="green strong">90.91 %</td>
115
+ <td>18</td>
116
+ <td>11</td>
117
+ <td>10</td>
118
+ <td>1</td>
119
+ <td>3.4</td>
120
+ </tr>
121
+
122
+ </tbody>
123
+ </table>
124
+ </div>
125
+
126
+
127
+
128
+ <div class="file_list_container" id="Controllers">
129
+ <h2>
130
+ <span class="group_name">Controllers</span>
131
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
132
+ covered at
133
+ <span class="covered_strength">
134
+ <span class="red">
135
+ 0.0
136
+ </span>
137
+ </span> hits/line)
138
+ </h2>
139
+ <a name="Controllers"></a>
140
+ <div>
141
+ <b>0</b> files in total.
142
+ <b>0.0</b> relevant lines.
143
+ <span class="green"><b>0.0</b> lines covered</span> and
144
+ <span class="red"><b>0.0</b> lines missed </span>
145
+ </div>
146
+ <table class="file_list">
147
+ <thead>
148
+ <tr>
149
+ <th>File</th>
150
+ <th>% covered</th>
151
+ <th>Lines</th>
152
+ <th>Relevant Lines</th>
153
+ <th>Lines covered</th>
154
+ <th>Lines missed</th>
155
+ <th>Avg. Hits / Line</th>
156
+ </tr>
157
+ </thead>
158
+ <tbody>
159
+
160
+ </tbody>
161
+ </table>
162
+ </div>
163
+
164
+
165
+ <div class="file_list_container" id="Models">
166
+ <h2>
167
+ <span class="group_name">Models</span>
168
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
169
+ covered at
170
+ <span class="covered_strength">
171
+ <span class="red">
172
+ 0.0
173
+ </span>
174
+ </span> hits/line)
175
+ </h2>
176
+ <a name="Models"></a>
177
+ <div>
178
+ <b>0</b> files in total.
179
+ <b>0.0</b> relevant lines.
180
+ <span class="green"><b>0.0</b> lines covered</span> and
181
+ <span class="red"><b>0.0</b> lines missed </span>
182
+ </div>
183
+ <table class="file_list">
184
+ <thead>
185
+ <tr>
186
+ <th>File</th>
187
+ <th>% covered</th>
188
+ <th>Lines</th>
189
+ <th>Relevant Lines</th>
190
+ <th>Lines covered</th>
191
+ <th>Lines missed</th>
192
+ <th>Avg. Hits / Line</th>
193
+ </tr>
194
+ </thead>
195
+ <tbody>
196
+
197
+ </tbody>
198
+ </table>
199
+ </div>
200
+
201
+
202
+ <div class="file_list_container" id="Mailers">
203
+ <h2>
204
+ <span class="group_name">Mailers</span>
205
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
206
+ covered at
207
+ <span class="covered_strength">
208
+ <span class="red">
209
+ 0.0
210
+ </span>
211
+ </span> hits/line)
212
+ </h2>
213
+ <a name="Mailers"></a>
214
+ <div>
215
+ <b>0</b> files in total.
216
+ <b>0.0</b> relevant lines.
217
+ <span class="green"><b>0.0</b> lines covered</span> and
218
+ <span class="red"><b>0.0</b> lines missed </span>
219
+ </div>
220
+ <table class="file_list">
221
+ <thead>
222
+ <tr>
223
+ <th>File</th>
224
+ <th>% covered</th>
225
+ <th>Lines</th>
226
+ <th>Relevant Lines</th>
227
+ <th>Lines covered</th>
228
+ <th>Lines missed</th>
229
+ <th>Avg. Hits / Line</th>
230
+ </tr>
231
+ </thead>
232
+ <tbody>
233
+
234
+ </tbody>
235
+ </table>
236
+ </div>
237
+
238
+
239
+ <div class="file_list_container" id="Helpers">
240
+ <h2>
241
+ <span class="group_name">Helpers</span>
242
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
243
+ covered at
244
+ <span class="covered_strength">
245
+ <span class="red">
246
+ 0.0
247
+ </span>
248
+ </span> hits/line)
249
+ </h2>
250
+ <a name="Helpers"></a>
251
+ <div>
252
+ <b>0</b> files in total.
253
+ <b>0.0</b> relevant lines.
254
+ <span class="green"><b>0.0</b> lines covered</span> and
255
+ <span class="red"><b>0.0</b> lines missed </span>
256
+ </div>
257
+ <table class="file_list">
258
+ <thead>
259
+ <tr>
260
+ <th>File</th>
261
+ <th>% covered</th>
262
+ <th>Lines</th>
263
+ <th>Relevant Lines</th>
264
+ <th>Lines covered</th>
265
+ <th>Lines missed</th>
266
+ <th>Avg. Hits / Line</th>
267
+ </tr>
268
+ </thead>
269
+ <tbody>
270
+
271
+ </tbody>
272
+ </table>
273
+ </div>
274
+
275
+
276
+ <div class="file_list_container" id="Libraries">
277
+ <h2>
278
+ <span class="group_name">Libraries</span>
279
+ (<span class="covered_percent"><span class="yellow">80.41%</span></span>
280
+ covered at
281
+ <span class="covered_strength">
282
+ <span class="green">
283
+ 13.55
284
+ </span>
285
+ </span> hits/line)
286
+ </h2>
287
+ <a name="Libraries"></a>
288
+ <div>
289
+ <b>6</b> files in total.
290
+ <b>291</b> relevant lines.
291
+ <span class="green"><b>234</b> lines covered</span> and
292
+ <span class="red"><b>57</b> lines missed </span>
293
+ </div>
294
+ <table class="file_list">
295
+ <thead>
296
+ <tr>
297
+ <th>File</th>
298
+ <th>% covered</th>
299
+ <th>Lines</th>
300
+ <th>Relevant Lines</th>
301
+ <th>Lines covered</th>
302
+ <th>Lines missed</th>
303
+ <th>Avg. Hits / Line</th>
304
+ </tr>
305
+ </thead>
306
+ <tbody>
307
+
308
+ <tr>
309
+ <td class="strong"><a href="#23ece676ee554bd0a62670e8964fe96af2adc01a" class="src_link" title="lib/comparator.rb">lib/comparator.rb</a></td>
310
+ <td class="green strong">95.56 %</td>
311
+ <td>74</td>
312
+ <td>45</td>
313
+ <td>43</td>
314
+ <td>2</td>
315
+ <td>12.4</td>
316
+ </tr>
317
+
318
+ <tr>
319
+ <td class="strong"><a href="#62f8063523b24e1e0397e524e8e048ddb0ac289c" class="src_link" title="lib/core_extensions.rb">lib/core_extensions.rb</a></td>
320
+ <td class="yellow strong">88.24 %</td>
321
+ <td>183</td>
322
+ <td>85</td>
323
+ <td>75</td>
324
+ <td>10</td>
325
+ <td>35.9</td>
326
+ </tr>
327
+
328
+ <tr>
329
+ <td class="strong"><a href="#9082f1e417147c61ee326c565b15a99cad953b35" class="src_link" title="lib/hash_dealer.rb">lib/hash_dealer.rb</a></td>
330
+ <td class="green strong">97.37 %</td>
331
+ <td>72</td>
332
+ <td>38</td>
333
+ <td>37</td>
334
+ <td>1</td>
335
+ <td>21.0</td>
336
+ </tr>
337
+
338
+ <tr>
339
+ <td class="strong"><a href="#4cc7721b735165eef9b1e5afd4a168c1a72d5103" class="src_link" title="lib/matcher.rb">lib/matcher.rb</a></td>
340
+ <td class="red strong">48.84 %</td>
341
+ <td>69</td>
342
+ <td>43</td>
343
+ <td>21</td>
344
+ <td>22</td>
345
+ <td>2.2</td>
346
+ </tr>
347
+
348
+ <tr>
349
+ <td class="strong"><a href="#a262d63e5dc399019853b13f0e4b947eb9908f86" class="src_link" title="lib/path_string.rb">lib/path_string.rb</a></td>
350
+ <td class="red strong">69.57 %</td>
351
+ <td>125</td>
352
+ <td>69</td>
353
+ <td>48</td>
354
+ <td>21</td>
355
+ <td>6.4</td>
356
+ </tr>
357
+
358
+ <tr>
359
+ <td class="strong"><a href="#a53828a5413df9e3a1d0192504eac81ee4166020" class="src_link" title="lib/variable_array.rb">lib/variable_array.rb</a></td>
360
+ <td class="green strong">90.91 %</td>
361
+ <td>18</td>
362
+ <td>11</td>
363
+ <td>10</td>
364
+ <td>1</td>
365
+ <td>3.4</td>
366
+ </tr>
367
+
368
+ </tbody>
369
+ </table>
370
+ </div>
371
+
372
+
373
+ <div class="file_list_container" id="Plugins">
374
+ <h2>
375
+ <span class="group_name">Plugins</span>
376
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
377
+ covered at
378
+ <span class="covered_strength">
379
+ <span class="red">
380
+ 0.0
381
+ </span>
382
+ </span> hits/line)
383
+ </h2>
384
+ <a name="Plugins"></a>
385
+ <div>
386
+ <b>0</b> files in total.
387
+ <b>0.0</b> relevant lines.
388
+ <span class="green"><b>0.0</b> lines covered</span> and
389
+ <span class="red"><b>0.0</b> lines missed </span>
390
+ </div>
391
+ <table class="file_list">
392
+ <thead>
393
+ <tr>
394
+ <th>File</th>
395
+ <th>% covered</th>
396
+ <th>Lines</th>
397
+ <th>Relevant Lines</th>
398
+ <th>Lines covered</th>
399
+ <th>Lines missed</th>
400
+ <th>Avg. Hits / Line</th>
401
+ </tr>
402
+ </thead>
403
+ <tbody>
404
+
405
+ </tbody>
406
+ </table>
407
+ </div>
408
+
409
+
410
+ </div>
411
+
412
+ <div id="footer">
413
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.5.4
414
+ and simplecov-html v0.5.3<br/>
415
+ using RSpec
416
+ </div>
417
+
418
+ <div class="source_files">
419
+
420
+ <div class="source_table" id="23ece676ee554bd0a62670e8964fe96af2adc01a">
421
+ <div class="header">
422
+ <h3>lib/comparator.rb</h3>
423
+ <h4><span class="green">95.56 %</span> covered</h4>
424
+ <div>
425
+ <b>45</b> relevant lines.
426
+ <span class="green"><b>43</b> lines covered</span> and
427
+ <span class="red"><b>2</b> lines missed.</span>
428
+ </div>
429
+ </div>
430
+
431
+ <pre>
432
+ <ol>
433
+
434
+ <li class="covered" data-hits="1" data-linenumber="1">
435
+ <span class="hits">1</span>
436
+
437
+ <code class="ruby">require 'active_support/core_ext'</code>
438
+ </li>
439
+
440
+ <li class="never" data-hits="" data-linenumber="2">
441
+
442
+
443
+ <code class="ruby"></code>
444
+ </li>
445
+
446
+ <li class="covered" data-hits="1" data-linenumber="3">
447
+ <span class="hits">1</span>
448
+
449
+ <code class="ruby">class Comparator</code>
450
+ </li>
451
+
452
+ <li class="never" data-hits="" data-linenumber="4">
453
+
454
+
455
+ <code class="ruby"> </code>
456
+ </li>
457
+
458
+ <li class="covered" data-hits="1" data-linenumber="5">
459
+ <span class="hits">1</span>
460
+
461
+ <code class="ruby"> def self.formatted_value(val)</code>
462
+ </li>
463
+
464
+ <li class="covered" data-hits="7" data-linenumber="6">
465
+ <span class="hits">7</span>
466
+
467
+ <code class="ruby"> if val.nil?</code>
468
+ </li>
469
+
470
+ <li class="missed" data-hits="0" data-linenumber="7">
471
+
472
+
473
+ <code class="ruby"> return &quot;NilClass::nil&quot;</code>
474
+ </li>
475
+
476
+ <li class="covered" data-hits="7" data-linenumber="8">
477
+ <span class="hits">7</span>
478
+
479
+ <code class="ruby"> elsif val.is_a?(PathString)</code>
480
+ </li>
481
+
482
+ <li class="covered" data-hits="1" data-linenumber="9">
483
+ <span class="hits">1</span>
484
+
485
+ <code class="ruby"> return val.gsub(&quot;:&quot;,&quot;&quot;)</code>
486
+ </li>
487
+
488
+ <li class="covered" data-hits="6" data-linenumber="10">
489
+ <span class="hits">6</span>
490
+
491
+ <code class="ruby"> elsif val == &quot;&quot;</code>
492
+ </li>
493
+
494
+ <li class="missed" data-hits="0" data-linenumber="11">
495
+
496
+
497
+ <code class="ruby"> return &quot;''&quot;</code>
498
+ </li>
499
+
500
+ <li class="never" data-hits="" data-linenumber="12">
501
+
502
+
503
+ <code class="ruby"> else</code>
504
+ </li>
505
+
506
+ <li class="covered" data-hits="6" data-linenumber="13">
507
+ <span class="hits">6</span>
508
+
509
+ <code class="ruby"> return val</code>
510
+ </li>
511
+
512
+ <li class="never" data-hits="" data-linenumber="14">
513
+
514
+
515
+ <code class="ruby"> end</code>
516
+ </li>
517
+
518
+ <li class="never" data-hits="" data-linenumber="15">
519
+
520
+
521
+ <code class="ruby"> end</code>
522
+ </li>
523
+
524
+ <li class="never" data-hits="" data-linenumber="16">
525
+
526
+
527
+ <code class="ruby"> </code>
528
+ </li>
529
+
530
+ <li class="covered" data-hits="1" data-linenumber="17">
531
+ <span class="hits">1</span>
532
+
533
+ <code class="ruby"> def self.normalize_value(val)</code>
534
+ </li>
535
+
536
+ <li class="covered" data-hits="29" data-linenumber="18">
537
+ <span class="hits">29</span>
538
+
539
+ <code class="ruby"> return val if val.is_a?(TimeDateMatcher)</code>
540
+ </li>
541
+
542
+ <li class="covered" data-hits="29" data-linenumber="19">
543
+ <span class="hits">29</span>
544
+
545
+ <code class="ruby"> val = ActiveSupport::JSON.decode(val) if val.is_a?(String)</code>
546
+ </li>
547
+
548
+ <li class="covered" data-hits="29" data-linenumber="20">
549
+ <span class="hits">29</span>
550
+
551
+ <code class="ruby"> val = self.stringify_keys(val) if val.is_a?(Hash)</code>
552
+ </li>
553
+
554
+ <li class="covered" data-hits="33" data-linenumber="21">
555
+ <span class="hits">33</span>
556
+
557
+ <code class="ruby"> val = val.collect{|v| v.is_a?(Hash) || v.is_a?(Array) ? self.normalize_value(v) : v} if val.is_a?(Array)</code>
558
+ </li>
559
+
560
+ <li class="covered" data-hits="29" data-linenumber="22">
561
+ <span class="hits">29</span>
562
+
563
+ <code class="ruby"> val</code>
564
+ </li>
565
+
566
+ <li class="never" data-hits="" data-linenumber="23">
567
+
568
+
569
+ <code class="ruby"> end</code>
570
+ </li>
571
+
572
+ <li class="never" data-hits="" data-linenumber="24">
573
+
574
+
575
+ <code class="ruby"> </code>
576
+ </li>
577
+
578
+ <li class="covered" data-hits="1" data-linenumber="25">
579
+ <span class="hits">1</span>
580
+
581
+ <code class="ruby"> def self.diff(obj1, obj2)</code>
582
+ </li>
583
+
584
+ <li class="covered" data-hits="23" data-linenumber="26">
585
+ <span class="hits">23</span>
586
+
587
+ <code class="ruby"> return {} if obj1 == obj2</code>
588
+ </li>
589
+
590
+ <li class="covered" data-hits="9" data-linenumber="27">
591
+ <span class="hits">9</span>
592
+
593
+ <code class="ruby"> if obj1.is_a?(Array) &amp;&amp; obj2.is_a?(Array)</code>
594
+ </li>
595
+
596
+ <li class="covered" data-hits="1" data-linenumber="28">
597
+ <span class="hits">1</span>
598
+
599
+ <code class="ruby"> return self.array_diff(obj1, obj2) </code>
600
+ </li>
601
+
602
+ <li class="never" data-hits="" data-linenumber="29">
603
+
604
+
605
+ <code class="ruby"> elsif obj1.is_a?(Hash) &amp;&amp; obj2.is_a?(Hash)</code>
606
+ </li>
607
+
608
+ <li class="covered" data-hits="7" data-linenumber="30">
609
+ <span class="hits">7</span>
610
+
611
+ <code class="ruby"> return self.hash_diff(obj1, obj2) </code>
612
+ </li>
613
+
614
+ <li class="never" data-hits="" data-linenumber="31">
615
+
616
+
617
+ <code class="ruby"> end</code>
618
+ </li>
619
+
620
+ <li class="covered" data-hits="1" data-linenumber="32">
621
+ <span class="hits">1</span>
622
+
623
+ <code class="ruby"> return [formatted_value(obj1), &quot;KEY MISSING&quot;] if obj2.nil?</code>
624
+ </li>
625
+
626
+ <li class="covered" data-hits="1" data-linenumber="33">
627
+ <span class="hits">1</span>
628
+
629
+ <code class="ruby"> return [&quot;KEY MISSING&quot;, formatted_value(obj2)] if obj1.nil?</code>
630
+ </li>
631
+
632
+ <li class="covered" data-hits="1" data-linenumber="34">
633
+ <span class="hits">1</span>
634
+
635
+ <code class="ruby"> return [formatted_value(obj1), formatted_value(obj2)]</code>
636
+ </li>
637
+
638
+ <li class="never" data-hits="" data-linenumber="35">
639
+
640
+
641
+ <code class="ruby"> end</code>
642
+ </li>
643
+
644
+ <li class="never" data-hits="" data-linenumber="36">
645
+
646
+
647
+ <code class="ruby"> </code>
648
+ </li>
649
+
650
+ <li class="covered" data-hits="1" data-linenumber="37">
651
+ <span class="hits">1</span>
652
+
653
+ <code class="ruby"> def self.array_diff(obj1, obj2)</code>
654
+ </li>
655
+
656
+ <li class="covered" data-hits="1" data-linenumber="38">
657
+ <span class="hits">1</span>
658
+
659
+ <code class="ruby"> {}.tap do |ret|</code>
660
+ </li>
661
+
662
+ <li class="never" data-hits="" data-linenumber="39">
663
+
664
+
665
+ <code class="ruby"> # handle VariableArray by extracting the first element</code>
666
+ </li>
667
+
668
+ <li class="never" data-hits="" data-linenumber="40">
669
+
670
+
671
+ <code class="ruby"> # of non-VariableArrays and the 2nd element of VariableArrays</code>
672
+ </li>
673
+
674
+ <li class="covered" data-hits="1" data-linenumber="41">
675
+ <span class="hits">1</span>
676
+
677
+ <code class="ruby"> if obj1.is_a?(VariableArray) || obj2.is_a?(VariableArray)</code>
678
+ </li>
679
+
680
+ <li class="covered" data-hits="1" data-linenumber="42">
681
+ <span class="hits">1</span>
682
+
683
+ <code class="ruby"> obj1 = obj1.is_a?(VariableArray) ? [obj1[1]] : [obj1[0]]</code>
684
+ </li>
685
+
686
+ <li class="covered" data-hits="1" data-linenumber="43">
687
+ <span class="hits">1</span>
688
+
689
+ <code class="ruby"> obj2 = obj2.is_a?(VariableArray) ? [obj2[1]] : [obj2[0]]</code>
690
+ </li>
691
+
692
+ <li class="never" data-hits="" data-linenumber="44">
693
+
694
+
695
+ <code class="ruby"> end</code>
696
+ </li>
697
+
698
+ <li class="covered" data-hits="1" data-linenumber="45">
699
+ <span class="hits">1</span>
700
+
701
+ <code class="ruby"> bigger_arr = obj1.size &gt;= obj2.size ? obj1 : obj2</code>
702
+ </li>
703
+
704
+ <li class="covered" data-hits="1" data-linenumber="46">
705
+ <span class="hits">1</span>
706
+
707
+ <code class="ruby"> bigger_arr.each_index do |k|</code>
708
+ </li>
709
+
710
+ <li class="covered" data-hits="1" data-linenumber="47">
711
+ <span class="hits">1</span>
712
+
713
+ <code class="ruby"> ret[k] = self.diff(obj1[k], obj2[k]) unless obj1[k] == obj2[k]</code>
714
+ </li>
715
+
716
+ <li class="never" data-hits="" data-linenumber="48">
717
+
718
+
719
+ <code class="ruby"> end </code>
720
+ </li>
721
+
722
+ <li class="never" data-hits="" data-linenumber="49">
723
+
724
+
725
+ <code class="ruby"> end</code>
726
+ </li>
727
+
728
+ <li class="never" data-hits="" data-linenumber="50">
729
+
730
+
731
+ <code class="ruby"> end</code>
732
+ </li>
733
+
734
+ <li class="never" data-hits="" data-linenumber="51">
735
+
736
+
737
+ <code class="ruby"> </code>
738
+ </li>
739
+
740
+ <li class="covered" data-hits="1" data-linenumber="52">
741
+ <span class="hits">1</span>
742
+
743
+ <code class="ruby"> def self.hash_diff(obj1, obj2)</code>
744
+ </li>
745
+
746
+ <li class="covered" data-hits="7" data-linenumber="53">
747
+ <span class="hits">7</span>
748
+
749
+ <code class="ruby"> obj1, obj2 = self.stringify_keys(obj1), self.stringify_keys(obj2)</code>
750
+ </li>
751
+
752
+ <li class="covered" data-hits="7" data-linenumber="54">
753
+ <span class="hits">7</span>
754
+
755
+ <code class="ruby"> (obj1.keys + obj2.keys).uniq.inject({}) do |memo, key|</code>
756
+ </li>
757
+
758
+ <li class="covered" data-hits="13" data-linenumber="55">
759
+ <span class="hits">13</span>
760
+
761
+ <code class="ruby"> if !obj1.keys.include?(key) </code>
762
+ </li>
763
+
764
+ <li class="covered" data-hits="3" data-linenumber="56">
765
+ <span class="hits">3</span>
766
+
767
+ <code class="ruby"> memo[key] = [&quot;KEY MISSING&quot;, formatted_value(obj2[key])]</code>
768
+ </li>
769
+
770
+ <li class="never" data-hits="" data-linenumber="57">
771
+
772
+
773
+ <code class="ruby"> elsif !obj2.keys.include?(key) </code>
774
+ </li>
775
+
776
+ <li class="covered" data-hits="2" data-linenumber="58">
777
+ <span class="hits">2</span>
778
+
779
+ <code class="ruby"> memo[key] = [formatted_value(obj1[key]), &quot;KEY MISSING&quot;]</code>
780
+ </li>
781
+
782
+ <li class="never" data-hits="" data-linenumber="59">
783
+
784
+
785
+ <code class="ruby"> elsif obj1[key] != obj2[key]</code>
786
+ </li>
787
+
788
+ <li class="covered" data-hits="3" data-linenumber="60">
789
+ <span class="hits">3</span>
790
+
791
+ <code class="ruby"> memo[key] = self.diff(obj1[key], obj2[key])</code>
792
+ </li>
793
+
794
+ <li class="never" data-hits="" data-linenumber="61">
795
+
796
+
797
+ <code class="ruby"> end</code>
798
+ </li>
799
+
800
+ <li class="covered" data-hits="13" data-linenumber="62">
801
+ <span class="hits">13</span>
802
+
803
+ <code class="ruby"> memo</code>
804
+ </li>
805
+
806
+ <li class="never" data-hits="" data-linenumber="63">
807
+
808
+
809
+ <code class="ruby"> end</code>
810
+ </li>
811
+
812
+ <li class="never" data-hits="" data-linenumber="64">
813
+
814
+
815
+ <code class="ruby"> end</code>
816
+ </li>
817
+
818
+ <li class="never" data-hits="" data-linenumber="65">
819
+
820
+
821
+ <code class="ruby"> </code>
822
+ </li>
823
+
824
+ <li class="covered" data-hits="1" data-linenumber="66">
825
+ <span class="hits">1</span>
826
+
827
+ <code class="ruby"> def self.stringify_keys(hash_or_array)</code>
828
+ </li>
829
+
830
+ <li class="covered" data-hits="82" data-linenumber="67">
831
+ <span class="hits">82</span>
832
+
833
+ <code class="ruby"> return hash_or_array.collect{|v| v.is_a?(Hash) || v.is_a?(Array) ? self.stringify_keys(v) : v} if hash_or_array.is_a?(Array)</code>
834
+ </li>
835
+
836
+ <li class="covered" data-hits="58" data-linenumber="68">
837
+ <span class="hits">58</span>
838
+
839
+ <code class="ruby"> {}.tap do |ret|</code>
840
+ </li>
841
+
842
+ <li class="covered" data-hits="58" data-linenumber="69">
843
+ <span class="hits">58</span>
844
+
845
+ <code class="ruby"> hash_or_array.each_pair.each do |k, v|</code>
846
+ </li>
847
+
848
+ <li class="covered" data-hits="77" data-linenumber="70">
849
+ <span class="hits">77</span>
850
+
851
+ <code class="ruby"> ret[k.to_s] = v.is_a?(Hash) || v.is_a?(Array) ? self.stringify_keys(v) : v</code>
852
+ </li>
853
+
854
+ <li class="never" data-hits="" data-linenumber="71">
855
+
856
+
857
+ <code class="ruby"> end</code>
858
+ </li>
859
+
860
+ <li class="never" data-hits="" data-linenumber="72">
861
+
862
+
863
+ <code class="ruby"> end</code>
864
+ </li>
865
+
866
+ <li class="never" data-hits="" data-linenumber="73">
867
+
868
+
869
+ <code class="ruby"> end</code>
870
+ </li>
871
+
872
+ <li class="never" data-hits="" data-linenumber="74">
873
+
874
+
875
+ <code class="ruby">end</code>
876
+ </li>
877
+
878
+ </ol>
879
+ </pre>
880
+ </div>
881
+
882
+ <div class="source_table" id="62f8063523b24e1e0397e524e8e048ddb0ac289c">
883
+ <div class="header">
884
+ <h3>lib/core_extensions.rb</h3>
885
+ <h4><span class="yellow">88.24 %</span> covered</h4>
886
+ <div>
887
+ <b>85</b> relevant lines.
888
+ <span class="green"><b>75</b> lines covered</span> and
889
+ <span class="red"><b>10</b> lines missed.</span>
890
+ </div>
891
+ </div>
892
+
893
+ <pre>
894
+ <ol>
895
+
896
+ <li class="covered" data-hits="1" data-linenumber="1">
897
+ <span class="hits">1</span>
898
+
899
+ <code class="ruby">class Object</code>
900
+ </li>
901
+
902
+ <li class="never" data-hits="" data-linenumber="2">
903
+
904
+
905
+ <code class="ruby"> # allows us to call matcher blindly</code>
906
+ </li>
907
+
908
+ <li class="covered" data-hits="1" data-linenumber="3">
909
+ <span class="hits">1</span>
910
+
911
+ <code class="ruby"> def matcher(opts = {})</code>
912
+ </li>
913
+
914
+ <li class="missed" data-hits="0" data-linenumber="4">
915
+
916
+
917
+ <code class="ruby"> return self</code>
918
+ </li>
919
+
920
+ <li class="never" data-hits="" data-linenumber="5">
921
+
922
+
923
+ <code class="ruby"> end</code>
924
+ </li>
925
+
926
+ <li class="never" data-hits="" data-linenumber="6">
927
+
928
+
929
+ <code class="ruby">end</code>
930
+ </li>
931
+
932
+ <li class="never" data-hits="" data-linenumber="7">
933
+
934
+
935
+ <code class="ruby"></code>
936
+ </li>
937
+
938
+ <li class="covered" data-hits="1" data-linenumber="8">
939
+ <span class="hits">1</span>
940
+
941
+ <code class="ruby">class TimeDateMatcher</code>
942
+ </li>
943
+
944
+ <li class="covered" data-hits="1" data-linenumber="9">
945
+ <span class="hits">1</span>
946
+
947
+ <code class="ruby"> attr_reader :instance</code>
948
+ </li>
949
+
950
+ <li class="covered" data-hits="1" data-linenumber="10">
951
+ <span class="hits">1</span>
952
+
953
+ <code class="ruby"> def initialize(instance)</code>
954
+ </li>
955
+
956
+ <li class="covered" data-hits="8" data-linenumber="11">
957
+ <span class="hits">8</span>
958
+
959
+ <code class="ruby"> @instance = instance</code>
960
+ </li>
961
+
962
+ <li class="never" data-hits="" data-linenumber="12">
963
+
964
+
965
+ <code class="ruby"> end</code>
966
+ </li>
967
+
968
+ <li class="covered" data-hits="1" data-linenumber="13">
969
+ <span class="hits">1</span>
970
+
971
+ <code class="ruby"> def ==(other)</code>
972
+ </li>
973
+
974
+ <li class="never" data-hits="" data-linenumber="14">
975
+
976
+
977
+ <code class="ruby"> # allow nils to match</code>
978
+ </li>
979
+
980
+ <li class="covered" data-hits="12" data-linenumber="15">
981
+ <span class="hits">12</span>
982
+
983
+ <code class="ruby"> return true if other.nil?</code>
984
+ </li>
985
+
986
+ <li class="never" data-hits="" data-linenumber="16">
987
+
988
+
989
+ <code class="ruby"> # attempt to parse any strings</code>
990
+ </li>
991
+
992
+ <li class="covered" data-hits="10" data-linenumber="17">
993
+ <span class="hits">10</span>
994
+
995
+ <code class="ruby"> if other.is_a?(String)</code>
996
+ </li>
997
+
998
+ <li class="covered" data-hits="2" data-linenumber="18">
999
+ <span class="hits">2</span>
1000
+
1001
+ <code class="ruby"> begin</code>
1002
+ </li>
1003
+
1004
+ <li class="covered" data-hits="2" data-linenumber="19">
1005
+ <span class="hits">2</span>
1006
+
1007
+ <code class="ruby"> other = self.instance.class.parse(other)</code>
1008
+ </li>
1009
+
1010
+ <li class="never" data-hits="" data-linenumber="20">
1011
+
1012
+
1013
+ <code class="ruby"> rescue =&gt; e</code>
1014
+ </li>
1015
+
1016
+ <li class="missed" data-hits="0" data-linenumber="21">
1017
+
1018
+
1019
+ <code class="ruby"> return false</code>
1020
+ </li>
1021
+
1022
+ <li class="never" data-hits="" data-linenumber="22">
1023
+
1024
+
1025
+ <code class="ruby"> end</code>
1026
+ </li>
1027
+
1028
+ <li class="never" data-hits="" data-linenumber="23">
1029
+
1030
+
1031
+ <code class="ruby"> end</code>
1032
+ </li>
1033
+
1034
+ <li class="covered" data-hits="10" data-linenumber="24">
1035
+ <span class="hits">10</span>
1036
+
1037
+ <code class="ruby"> self.instance.class == other.class</code>
1038
+ </li>
1039
+
1040
+ <li class="never" data-hits="" data-linenumber="25">
1041
+
1042
+
1043
+ <code class="ruby"> end</code>
1044
+ </li>
1045
+
1046
+ <li class="covered" data-hits="1" data-linenumber="26">
1047
+ <span class="hits">1</span>
1048
+
1049
+ <code class="ruby"> alias_method :eql?, :==</code>
1050
+ </li>
1051
+
1052
+ <li class="never" data-hits="" data-linenumber="27">
1053
+
1054
+
1055
+ <code class="ruby">end</code>
1056
+ </li>
1057
+
1058
+ <li class="never" data-hits="" data-linenumber="28">
1059
+
1060
+
1061
+ <code class="ruby"></code>
1062
+ </li>
1063
+
1064
+ <li class="never" data-hits="" data-linenumber="29">
1065
+
1066
+
1067
+ <code class="ruby"># including a module didn't work here - not sure why though</code>
1068
+ </li>
1069
+
1070
+ <li class="covered" data-hits="1" data-linenumber="30">
1071
+ <span class="hits">1</span>
1072
+
1073
+ <code class="ruby">[Time, DateTime, Date].each do |klass|</code>
1074
+ </li>
1075
+
1076
+ <li class="covered" data-hits="3" data-linenumber="31">
1077
+ <span class="hits">3</span>
1078
+
1079
+ <code class="ruby"> klass.class_eval &lt;&lt;-EOE, __FILE__, __LINE__ + 1</code>
1080
+ </li>
1081
+
1082
+ <li class="never" data-hits="" data-linenumber="32">
1083
+
1084
+
1085
+ <code class="ruby"> def matcher(opts = {})</code>
1086
+ </li>
1087
+
1088
+ <li class="never" data-hits="" data-linenumber="33">
1089
+
1090
+
1091
+ <code class="ruby"> TimeDateMatcher.new(self)</code>
1092
+ </li>
1093
+
1094
+ <li class="never" data-hits="" data-linenumber="34">
1095
+
1096
+
1097
+ <code class="ruby"> end</code>
1098
+ </li>
1099
+
1100
+ <li class="never" data-hits="" data-linenumber="35">
1101
+
1102
+
1103
+ <code class="ruby"></code>
1104
+ </li>
1105
+
1106
+ <li class="never" data-hits="" data-linenumber="36">
1107
+
1108
+
1109
+ <code class="ruby"> alias_method :old_eql?, :eql?</code>
1110
+ </li>
1111
+
1112
+ <li class="never" data-hits="" data-linenumber="37">
1113
+
1114
+
1115
+ <code class="ruby"> alias_method :old_equals_equals, :==</code>
1116
+ </li>
1117
+
1118
+ <li class="never" data-hits="" data-linenumber="38">
1119
+
1120
+
1121
+ <code class="ruby"></code>
1122
+ </li>
1123
+
1124
+ <li class="never" data-hits="" data-linenumber="39">
1125
+
1126
+
1127
+ <code class="ruby"> def ==(other)</code>
1128
+ </li>
1129
+
1130
+ <li class="never" data-hits="" data-linenumber="40">
1131
+
1132
+
1133
+ <code class="ruby"> return other == self if other.is_a?(TimeDateMatcher)</code>
1134
+ </li>
1135
+
1136
+ <li class="never" data-hits="" data-linenumber="41">
1137
+
1138
+
1139
+ <code class="ruby"> return old_equals_equals(other)</code>
1140
+ </li>
1141
+
1142
+ <li class="never" data-hits="" data-linenumber="42">
1143
+
1144
+
1145
+ <code class="ruby"> end</code>
1146
+ </li>
1147
+
1148
+ <li class="never" data-hits="" data-linenumber="43">
1149
+
1150
+
1151
+ <code class="ruby"></code>
1152
+ </li>
1153
+
1154
+ <li class="never" data-hits="" data-linenumber="44">
1155
+
1156
+
1157
+ <code class="ruby"> def eql?(other)</code>
1158
+ </li>
1159
+
1160
+ <li class="never" data-hits="" data-linenumber="45">
1161
+
1162
+
1163
+ <code class="ruby"> return other.eql?(self) if other.is_a?(TimeDateMatcher)</code>
1164
+ </li>
1165
+
1166
+ <li class="never" data-hits="" data-linenumber="46">
1167
+
1168
+
1169
+ <code class="ruby"> return old_eql?(other)</code>
1170
+ </li>
1171
+
1172
+ <li class="never" data-hits="" data-linenumber="47">
1173
+
1174
+
1175
+ <code class="ruby"> end</code>
1176
+ </li>
1177
+
1178
+ <li class="never" data-hits="" data-linenumber="48">
1179
+
1180
+
1181
+ <code class="ruby"> </code>
1182
+ </li>
1183
+
1184
+ <li class="never" data-hits="" data-linenumber="49">
1185
+
1186
+
1187
+ <code class="ruby"> EOE</code>
1188
+ </li>
1189
+
1190
+ <li class="never" data-hits="" data-linenumber="50">
1191
+
1192
+
1193
+ <code class="ruby">end</code>
1194
+ </li>
1195
+
1196
+ <li class="never" data-hits="" data-linenumber="51">
1197
+
1198
+
1199
+ <code class="ruby"></code>
1200
+ </li>
1201
+
1202
+ <li class="covered" data-hits="1" data-linenumber="52">
1203
+ <span class="hits">1</span>
1204
+
1205
+ <code class="ruby">class BooleanMatcher</code>
1206
+ </li>
1207
+
1208
+ <li class="covered" data-hits="1" data-linenumber="53">
1209
+ <span class="hits">1</span>
1210
+
1211
+ <code class="ruby"> attr_reader :instance</code>
1212
+ </li>
1213
+
1214
+ <li class="covered" data-hits="1" data-linenumber="54">
1215
+ <span class="hits">1</span>
1216
+
1217
+ <code class="ruby"> def initialize(instance)</code>
1218
+ </li>
1219
+
1220
+ <li class="covered" data-hits="2" data-linenumber="55">
1221
+ <span class="hits">2</span>
1222
+
1223
+ <code class="ruby"> @instance = instance</code>
1224
+ </li>
1225
+
1226
+ <li class="never" data-hits="" data-linenumber="56">
1227
+
1228
+
1229
+ <code class="ruby"> end</code>
1230
+ </li>
1231
+
1232
+ <li class="covered" data-hits="1" data-linenumber="57">
1233
+ <span class="hits">1</span>
1234
+
1235
+ <code class="ruby"> def ==(other)</code>
1236
+ </li>
1237
+
1238
+ <li class="covered" data-hits="2" data-linenumber="58">
1239
+ <span class="hits">2</span>
1240
+
1241
+ <code class="ruby"> return (other.is_a?(TrueClass) || other.is_a?(FalseClass) || other.is_a?(BooleanMatcher))</code>
1242
+ </li>
1243
+
1244
+ <li class="never" data-hits="" data-linenumber="59">
1245
+
1246
+
1247
+ <code class="ruby"> end</code>
1248
+ </li>
1249
+
1250
+ <li class="covered" data-hits="1" data-linenumber="60">
1251
+ <span class="hits">1</span>
1252
+
1253
+ <code class="ruby"> alias_method :eql?, :==</code>
1254
+ </li>
1255
+
1256
+ <li class="never" data-hits="" data-linenumber="61">
1257
+
1258
+
1259
+ <code class="ruby">end</code>
1260
+ </li>
1261
+
1262
+ <li class="never" data-hits="" data-linenumber="62">
1263
+
1264
+
1265
+ <code class="ruby"></code>
1266
+ </li>
1267
+
1268
+ <li class="covered" data-hits="1" data-linenumber="63">
1269
+ <span class="hits">1</span>
1270
+
1271
+ <code class="ruby">[TrueClass, FalseClass].each do |klass|</code>
1272
+ </li>
1273
+
1274
+ <li class="covered" data-hits="2" data-linenumber="64">
1275
+ <span class="hits">2</span>
1276
+
1277
+ <code class="ruby"> klass.class_eval &lt;&lt;-EOE, __FILE__, __LINE__ +1</code>
1278
+ </li>
1279
+
1280
+ <li class="never" data-hits="" data-linenumber="65">
1281
+
1282
+
1283
+ <code class="ruby"> def matcher(opts={})</code>
1284
+ </li>
1285
+
1286
+ <li class="never" data-hits="" data-linenumber="66">
1287
+
1288
+
1289
+ <code class="ruby"> BooleanMatcher.new(self)</code>
1290
+ </li>
1291
+
1292
+ <li class="never" data-hits="" data-linenumber="67">
1293
+
1294
+
1295
+ <code class="ruby"> end</code>
1296
+ </li>
1297
+
1298
+ <li class="never" data-hits="" data-linenumber="68">
1299
+
1300
+
1301
+ <code class="ruby"> </code>
1302
+ </li>
1303
+
1304
+ <li class="never" data-hits="" data-linenumber="69">
1305
+
1306
+
1307
+ <code class="ruby"> alias_method :old_eql?, :eql?</code>
1308
+ </li>
1309
+
1310
+ <li class="never" data-hits="" data-linenumber="70">
1311
+
1312
+
1313
+ <code class="ruby"> alias_method :old_equals_equals, :==</code>
1314
+ </li>
1315
+
1316
+ <li class="never" data-hits="" data-linenumber="71">
1317
+
1318
+
1319
+ <code class="ruby"> </code>
1320
+ </li>
1321
+
1322
+ <li class="never" data-hits="" data-linenumber="72">
1323
+
1324
+
1325
+ <code class="ruby"> def ==(other)</code>
1326
+ </li>
1327
+
1328
+ <li class="never" data-hits="" data-linenumber="73">
1329
+
1330
+
1331
+ <code class="ruby"> return other == self if other.is_a?(BooleanMatcher)</code>
1332
+ </li>
1333
+
1334
+ <li class="never" data-hits="" data-linenumber="74">
1335
+
1336
+
1337
+ <code class="ruby"> return self.old_equals_equals(other)</code>
1338
+ </li>
1339
+
1340
+ <li class="never" data-hits="" data-linenumber="75">
1341
+
1342
+
1343
+ <code class="ruby"> end</code>
1344
+ </li>
1345
+
1346
+ <li class="never" data-hits="" data-linenumber="76">
1347
+
1348
+
1349
+ <code class="ruby"> </code>
1350
+ </li>
1351
+
1352
+ <li class="never" data-hits="" data-linenumber="77">
1353
+
1354
+
1355
+ <code class="ruby"> def eql?(other)</code>
1356
+ </li>
1357
+
1358
+ <li class="never" data-hits="" data-linenumber="78">
1359
+
1360
+
1361
+ <code class="ruby"> return other.eql?(self) if other.is_a?(BooleanMatcher)</code>
1362
+ </li>
1363
+
1364
+ <li class="never" data-hits="" data-linenumber="79">
1365
+
1366
+
1367
+ <code class="ruby"> return self.old_eql?(other)</code>
1368
+ </li>
1369
+
1370
+ <li class="never" data-hits="" data-linenumber="80">
1371
+
1372
+
1373
+ <code class="ruby"> end</code>
1374
+ </li>
1375
+
1376
+ <li class="never" data-hits="" data-linenumber="81">
1377
+
1378
+
1379
+ <code class="ruby"> EOE</code>
1380
+ </li>
1381
+
1382
+ <li class="never" data-hits="" data-linenumber="82">
1383
+
1384
+
1385
+ <code class="ruby">end</code>
1386
+ </li>
1387
+
1388
+ <li class="never" data-hits="" data-linenumber="83">
1389
+
1390
+
1391
+ <code class="ruby"></code>
1392
+ </li>
1393
+
1394
+ <li class="covered" data-hits="1" data-linenumber="84">
1395
+ <span class="hits">1</span>
1396
+
1397
+ <code class="ruby">class Numeric</code>
1398
+ </li>
1399
+
1400
+ <li class="covered" data-hits="1" data-linenumber="85">
1401
+ <span class="hits">1</span>
1402
+
1403
+ <code class="ruby"> def matcher(opts={})</code>
1404
+ </li>
1405
+
1406
+ <li class="covered" data-hits="4" data-linenumber="86">
1407
+ <span class="hits">4</span>
1408
+
1409
+ <code class="ruby"> PathString.new(&quot;:#{self}&quot;)</code>
1410
+ </li>
1411
+
1412
+ <li class="never" data-hits="" data-linenumber="87">
1413
+
1414
+
1415
+ <code class="ruby"> end</code>
1416
+ </li>
1417
+
1418
+ <li class="covered" data-hits="1" data-linenumber="88">
1419
+ <span class="hits">1</span>
1420
+
1421
+ <code class="ruby"> def ==(other)</code>
1422
+ </li>
1423
+
1424
+ <li class="covered" data-hits="1" data-linenumber="89">
1425
+ <span class="hits">1</span>
1426
+
1427
+ <code class="ruby"> return true if other.is_a?(PathString) &amp;&amp; other =~ /^:/</code>
1428
+ </li>
1429
+
1430
+ <li class="covered" data-hits="1" data-linenumber="90">
1431
+ <span class="hits">1</span>
1432
+
1433
+ <code class="ruby"> super</code>
1434
+ </li>
1435
+
1436
+ <li class="never" data-hits="" data-linenumber="91">
1437
+
1438
+
1439
+ <code class="ruby"> end</code>
1440
+ </li>
1441
+
1442
+ <li class="covered" data-hits="1" data-linenumber="92">
1443
+ <span class="hits">1</span>
1444
+
1445
+ <code class="ruby"> alias_method :eql?, :==</code>
1446
+ </li>
1447
+
1448
+ <li class="never" data-hits="" data-linenumber="93">
1449
+
1450
+
1451
+ <code class="ruby">end</code>
1452
+ </li>
1453
+
1454
+ <li class="never" data-hits="" data-linenumber="94">
1455
+
1456
+
1457
+ <code class="ruby"></code>
1458
+ </li>
1459
+
1460
+ <li class="never" data-hits="" data-linenumber="95">
1461
+
1462
+
1463
+ <code class="ruby"># The only really important matcher</code>
1464
+ </li>
1465
+
1466
+ <li class="covered" data-hits="1" data-linenumber="96">
1467
+ <span class="hits">1</span>
1468
+
1469
+ <code class="ruby">class String</code>
1470
+ </li>
1471
+
1472
+ <li class="covered" data-hits="1" data-linenumber="97">
1473
+ <span class="hits">1</span>
1474
+
1475
+ <code class="ruby"> def matcher(opts = {})</code>
1476
+ </li>
1477
+
1478
+ <li class="never" data-hits="" data-linenumber="98">
1479
+
1480
+
1481
+ <code class="ruby"> # if we have a leading : or a /:xyz - a matcher is already defined</code>
1482
+ </li>
1483
+
1484
+ <li class="covered" data-hits="32" data-linenumber="99">
1485
+ <span class="hits">32</span>
1486
+
1487
+ <code class="ruby"> self =~ /(^:|\/:)/ ? PathString.new(self) : PathString.new(&quot;:#{self}&quot;)</code>
1488
+ </li>
1489
+
1490
+ <li class="never" data-hits="" data-linenumber="100">
1491
+
1492
+
1493
+ <code class="ruby"> end</code>
1494
+ </li>
1495
+
1496
+ <li class="covered" data-hits="1" data-linenumber="101">
1497
+ <span class="hits">1</span>
1498
+
1499
+ <code class="ruby"> define_method &quot;==_with_path_string&quot; do |other|</code>
1500
+ </li>
1501
+
1502
+ <li class="covered" data-hits="1048" data-linenumber="102">
1503
+ <span class="hits">1048</span>
1504
+
1505
+ <code class="ruby"> if other.is_a?(PathString)</code>
1506
+ </li>
1507
+
1508
+ <li class="covered" data-hits="20" data-linenumber="103">
1509
+ <span class="hits">20</span>
1510
+
1511
+ <code class="ruby"> return true if self.is_a?(PathString)</code>
1512
+ </li>
1513
+
1514
+ <li class="covered" data-hits="2" data-linenumber="104">
1515
+ <span class="hits">2</span>
1516
+
1517
+ <code class="ruby"> return other == self </code>
1518
+ </li>
1519
+
1520
+ <li class="never" data-hits="" data-linenumber="105">
1521
+
1522
+
1523
+ <code class="ruby"> end</code>
1524
+ </li>
1525
+
1526
+ <li class="covered" data-hits="1028" data-linenumber="106">
1527
+ <span class="hits">1028</span>
1528
+
1529
+ <code class="ruby"> return self.send(&quot;==_without_path_string&quot;, other)</code>
1530
+ </li>
1531
+
1532
+ <li class="never" data-hits="" data-linenumber="107">
1533
+
1534
+
1535
+ <code class="ruby"> end</code>
1536
+ </li>
1537
+
1538
+ <li class="covered" data-hits="1" data-linenumber="108">
1539
+ <span class="hits">1</span>
1540
+
1541
+ <code class="ruby"> alias_method &quot;==_without_path_string&quot;, :==</code>
1542
+ </li>
1543
+
1544
+ <li class="covered" data-hits="1" data-linenumber="109">
1545
+ <span class="hits">1</span>
1546
+
1547
+ <code class="ruby"> alias_method :==, &quot;==_with_path_string&quot;</code>
1548
+ </li>
1549
+
1550
+ <li class="covered" data-hits="1" data-linenumber="110">
1551
+ <span class="hits">1</span>
1552
+
1553
+ <code class="ruby"> alias_method :eql?, :==</code>
1554
+ </li>
1555
+
1556
+ <li class="never" data-hits="" data-linenumber="111">
1557
+
1558
+
1559
+ <code class="ruby"> # make a string bold</code>
1560
+ </li>
1561
+
1562
+ <li class="covered" data-hits="1" data-linenumber="112">
1563
+ <span class="hits">1</span>
1564
+
1565
+ <code class="ruby"> def bold</code>
1566
+ </li>
1567
+
1568
+ <li class="missed" data-hits="0" data-linenumber="113">
1569
+
1570
+
1571
+ <code class="ruby"> &quot;\033[1m#{self}&quot;</code>
1572
+ </li>
1573
+
1574
+ <li class="never" data-hits="" data-linenumber="114">
1575
+
1576
+
1577
+ <code class="ruby"> end</code>
1578
+ </li>
1579
+
1580
+ <li class="never" data-hits="" data-linenumber="115">
1581
+
1582
+
1583
+ <code class="ruby">end</code>
1584
+ </li>
1585
+
1586
+ <li class="never" data-hits="" data-linenumber="116">
1587
+
1588
+
1589
+ <code class="ruby"></code>
1590
+ </li>
1591
+
1592
+ <li class="covered" data-hits="1" data-linenumber="117">
1593
+ <span class="hits">1</span>
1594
+
1595
+ <code class="ruby">class Hash</code>
1596
+ </li>
1597
+
1598
+ <li class="covered" data-hits="1" data-linenumber="118">
1599
+ <span class="hits">1</span>
1600
+
1601
+ <code class="ruby"> def pathify_strings</code>
1602
+ </li>
1603
+
1604
+ <li class="missed" data-hits="0" data-linenumber="119">
1605
+
1606
+
1607
+ <code class="ruby"> self.each_pair do |k,v|</code>
1608
+ </li>
1609
+
1610
+ <li class="missed" data-hits="0" data-linenumber="120">
1611
+
1612
+
1613
+ <code class="ruby"> if v.is_a?(Array) || v.is_a?(Hash)</code>
1614
+ </li>
1615
+
1616
+ <li class="missed" data-hits="0" data-linenumber="121">
1617
+
1618
+
1619
+ <code class="ruby"> self[k] = v.pathify_strings</code>
1620
+ </li>
1621
+
1622
+ <li class="never" data-hits="" data-linenumber="122">
1623
+
1624
+
1625
+ <code class="ruby"> elsif v.instance_of?(String) || v.is_a?(Numeric)</code>
1626
+ </li>
1627
+
1628
+ <li class="missed" data-hits="0" data-linenumber="123">
1629
+
1630
+
1631
+ <code class="ruby"> self[k] = PathString.new(URI.decode(v.to_s))</code>
1632
+ </li>
1633
+
1634
+ <li class="never" data-hits="" data-linenumber="124">
1635
+
1636
+
1637
+ <code class="ruby"> end</code>
1638
+ </li>
1639
+
1640
+ <li class="never" data-hits="" data-linenumber="125">
1641
+
1642
+
1643
+ <code class="ruby"> end</code>
1644
+ </li>
1645
+
1646
+ <li class="missed" data-hits="0" data-linenumber="126">
1647
+
1648
+
1649
+ <code class="ruby"> self</code>
1650
+ </li>
1651
+
1652
+ <li class="never" data-hits="" data-linenumber="127">
1653
+
1654
+
1655
+ <code class="ruby"> end</code>
1656
+ </li>
1657
+
1658
+ <li class="never" data-hits="" data-linenumber="128">
1659
+
1660
+
1661
+ <code class="ruby"> # recursively get a matcher for each value</code>
1662
+ </li>
1663
+
1664
+ <li class="covered" data-hits="1" data-linenumber="129">
1665
+ <span class="hits">1</span>
1666
+
1667
+ <code class="ruby"> def matcher(opts = {})</code>
1668
+ </li>
1669
+
1670
+ <li class="covered" data-hits="40" data-linenumber="130">
1671
+ <span class="hits">40</span>
1672
+
1673
+ <code class="ruby"> opts[:only] ||= self.keys.collect(&amp;:to_sym)</code>
1674
+ </li>
1675
+
1676
+ <li class="covered" data-hits="40" data-linenumber="131">
1677
+ <span class="hits">40</span>
1678
+
1679
+ <code class="ruby"> opts[:only] = opts[:only].collect(&amp;:to_sym)</code>
1680
+ </li>
1681
+
1682
+ <li class="covered" data-hits="40" data-linenumber="132">
1683
+ <span class="hits">40</span>
1684
+
1685
+ <code class="ruby"> opts[:only] -= (opts[:except] || []).collect(&amp;:to_sym)</code>
1686
+ </li>
1687
+
1688
+ <li class="never" data-hits="" data-linenumber="133">
1689
+
1690
+
1691
+ <code class="ruby"> </code>
1692
+ </li>
1693
+
1694
+ <li class="covered" data-hits="40" data-linenumber="134">
1695
+ <span class="hits">40</span>
1696
+
1697
+ <code class="ruby"> ret = self.class.new</code>
1698
+ </li>
1699
+
1700
+ <li class="covered" data-hits="40" data-linenumber="135">
1701
+ <span class="hits">40</span>
1702
+
1703
+ <code class="ruby"> self.each_pair do |k,v|</code>
1704
+ </li>
1705
+
1706
+ <li class="covered" data-hits="59" data-linenumber="136">
1707
+ <span class="hits">59</span>
1708
+
1709
+ <code class="ruby"> if opts[:only].include?(k.to_sym)</code>
1710
+ </li>
1711
+
1712
+ <li class="covered" data-hits="49" data-linenumber="137">
1713
+ <span class="hits">49</span>
1714
+
1715
+ <code class="ruby"> ret[k] = v.matcher(opts[k.to_sym] || {})</code>
1716
+ </li>
1717
+
1718
+ <li class="never" data-hits="" data-linenumber="138">
1719
+
1720
+
1721
+ <code class="ruby"> else</code>
1722
+ </li>
1723
+
1724
+ <li class="never" data-hits="" data-linenumber="139">
1725
+
1726
+
1727
+ <code class="ruby"> # Still try to pathify strings if this is an array or hash</code>
1728
+ </li>
1729
+
1730
+ <li class="covered" data-hits="10" data-linenumber="140">
1731
+ <span class="hits">10</span>
1732
+
1733
+ <code class="ruby"> if v.is_a?(Array) || v.is_a?(Hash)</code>
1734
+ </li>
1735
+
1736
+ <li class="missed" data-hits="0" data-linenumber="141">
1737
+
1738
+
1739
+ <code class="ruby"> ret[k] = v.pathify_strings</code>
1740
+ </li>
1741
+
1742
+ <li class="never" data-hits="" data-linenumber="142">
1743
+
1744
+
1745
+ <code class="ruby"> else</code>
1746
+ </li>
1747
+
1748
+ <li class="covered" data-hits="10" data-linenumber="143">
1749
+ <span class="hits">10</span>
1750
+
1751
+ <code class="ruby"> ret[k] = v</code>
1752
+ </li>
1753
+
1754
+ <li class="never" data-hits="" data-linenumber="144">
1755
+
1756
+
1757
+ <code class="ruby"> end</code>
1758
+ </li>
1759
+
1760
+ <li class="never" data-hits="" data-linenumber="145">
1761
+
1762
+
1763
+ <code class="ruby"> end</code>
1764
+ </li>
1765
+
1766
+ <li class="never" data-hits="" data-linenumber="146">
1767
+
1768
+
1769
+ <code class="ruby"> end</code>
1770
+ </li>
1771
+
1772
+ <li class="covered" data-hits="40" data-linenumber="147">
1773
+ <span class="hits">40</span>
1774
+
1775
+ <code class="ruby"> ret</code>
1776
+ </li>
1777
+
1778
+ <li class="never" data-hits="" data-linenumber="148">
1779
+
1780
+
1781
+ <code class="ruby"> end</code>
1782
+ </li>
1783
+
1784
+ <li class="never" data-hits="" data-linenumber="149">
1785
+
1786
+
1787
+ <code class="ruby">end</code>
1788
+ </li>
1789
+
1790
+ <li class="covered" data-hits="1" data-linenumber="150">
1791
+ <span class="hits">1</span>
1792
+
1793
+ <code class="ruby">class Array</code>
1794
+ </li>
1795
+
1796
+ <li class="covered" data-hits="1" data-linenumber="151">
1797
+ <span class="hits">1</span>
1798
+
1799
+ <code class="ruby"> def pathify_strings</code>
1800
+ </li>
1801
+
1802
+ <li class="covered" data-hits="44" data-linenumber="152">
1803
+ <span class="hits">44</span>
1804
+
1805
+ <code class="ruby"> if self.first == &quot;:matcher&quot;</code>
1806
+ </li>
1807
+
1808
+ <li class="missed" data-hits="0" data-linenumber="153">
1809
+
1810
+
1811
+ <code class="ruby"> val = VariableArray.new(self)</code>
1812
+ </li>
1813
+
1814
+ <li class="never" data-hits="" data-linenumber="154">
1815
+
1816
+
1817
+ <code class="ruby"> else</code>
1818
+ </li>
1819
+
1820
+ <li class="covered" data-hits="44" data-linenumber="155">
1821
+ <span class="hits">44</span>
1822
+
1823
+ <code class="ruby"> val = self</code>
1824
+ </li>
1825
+
1826
+ <li class="never" data-hits="" data-linenumber="156">
1827
+
1828
+
1829
+ <code class="ruby"> end</code>
1830
+ </li>
1831
+
1832
+ <li class="covered" data-hits="44" data-linenumber="157">
1833
+ <span class="hits">44</span>
1834
+
1835
+ <code class="ruby"> val.each_with_index do |v,k|</code>
1836
+ </li>
1837
+
1838
+ <li class="covered" data-hits="104" data-linenumber="158">
1839
+ <span class="hits">104</span>
1840
+
1841
+ <code class="ruby"> if v.is_a?(Array) || v.is_a?(Hash)</code>
1842
+ </li>
1843
+
1844
+ <li class="covered" data-hits="38" data-linenumber="159">
1845
+ <span class="hits">38</span>
1846
+
1847
+ <code class="ruby"> val[k] = v.pathify_strings</code>
1848
+ </li>
1849
+
1850
+ <li class="never" data-hits="" data-linenumber="160">
1851
+
1852
+
1853
+ <code class="ruby"> elsif v.instance_of?(String) || v.is_a?(Numeric)</code>
1854
+ </li>
1855
+
1856
+ <li class="covered" data-hits="66" data-linenumber="161">
1857
+ <span class="hits">66</span>
1858
+
1859
+ <code class="ruby"> val[k] = PathString.new(URI.decode(v.to_s))</code>
1860
+ </li>
1861
+
1862
+ <li class="never" data-hits="" data-linenumber="162">
1863
+
1864
+
1865
+ <code class="ruby"> end</code>
1866
+ </li>
1867
+
1868
+ <li class="never" data-hits="" data-linenumber="163">
1869
+
1870
+
1871
+ <code class="ruby"> end</code>
1872
+ </li>
1873
+
1874
+ <li class="covered" data-hits="44" data-linenumber="164">
1875
+ <span class="hits">44</span>
1876
+
1877
+ <code class="ruby"> val</code>
1878
+ </li>
1879
+
1880
+ <li class="never" data-hits="" data-linenumber="165">
1881
+
1882
+
1883
+ <code class="ruby"> end</code>
1884
+ </li>
1885
+
1886
+ <li class="never" data-hits="" data-linenumber="166">
1887
+
1888
+
1889
+ <code class="ruby"> # call matcher on all of the elements</code>
1890
+ </li>
1891
+
1892
+ <li class="covered" data-hits="1" data-linenumber="167">
1893
+ <span class="hits">1</span>
1894
+
1895
+ <code class="ruby"> def matcher(opts = {})</code>
1896
+ </li>
1897
+
1898
+ <li class="covered" data-hits="5" data-linenumber="168">
1899
+ <span class="hits">5</span>
1900
+
1901
+ <code class="ruby"> klone = self.clone</code>
1902
+ </li>
1903
+
1904
+ <li class="covered" data-hits="5" data-linenumber="169">
1905
+ <span class="hits">5</span>
1906
+
1907
+ <code class="ruby"> klone.unshift(&quot;:matcher&quot;)</code>
1908
+ </li>
1909
+
1910
+ <li class="covered" data-hits="5" data-linenumber="170">
1911
+ <span class="hits">5</span>
1912
+
1913
+ <code class="ruby"> VariableArray.new(klone.collect(&amp;:matcher))</code>
1914
+ </li>
1915
+
1916
+ <li class="never" data-hits="" data-linenumber="171">
1917
+
1918
+
1919
+ <code class="ruby"> end</code>
1920
+ </li>
1921
+
1922
+ <li class="never" data-hits="" data-linenumber="172">
1923
+
1924
+
1925
+ <code class="ruby"> # we want this to apply to both :eql? and ==</code>
1926
+ </li>
1927
+
1928
+ <li class="covered" data-hits="1" data-linenumber="173">
1929
+ <span class="hits">1</span>
1930
+
1931
+ <code class="ruby"> alias_method :eql?, :==</code>
1932
+ </li>
1933
+
1934
+ <li class="never" data-hits="" data-linenumber="174">
1935
+
1936
+
1937
+ <code class="ruby"> # we want this to add decorator behavior to ==, proxying to VariableArray if possible</code>
1938
+ </li>
1939
+
1940
+ <li class="covered" data-hits="1" data-linenumber="175">
1941
+ <span class="hits">1</span>
1942
+
1943
+ <code class="ruby"> define_method &quot;==_with_variable_array&quot; do |other|</code>
1944
+ </li>
1945
+
1946
+ <li class="covered" data-hits="32" data-linenumber="176">
1947
+ <span class="hits">32</span>
1948
+
1949
+ <code class="ruby"> return other == self if other.is_a?(VariableArray)</code>
1950
+ </li>
1951
+
1952
+ <li class="covered" data-hits="30" data-linenumber="177">
1953
+ <span class="hits">30</span>
1954
+
1955
+ <code class="ruby"> self.send(&quot;==_without_variable_array&quot;,other)</code>
1956
+ </li>
1957
+
1958
+ <li class="never" data-hits="" data-linenumber="178">
1959
+
1960
+
1961
+ <code class="ruby"> end</code>
1962
+ </li>
1963
+
1964
+ <li class="never" data-hits="" data-linenumber="179">
1965
+
1966
+
1967
+ <code class="ruby"> # Equivalent to:</code>
1968
+ </li>
1969
+
1970
+ <li class="never" data-hits="" data-linenumber="180">
1971
+
1972
+
1973
+ <code class="ruby"> # alias_method_chain &quot;==&quot;, &quot;variable_array&quot;</code>
1974
+ </li>
1975
+
1976
+ <li class="covered" data-hits="1" data-linenumber="181">
1977
+ <span class="hits">1</span>
1978
+
1979
+ <code class="ruby"> alias_method &quot;==_without_variable_array&quot;, :==</code>
1980
+ </li>
1981
+
1982
+ <li class="covered" data-hits="1" data-linenumber="182">
1983
+ <span class="hits">1</span>
1984
+
1985
+ <code class="ruby"> alias_method :==, &quot;==_with_variable_array&quot;</code>
1986
+ </li>
1987
+
1988
+ <li class="never" data-hits="" data-linenumber="183">
1989
+
1990
+
1991
+ <code class="ruby">end</code>
1992
+ </li>
1993
+
1994
+ </ol>
1995
+ </pre>
1996
+ </div>
1997
+
1998
+ <div class="source_table" id="9082f1e417147c61ee326c565b15a99cad953b35">
1999
+ <div class="header">
2000
+ <h3>lib/hash_dealer.rb</h3>
2001
+ <h4><span class="green">97.37 %</span> covered</h4>
2002
+ <div>
2003
+ <b>38</b> relevant lines.
2004
+ <span class="green"><b>37</b> lines covered</span> and
2005
+ <span class="red"><b>1</b> lines missed.</span>
2006
+ </div>
2007
+ </div>
2008
+
2009
+ <pre>
2010
+ <ol>
2011
+
2012
+ <li class="covered" data-hits="1" data-linenumber="1">
2013
+ <span class="hits">1</span>
2014
+
2015
+ <code class="ruby">require 'colorize'</code>
2016
+ </li>
2017
+
2018
+ <li class="never" data-hits="" data-linenumber="2">
2019
+
2020
+
2021
+ <code class="ruby"></code>
2022
+ </li>
2023
+
2024
+ <li class="covered" data-hits="1" data-linenumber="3">
2025
+ <span class="hits">1</span>
2026
+
2027
+ <code class="ruby">require File.expand_path('../path_string', __FILE__)</code>
2028
+ </li>
2029
+
2030
+ <li class="covered" data-hits="1" data-linenumber="4">
2031
+ <span class="hits">1</span>
2032
+
2033
+ <code class="ruby">require File.expand_path('../variable_array', __FILE__)</code>
2034
+ </li>
2035
+
2036
+ <li class="covered" data-hits="1" data-linenumber="5">
2037
+ <span class="hits">1</span>
2038
+
2039
+ <code class="ruby">require File.expand_path('../core_extensions', __FILE__)</code>
2040
+ </li>
2041
+
2042
+ <li class="covered" data-hits="1" data-linenumber="6">
2043
+ <span class="hits">1</span>
2044
+
2045
+ <code class="ruby">require File.expand_path('../matcher', __FILE__)</code>
2046
+ </li>
2047
+
2048
+ <li class="covered" data-hits="1" data-linenumber="7">
2049
+ <span class="hits">1</span>
2050
+
2051
+ <code class="ruby">require File.expand_path('../comparator', __FILE__)</code>
2052
+ </li>
2053
+
2054
+ <li class="never" data-hits="" data-linenumber="8">
2055
+
2056
+
2057
+ <code class="ruby"></code>
2058
+ </li>
2059
+
2060
+ <li class="covered" data-hits="1" data-linenumber="9">
2061
+ <span class="hits">1</span>
2062
+
2063
+ <code class="ruby">class HashDealer</code>
2064
+ </li>
2065
+
2066
+ <li class="never" data-hits="" data-linenumber="10">
2067
+
2068
+
2069
+ <code class="ruby"> </code>
2070
+ </li>
2071
+
2072
+ <li class="covered" data-hits="1" data-linenumber="11">
2073
+ <span class="hits">1</span>
2074
+
2075
+ <code class="ruby"> attr_accessor :parent</code>
2076
+ </li>
2077
+
2078
+ <li class="never" data-hits="" data-linenumber="12">
2079
+
2080
+
2081
+ <code class="ruby"></code>
2082
+ </li>
2083
+
2084
+ <li class="never" data-hits="" data-linenumber="13">
2085
+
2086
+
2087
+ <code class="ruby"> # cattr_accessor</code>
2088
+ </li>
2089
+
2090
+ <li class="covered" data-hits="1" data-linenumber="14">
2091
+ <span class="hits">1</span>
2092
+
2093
+ <code class="ruby"> def self.hashes</code>
2094
+ </li>
2095
+
2096
+ <li class="covered" data-hits="212" data-linenumber="15">
2097
+ <span class="hits">212</span>
2098
+
2099
+ <code class="ruby"> @hashes ||= {}</code>
2100
+ </li>
2101
+
2102
+ <li class="never" data-hits="" data-linenumber="16">
2103
+
2104
+
2105
+ <code class="ruby"> end</code>
2106
+ </li>
2107
+
2108
+ <li class="never" data-hits="" data-linenumber="17">
2109
+
2110
+
2111
+ <code class="ruby"> </code>
2112
+ </li>
2113
+
2114
+ <li class="never" data-hits="" data-linenumber="18">
2115
+
2116
+
2117
+ <code class="ruby"> # define a method of the request factory</code>
2118
+ </li>
2119
+
2120
+ <li class="covered" data-hits="1" data-linenumber="19">
2121
+ <span class="hits">1</span>
2122
+
2123
+ <code class="ruby"> def self.define(name, opts = {}, &amp;block)</code>
2124
+ </li>
2125
+
2126
+ <li class="covered" data-hits="23" data-linenumber="20">
2127
+ <span class="hits">23</span>
2128
+
2129
+ <code class="ruby"> self.hashes[name] = [opts, block]</code>
2130
+ </li>
2131
+
2132
+ <li class="never" data-hits="" data-linenumber="21">
2133
+
2134
+
2135
+ <code class="ruby"> end</code>
2136
+ </li>
2137
+
2138
+ <li class="never" data-hits="" data-linenumber="22">
2139
+
2140
+
2141
+ <code class="ruby"> </code>
2142
+ </li>
2143
+
2144
+ <li class="covered" data-hits="1" data-linenumber="23">
2145
+ <span class="hits">1</span>
2146
+
2147
+ <code class="ruby"> def self.roll(name, overrides = {})</code>
2148
+ </li>
2149
+
2150
+ <li class="covered" data-hits="40" data-linenumber="24">
2151
+ <span class="hits">40</span>
2152
+
2153
+ <code class="ruby"> raise Exception.new(&quot;No HashDealer called #{name}&quot;) unless self.hashes[name]</code>
2154
+ </li>
2155
+
2156
+ <li class="covered" data-hits="40" data-linenumber="25">
2157
+ <span class="hits">40</span>
2158
+
2159
+ <code class="ruby"> self.hashes[name] = self.new(self.hashes[name][0], &amp;self.hashes[name][1]) unless self.hashes[name].is_a?(HashDealer)</code>
2160
+ </li>
2161
+
2162
+ <li class="never" data-hits="" data-linenumber="26">
2163
+
2164
+
2165
+ <code class="ruby"></code>
2166
+ </li>
2167
+
2168
+ <li class="covered" data-hits="40" data-linenumber="27">
2169
+ <span class="hits">40</span>
2170
+
2171
+ <code class="ruby"> self.hashes[name]._attributes(overrides)</code>
2172
+ </li>
2173
+
2174
+ <li class="never" data-hits="" data-linenumber="28">
2175
+
2176
+
2177
+ <code class="ruby"> end</code>
2178
+ </li>
2179
+
2180
+ <li class="never" data-hits="" data-linenumber="29">
2181
+
2182
+
2183
+ <code class="ruby"> </code>
2184
+ </li>
2185
+
2186
+ <li class="never" data-hits="" data-linenumber="30">
2187
+
2188
+
2189
+ <code class="ruby"> # initializer just calls the block from within our DSL</code>
2190
+ </li>
2191
+
2192
+ <li class="covered" data-hits="1" data-linenumber="31">
2193
+ <span class="hits">1</span>
2194
+
2195
+ <code class="ruby"> def initialize(opts = {}, &amp;block)</code>
2196
+ </li>
2197
+
2198
+ <li class="covered" data-hits="23" data-linenumber="32">
2199
+ <span class="hits">23</span>
2200
+
2201
+ <code class="ruby"> @parent = opts[:parent]</code>
2202
+ </li>
2203
+
2204
+ <li class="covered" data-hits="23" data-linenumber="33">
2205
+ <span class="hits">23</span>
2206
+
2207
+ <code class="ruby"> instance_eval(&amp;block)</code>
2208
+ </li>
2209
+
2210
+ <li class="never" data-hits="" data-linenumber="34">
2211
+
2212
+
2213
+ <code class="ruby"> end</code>
2214
+ </li>
2215
+
2216
+ <li class="never" data-hits="" data-linenumber="35">
2217
+
2218
+
2219
+ <code class="ruby"> </code>
2220
+ </li>
2221
+
2222
+ <li class="never" data-hits="" data-linenumber="36">
2223
+
2224
+
2225
+ <code class="ruby"> # set the value as the root element for attributes</code>
2226
+ </li>
2227
+
2228
+ <li class="covered" data-hits="1" data-linenumber="37">
2229
+ <span class="hits">1</span>
2230
+
2231
+ <code class="ruby"> def root(value)</code>
2232
+ </li>
2233
+
2234
+ <li class="covered" data-hits="3" data-linenumber="38">
2235
+ <span class="hits">3</span>
2236
+
2237
+ <code class="ruby"> @attributes = value</code>
2238
+ </li>
2239
+
2240
+ <li class="never" data-hits="" data-linenumber="39">
2241
+
2242
+
2243
+ <code class="ruby"> end</code>
2244
+ </li>
2245
+
2246
+ <li class="never" data-hits="" data-linenumber="40">
2247
+
2248
+
2249
+ <code class="ruby"></code>
2250
+ </li>
2251
+
2252
+ <li class="covered" data-hits="1" data-linenumber="41">
2253
+ <span class="hits">1</span>
2254
+
2255
+ <code class="ruby"> def [](val)</code>
2256
+ </li>
2257
+
2258
+ <li class="missed" data-hits="0" data-linenumber="42">
2259
+
2260
+
2261
+ <code class="ruby"> @attributes[val]</code>
2262
+ </li>
2263
+
2264
+ <li class="never" data-hits="" data-linenumber="43">
2265
+
2266
+
2267
+ <code class="ruby"> end</code>
2268
+ </li>
2269
+
2270
+ <li class="never" data-hits="" data-linenumber="44">
2271
+
2272
+
2273
+ <code class="ruby"> </code>
2274
+ </li>
2275
+
2276
+ <li class="never" data-hits="" data-linenumber="45">
2277
+
2278
+
2279
+ <code class="ruby"> # get the stored attributes for this HashDealer</code>
2280
+ </li>
2281
+
2282
+ <li class="covered" data-hits="1" data-linenumber="46">
2283
+ <span class="hits">1</span>
2284
+
2285
+ <code class="ruby"> def _attributes(overrides)</code>
2286
+ </li>
2287
+
2288
+ <li class="never" data-hits="" data-linenumber="47">
2289
+
2290
+
2291
+ <code class="ruby"> # allows us to set a root value</code>
2292
+ </li>
2293
+
2294
+ <li class="covered" data-hits="40" data-linenumber="48">
2295
+ <span class="hits">40</span>
2296
+
2297
+ <code class="ruby"> return @attributes.clone unless @attributes.is_a?(Hash)</code>
2298
+ </li>
2299
+
2300
+ <li class="covered" data-hits="38" data-linenumber="49">
2301
+ <span class="hits">38</span>
2302
+
2303
+ <code class="ruby"> att = @parent ? HashDealer.roll(@parent.to_sym) : Hash.new</code>
2304
+ </li>
2305
+
2306
+ <li class="covered" data-hits="38" data-linenumber="50">
2307
+ <span class="hits">38</span>
2308
+
2309
+ <code class="ruby"> @attributes.each do |k,v|</code>
2310
+ </li>
2311
+
2312
+ <li class="covered" data-hits="60" data-linenumber="51">
2313
+ <span class="hits">60</span>
2314
+
2315
+ <code class="ruby"> att[k] = v.is_a?(Proc) ? v.call(att.merge(overrides)) : v</code>
2316
+ </li>
2317
+
2318
+ <li class="never" data-hits="" data-linenumber="52">
2319
+
2320
+
2321
+ <code class="ruby"> end</code>
2322
+ </li>
2323
+
2324
+ <li class="never" data-hits="" data-linenumber="53">
2325
+
2326
+
2327
+ <code class="ruby"> # if we have a hash as the first arg, it would override the attributes</code>
2328
+ </li>
2329
+
2330
+ <li class="covered" data-hits="38" data-linenumber="54">
2331
+ <span class="hits">38</span>
2332
+
2333
+ <code class="ruby"> overrides.each_pair do |k,v|</code>
2334
+ </li>
2335
+
2336
+ <li class="covered" data-hits="2" data-linenumber="55">
2337
+ <span class="hits">2</span>
2338
+
2339
+ <code class="ruby"> att[k.to_sym] = v if att.has_key?(k.to_sym)</code>
2340
+ </li>
2341
+
2342
+ <li class="never" data-hits="" data-linenumber="56">
2343
+
2344
+
2345
+ <code class="ruby"> end</code>
2346
+ </li>
2347
+
2348
+ <li class="covered" data-hits="38" data-linenumber="57">
2349
+ <span class="hits">38</span>
2350
+
2351
+ <code class="ruby"> att</code>
2352
+ </li>
2353
+
2354
+ <li class="never" data-hits="" data-linenumber="58">
2355
+
2356
+
2357
+ <code class="ruby"> end</code>
2358
+ </li>
2359
+
2360
+ <li class="never" data-hits="" data-linenumber="59">
2361
+
2362
+
2363
+ <code class="ruby"> </code>
2364
+ </li>
2365
+
2366
+ <li class="covered" data-hits="1" data-linenumber="60">
2367
+ <span class="hits">1</span>
2368
+
2369
+ <code class="ruby"> protected</code>
2370
+ </li>
2371
+
2372
+ <li class="never" data-hits="" data-linenumber="61">
2373
+
2374
+
2375
+ <code class="ruby"> </code>
2376
+ </li>
2377
+
2378
+ <li class="never" data-hits="" data-linenumber="62">
2379
+
2380
+
2381
+ <code class="ruby"> # method missing</code>
2382
+ </li>
2383
+
2384
+ <li class="covered" data-hits="1" data-linenumber="63">
2385
+ <span class="hits">1</span>
2386
+
2387
+ <code class="ruby"> def method_missing(meth, *args, &amp;block)</code>
2388
+ </li>
2389
+
2390
+ <li class="covered" data-hits="31" data-linenumber="64">
2391
+ <span class="hits">31</span>
2392
+
2393
+ <code class="ruby"> raise Exception.new(&quot;Please provide either a String or a block to #{meth}&quot;) unless (args.length == 1 || (args.empty? &amp;&amp; block_given?))</code>
2394
+ </li>
2395
+
2396
+ <li class="covered" data-hits="31" data-linenumber="65">
2397
+ <span class="hits">31</span>
2398
+
2399
+ <code class="ruby"> @attributes ||= Hash.new</code>
2400
+ </li>
2401
+
2402
+ <li class="covered" data-hits="31" data-linenumber="66">
2403
+ <span class="hits">31</span>
2404
+
2405
+ <code class="ruby"> if block_given?</code>
2406
+ </li>
2407
+
2408
+ <li class="covered" data-hits="5" data-linenumber="67">
2409
+ <span class="hits">5</span>
2410
+
2411
+ <code class="ruby"> @attributes[meth.to_sym] = block</code>
2412
+ </li>
2413
+
2414
+ <li class="never" data-hits="" data-linenumber="68">
2415
+
2416
+
2417
+ <code class="ruby"> else</code>
2418
+ </li>
2419
+
2420
+ <li class="covered" data-hits="26" data-linenumber="69">
2421
+ <span class="hits">26</span>
2422
+
2423
+ <code class="ruby"> @attributes[meth.to_sym] = args.first</code>
2424
+ </li>
2425
+
2426
+ <li class="never" data-hits="" data-linenumber="70">
2427
+
2428
+
2429
+ <code class="ruby"> end</code>
2430
+ </li>
2431
+
2432
+ <li class="never" data-hits="" data-linenumber="71">
2433
+
2434
+
2435
+ <code class="ruby"> end</code>
2436
+ </li>
2437
+
2438
+ <li class="never" data-hits="" data-linenumber="72">
2439
+
2440
+
2441
+ <code class="ruby">end</code>
2442
+ </li>
2443
+
2444
+ </ol>
2445
+ </pre>
2446
+ </div>
2447
+
2448
+ <div class="source_table" id="4cc7721b735165eef9b1e5afd4a168c1a72d5103">
2449
+ <div class="header">
2450
+ <h3>lib/matcher.rb</h3>
2451
+ <h4><span class="red">48.84 %</span> covered</h4>
2452
+ <div>
2453
+ <b>43</b> relevant lines.
2454
+ <span class="green"><b>21</b> lines covered</span> and
2455
+ <span class="red"><b>22</b> lines missed.</span>
2456
+ </div>
2457
+ </div>
2458
+
2459
+ <pre>
2460
+ <ol>
2461
+
2462
+ <li class="never" data-hits="" data-linenumber="1">
2463
+
2464
+
2465
+ <code class="ruby"># just in case it's not loaded</code>
2466
+ </li>
2467
+
2468
+ <li class="covered" data-hits="1" data-linenumber="2">
2469
+ <span class="hits">1</span>
2470
+
2471
+ <code class="ruby">require 'rspec'</code>
2472
+ </li>
2473
+
2474
+ <li class="covered" data-hits="1" data-linenumber="3">
2475
+ <span class="hits">1</span>
2476
+
2477
+ <code class="ruby">require 'pp'</code>
2478
+ </li>
2479
+
2480
+ <li class="never" data-hits="" data-linenumber="4">
2481
+
2482
+
2483
+ <code class="ruby"></code>
2484
+ </li>
2485
+
2486
+ <li class="never" data-hits="" data-linenumber="5">
2487
+
2488
+
2489
+ <code class="ruby"></code>
2490
+ </li>
2491
+
2492
+ <li class="covered" data-hits="1" data-linenumber="6">
2493
+ <span class="hits">1</span>
2494
+
2495
+ <code class="ruby">def print_diff(diff, depth = 1)</code>
2496
+ </li>
2497
+
2498
+ <li class="missed" data-hits="0" data-linenumber="7">
2499
+
2500
+
2501
+ <code class="ruby"> puts &quot;#{&quot;\t&quot; * depth}&quot; + &quot;HashDealer::#{diff.first.to_s}&quot;.bold.cyan + &quot;\t\t\t\tResponse::#{diff.last.to_s}&quot;.bold.yellow if diff.is_a?(Array)</code>
2502
+ </li>
2503
+
2504
+ <li class="missed" data-hits="0" data-linenumber="8">
2505
+
2506
+
2507
+ <code class="ruby"> if diff.is_a?(Hash)</code>
2508
+ </li>
2509
+
2510
+ <li class="missed" data-hits="0" data-linenumber="9">
2511
+
2512
+
2513
+ <code class="ruby"> diff.each_pair do |k, v|</code>
2514
+ </li>
2515
+
2516
+ <li class="missed" data-hits="0" data-linenumber="10">
2517
+
2518
+
2519
+ <code class="ruby"> puts &quot;\n&quot;</code>
2520
+ </li>
2521
+
2522
+ <li class="missed" data-hits="0" data-linenumber="11">
2523
+
2524
+
2525
+ <code class="ruby"> puts ((&quot;\t&quot; * depth) + k.to_s).red</code>
2526
+ </li>
2527
+
2528
+ <li class="missed" data-hits="0" data-linenumber="12">
2529
+
2530
+
2531
+ <code class="ruby"> print_diff(v, depth + 1)</code>
2532
+ </li>
2533
+
2534
+ <li class="never" data-hits="" data-linenumber="13">
2535
+
2536
+
2537
+ <code class="ruby"> end</code>
2538
+ </li>
2539
+
2540
+ <li class="never" data-hits="" data-linenumber="14">
2541
+
2542
+
2543
+ <code class="ruby"> end</code>
2544
+ </li>
2545
+
2546
+ <li class="never" data-hits="" data-linenumber="15">
2547
+
2548
+
2549
+ <code class="ruby">end</code>
2550
+ </li>
2551
+
2552
+ <li class="never" data-hits="" data-linenumber="16">
2553
+
2554
+
2555
+ <code class="ruby"></code>
2556
+ </li>
2557
+
2558
+ <li class="covered" data-hits="1" data-linenumber="17">
2559
+ <span class="hits">1</span>
2560
+
2561
+ <code class="ruby">RSpec::Matchers.define(:match_response) do |actual|</code>
2562
+ </li>
2563
+
2564
+ <li class="never" data-hits="" data-linenumber="18">
2565
+
2566
+
2567
+ <code class="ruby"> </code>
2568
+ </li>
2569
+
2570
+ <li class="covered" data-hits="10" data-linenumber="19">
2571
+ <span class="hits">10</span>
2572
+
2573
+ <code class="ruby"> actual = Comparator.normalize_value(actual)</code>
2574
+ </li>
2575
+
2576
+ <li class="never" data-hits="" data-linenumber="20">
2577
+
2578
+
2579
+ <code class="ruby"> </code>
2580
+ </li>
2581
+
2582
+ <li class="covered" data-hits="10" data-linenumber="21">
2583
+ <span class="hits">10</span>
2584
+
2585
+ <code class="ruby"> match do |expected|</code>
2586
+ </li>
2587
+
2588
+ <li class="covered" data-hits="10" data-linenumber="22">
2589
+ <span class="hits">10</span>
2590
+
2591
+ <code class="ruby"> expected = Comparator.normalize_value(expected)</code>
2592
+ </li>
2593
+
2594
+ <li class="covered" data-hits="10" data-linenumber="23">
2595
+ <span class="hits">10</span>
2596
+
2597
+ <code class="ruby"> @diff = Comparator.diff(actual, expected)</code>
2598
+ </li>
2599
+
2600
+ <li class="covered" data-hits="10" data-linenumber="24">
2601
+ <span class="hits">10</span>
2602
+
2603
+ <code class="ruby"> @diff == {}</code>
2604
+ </li>
2605
+
2606
+ <li class="never" data-hits="" data-linenumber="25">
2607
+
2608
+
2609
+ <code class="ruby"> end</code>
2610
+ </li>
2611
+
2612
+ <li class="never" data-hits="" data-linenumber="26">
2613
+
2614
+
2615
+ <code class="ruby"> </code>
2616
+ </li>
2617
+
2618
+ <li class="covered" data-hits="10" data-linenumber="27">
2619
+ <span class="hits">10</span>
2620
+
2621
+ <code class="ruby"> failure_message_for_should do |container|</code>
2622
+ </li>
2623
+
2624
+ <li class="missed" data-hits="0" data-linenumber="28">
2625
+
2626
+
2627
+ <code class="ruby"> puts &quot;\n&quot;</code>
2628
+ </li>
2629
+
2630
+ <li class="missed" data-hits="0" data-linenumber="29">
2631
+
2632
+
2633
+ <code class="ruby"> print_diff(@diff)</code>
2634
+ </li>
2635
+
2636
+ <li class="missed" data-hits="0" data-linenumber="30">
2637
+
2638
+
2639
+ <code class="ruby"> puts &quot;\n&quot;</code>
2640
+ </li>
2641
+
2642
+ <li class="missed" data-hits="0" data-linenumber="31">
2643
+
2644
+
2645
+ <code class="ruby"> &quot;&quot;</code>
2646
+ </li>
2647
+
2648
+ <li class="never" data-hits="" data-linenumber="32">
2649
+
2650
+
2651
+ <code class="ruby"> end</code>
2652
+ </li>
2653
+
2654
+ <li class="never" data-hits="" data-linenumber="33">
2655
+
2656
+
2657
+ <code class="ruby"> </code>
2658
+ </li>
2659
+
2660
+ <li class="covered" data-hits="10" data-linenumber="34">
2661
+ <span class="hits">10</span>
2662
+
2663
+ <code class="ruby"> failure_message_for_should_not do |container|</code>
2664
+ </li>
2665
+
2666
+ <li class="missed" data-hits="0" data-linenumber="35">
2667
+
2668
+
2669
+ <code class="ruby"> puts &quot;\n&quot;</code>
2670
+ </li>
2671
+
2672
+ <li class="missed" data-hits="0" data-linenumber="36">
2673
+
2674
+
2675
+ <code class="ruby"> print_diff(@diff)</code>
2676
+ </li>
2677
+
2678
+ <li class="missed" data-hits="0" data-linenumber="37">
2679
+
2680
+
2681
+ <code class="ruby"> puts &quot;\n&quot;</code>
2682
+ </li>
2683
+
2684
+ <li class="missed" data-hits="0" data-linenumber="38">
2685
+
2686
+
2687
+ <code class="ruby"> &quot;&quot;</code>
2688
+ </li>
2689
+
2690
+ <li class="never" data-hits="" data-linenumber="39">
2691
+
2692
+
2693
+ <code class="ruby"> end</code>
2694
+ </li>
2695
+
2696
+ <li class="never" data-hits="" data-linenumber="40">
2697
+
2698
+
2699
+ <code class="ruby">end</code>
2700
+ </li>
2701
+
2702
+ <li class="never" data-hits="" data-linenumber="41">
2703
+
2704
+
2705
+ <code class="ruby"></code>
2706
+ </li>
2707
+
2708
+ <li class="never" data-hits="" data-linenumber="42">
2709
+
2710
+
2711
+ <code class="ruby"># alias as match_json</code>
2712
+ </li>
2713
+
2714
+ <li class="covered" data-hits="1" data-linenumber="43">
2715
+ <span class="hits">1</span>
2716
+
2717
+ <code class="ruby">RSpec::Matchers.define(:match_list) do |actual|</code>
2718
+ </li>
2719
+
2720
+ <li class="never" data-hits="" data-linenumber="44">
2721
+
2722
+
2723
+ <code class="ruby"> </code>
2724
+ </li>
2725
+
2726
+ <li class="covered" data-hits="2" data-linenumber="45">
2727
+ <span class="hits">2</span>
2728
+
2729
+ <code class="ruby"> actual = Comparator.normalize_value(actual)</code>
2730
+ </li>
2731
+
2732
+ <li class="never" data-hits="" data-linenumber="46">
2733
+
2734
+
2735
+ <code class="ruby"> </code>
2736
+ </li>
2737
+
2738
+ <li class="covered" data-hits="2" data-linenumber="47">
2739
+ <span class="hits">2</span>
2740
+
2741
+ <code class="ruby"> match do |expected|</code>
2742
+ </li>
2743
+
2744
+ <li class="covered" data-hits="2" data-linenumber="48">
2745
+ <span class="hits">2</span>
2746
+
2747
+ <code class="ruby"> expected = Comparator.normalize_value(expected)</code>
2748
+ </li>
2749
+
2750
+ <li class="covered" data-hits="2" data-linenumber="49">
2751
+ <span class="hits">2</span>
2752
+
2753
+ <code class="ruby"> expected = expected.first if expected.is_a?(Array)</code>
2754
+ </li>
2755
+
2756
+ <li class="covered" data-hits="2" data-linenumber="50">
2757
+ <span class="hits">2</span>
2758
+
2759
+ <code class="ruby"> actual = actual.first if actual.is_a?(Array)</code>
2760
+ </li>
2761
+
2762
+ <li class="covered" data-hits="2" data-linenumber="51">
2763
+ <span class="hits">2</span>
2764
+
2765
+ <code class="ruby"> @diff = Comparator.diff(actual, expected)</code>
2766
+ </li>
2767
+
2768
+ <li class="covered" data-hits="2" data-linenumber="52">
2769
+ <span class="hits">2</span>
2770
+
2771
+ <code class="ruby"> @diff == {}</code>
2772
+ </li>
2773
+
2774
+ <li class="never" data-hits="" data-linenumber="53">
2775
+
2776
+
2777
+ <code class="ruby"> end</code>
2778
+ </li>
2779
+
2780
+ <li class="never" data-hits="" data-linenumber="54">
2781
+
2782
+
2783
+ <code class="ruby"> </code>
2784
+ </li>
2785
+
2786
+ <li class="covered" data-hits="2" data-linenumber="55">
2787
+ <span class="hits">2</span>
2788
+
2789
+ <code class="ruby"> failure_message_for_should do |container|</code>
2790
+ </li>
2791
+
2792
+ <li class="missed" data-hits="0" data-linenumber="56">
2793
+
2794
+
2795
+ <code class="ruby"> puts &quot;\n&quot;</code>
2796
+ </li>
2797
+
2798
+ <li class="missed" data-hits="0" data-linenumber="57">
2799
+
2800
+
2801
+ <code class="ruby"> print_diff(@diff)</code>
2802
+ </li>
2803
+
2804
+ <li class="missed" data-hits="0" data-linenumber="58">
2805
+
2806
+
2807
+ <code class="ruby"> puts &quot;\n&quot;</code>
2808
+ </li>
2809
+
2810
+ <li class="missed" data-hits="0" data-linenumber="59">
2811
+
2812
+
2813
+ <code class="ruby"> &quot;&quot;</code>
2814
+ </li>
2815
+
2816
+ <li class="never" data-hits="" data-linenumber="60">
2817
+
2818
+
2819
+ <code class="ruby"> end</code>
2820
+ </li>
2821
+
2822
+ <li class="never" data-hits="" data-linenumber="61">
2823
+
2824
+
2825
+ <code class="ruby"> </code>
2826
+ </li>
2827
+
2828
+ <li class="covered" data-hits="2" data-linenumber="62">
2829
+ <span class="hits">2</span>
2830
+
2831
+ <code class="ruby"> failure_message_for_should_not do |container|</code>
2832
+ </li>
2833
+
2834
+ <li class="missed" data-hits="0" data-linenumber="63">
2835
+
2836
+
2837
+ <code class="ruby"> puts &quot;\n&quot;</code>
2838
+ </li>
2839
+
2840
+ <li class="missed" data-hits="0" data-linenumber="64">
2841
+
2842
+
2843
+ <code class="ruby"> print_diff(@diff)</code>
2844
+ </li>
2845
+
2846
+ <li class="missed" data-hits="0" data-linenumber="65">
2847
+
2848
+
2849
+ <code class="ruby"> puts &quot;\n&quot;</code>
2850
+ </li>
2851
+
2852
+ <li class="missed" data-hits="0" data-linenumber="66">
2853
+
2854
+
2855
+ <code class="ruby"> &quot;&quot;</code>
2856
+ </li>
2857
+
2858
+ <li class="never" data-hits="" data-linenumber="67">
2859
+
2860
+
2861
+ <code class="ruby"> end</code>
2862
+ </li>
2863
+
2864
+ <li class="never" data-hits="" data-linenumber="68">
2865
+
2866
+
2867
+ <code class="ruby"> </code>
2868
+ </li>
2869
+
2870
+ <li class="never" data-hits="" data-linenumber="69">
2871
+
2872
+
2873
+ <code class="ruby">end</code>
2874
+ </li>
2875
+
2876
+ </ol>
2877
+ </pre>
2878
+ </div>
2879
+
2880
+ <div class="source_table" id="a262d63e5dc399019853b13f0e4b947eb9908f86">
2881
+ <div class="header">
2882
+ <h3>lib/path_string.rb</h3>
2883
+ <h4><span class="red">69.57 %</span> covered</h4>
2884
+ <div>
2885
+ <b>69</b> relevant lines.
2886
+ <span class="green"><b>48</b> lines covered</span> and
2887
+ <span class="red"><b>21</b> lines missed.</span>
2888
+ </div>
2889
+ </div>
2890
+
2891
+ <pre>
2892
+ <ol>
2893
+
2894
+ <li class="covered" data-hits="1" data-linenumber="1">
2895
+ <span class="hits">1</span>
2896
+
2897
+ <code class="ruby">require &quot;active_support&quot;</code>
2898
+ </li>
2899
+
2900
+ <li class="never" data-hits="" data-linenumber="2">
2901
+
2902
+
2903
+ <code class="ruby"></code>
2904
+ </li>
2905
+
2906
+ <li class="covered" data-hits="1" data-linenumber="3">
2907
+ <span class="hits">1</span>
2908
+
2909
+ <code class="ruby">class PathString &lt; String</code>
2910
+ </li>
2911
+
2912
+ <li class="never" data-hits="" data-linenumber="4">
2913
+
2914
+
2915
+ <code class="ruby"> </code>
2916
+ </li>
2917
+
2918
+ <li class="covered" data-hits="1" data-linenumber="5">
2919
+ <span class="hits">1</span>
2920
+
2921
+ <code class="ruby"> def == (other)</code>
2922
+ </li>
2923
+
2924
+ <li class="never" data-hits="" data-linenumber="6">
2925
+
2926
+
2927
+ <code class="ruby"> # if either is a string that starts with a :, return true</code>
2928
+ </li>
2929
+
2930
+ <li class="covered" data-hits="54" data-linenumber="7">
2931
+ <span class="hits">54</span>
2932
+
2933
+ <code class="ruby"> if self =~ /^:/ || (other.is_a?(Numeric) &amp;&amp; self =~ /^:\d+$/) || other =~ /^:/</code>
2934
+ </li>
2935
+
2936
+ <li class="covered" data-hits="34" data-linenumber="8">
2937
+ <span class="hits">34</span>
2938
+
2939
+ <code class="ruby"> return true</code>
2940
+ </li>
2941
+
2942
+ <li class="covered" data-hits="20" data-linenumber="9">
2943
+ <span class="hits">20</span>
2944
+
2945
+ <code class="ruby"> elsif self =~ /\/:/ || other =~ /\/:/</code>
2946
+ </li>
2947
+
2948
+ <li class="covered" data-hits="1" data-linenumber="10">
2949
+ <span class="hits">1</span>
2950
+
2951
+ <code class="ruby"> return self.class.paths_match?(self, other)</code>
2952
+ </li>
2953
+
2954
+ <li class="never" data-hits="" data-linenumber="11">
2955
+
2956
+
2957
+ <code class="ruby"> else</code>
2958
+ </li>
2959
+
2960
+ <li class="covered" data-hits="19" data-linenumber="12">
2961
+ <span class="hits">19</span>
2962
+
2963
+ <code class="ruby"> super</code>
2964
+ </li>
2965
+
2966
+ <li class="never" data-hits="" data-linenumber="13">
2967
+
2968
+
2969
+ <code class="ruby"> end</code>
2970
+ </li>
2971
+
2972
+ <li class="never" data-hits="" data-linenumber="14">
2973
+
2974
+
2975
+ <code class="ruby"> end</code>
2976
+ </li>
2977
+
2978
+ <li class="covered" data-hits="1" data-linenumber="15">
2979
+ <span class="hits">1</span>
2980
+
2981
+ <code class="ruby"> alias_method :eql?, :==</code>
2982
+ </li>
2983
+
2984
+ <li class="never" data-hits="" data-linenumber="16">
2985
+
2986
+
2987
+ <code class="ruby"> </code>
2988
+ </li>
2989
+
2990
+ <li class="covered" data-hits="1" data-linenumber="17">
2991
+ <span class="hits">1</span>
2992
+
2993
+ <code class="ruby"> def self.paths_match?(a, b)</code>
2994
+ </li>
2995
+
2996
+ <li class="covered" data-hits="2" data-linenumber="18">
2997
+ <span class="hits">2</span>
2998
+
2999
+ <code class="ruby"> self.get_zipped_array(a, b).each do |kp, ep|</code>
3000
+ </li>
3001
+
3002
+ <li class="never" data-hits="" data-linenumber="19">
3003
+
3004
+
3005
+ <code class="ruby"> # only known path can have things prefixed with colons which is protected</code>
3006
+ </li>
3007
+
3008
+ <li class="covered" data-hits="6" data-linenumber="20">
3009
+ <span class="hits">6</span>
3010
+
3011
+ <code class="ruby"> if kp.nil? || ep.nil?</code>
3012
+ </li>
3013
+
3014
+ <li class="missed" data-hits="0" data-linenumber="21">
3015
+
3016
+
3017
+ <code class="ruby"> return false</code>
3018
+ </li>
3019
+
3020
+ <li class="never" data-hits="" data-linenumber="22">
3021
+
3022
+
3023
+ <code class="ruby"> elsif String.new(kp) != String.new(ep) &amp;&amp; !kp.start_with?(&quot;:&quot;) &amp;&amp; !ep.start_with?(&quot;:&quot;)</code>
3024
+ </li>
3025
+
3026
+ <li class="missed" data-hits="0" data-linenumber="23">
3027
+
3028
+
3029
+ <code class="ruby"> return false</code>
3030
+ </li>
3031
+
3032
+ <li class="never" data-hits="" data-linenumber="24">
3033
+
3034
+
3035
+ <code class="ruby"> end</code>
3036
+ </li>
3037
+
3038
+ <li class="never" data-hits="" data-linenumber="25">
3039
+
3040
+
3041
+ <code class="ruby"> end</code>
3042
+ </li>
3043
+
3044
+ <li class="covered" data-hits="2" data-linenumber="26">
3045
+ <span class="hits">2</span>
3046
+
3047
+ <code class="ruby"> return true</code>
3048
+ </li>
3049
+
3050
+ <li class="never" data-hits="" data-linenumber="27">
3051
+
3052
+
3053
+ <code class="ruby"> end</code>
3054
+ </li>
3055
+
3056
+ <li class="never" data-hits="" data-linenumber="28">
3057
+
3058
+
3059
+ <code class="ruby"> </code>
3060
+ </li>
3061
+
3062
+ <li class="covered" data-hits="1" data-linenumber="29">
3063
+ <span class="hits">1</span>
3064
+
3065
+ <code class="ruby"> def self.as_sorted_json(val)</code>
3066
+ </li>
3067
+
3068
+ <li class="covered" data-hits="6" data-linenumber="30">
3069
+ <span class="hits">6</span>
3070
+
3071
+ <code class="ruby"> val = self.sort_json(val)</code>
3072
+ </li>
3073
+
3074
+ <li class="covered" data-hits="6" data-linenumber="31">
3075
+ <span class="hits">6</span>
3076
+
3077
+ <code class="ruby"> val = val.pathify_strings</code>
3078
+ </li>
3079
+
3080
+ <li class="covered" data-hits="6" data-linenumber="32">
3081
+ <span class="hits">6</span>
3082
+
3083
+ <code class="ruby"> val</code>
3084
+ </li>
3085
+
3086
+ <li class="never" data-hits="" data-linenumber="33">
3087
+
3088
+
3089
+ <code class="ruby"> end</code>
3090
+ </li>
3091
+
3092
+ <li class="never" data-hits="" data-linenumber="34">
3093
+
3094
+
3095
+ <code class="ruby"> </code>
3096
+ </li>
3097
+
3098
+ <li class="never" data-hits="" data-linenumber="35">
3099
+
3100
+
3101
+ <code class="ruby"> # helper method to be called recursively</code>
3102
+ </li>
3103
+
3104
+ <li class="covered" data-hits="1" data-linenumber="36">
3105
+ <span class="hits">1</span>
3106
+
3107
+ <code class="ruby"> def self.sort_json(val)</code>
3108
+ </li>
3109
+
3110
+ <li class="covered" data-hits="8" data-linenumber="37">
3111
+ <span class="hits">8</span>
3112
+
3113
+ <code class="ruby"> return val if val.is_a?(TimeDateMatcher)</code>
3114
+ </li>
3115
+
3116
+ <li class="covered" data-hits="8" data-linenumber="38">
3117
+ <span class="hits">8</span>
3118
+
3119
+ <code class="ruby"> val = ActiveSupport::JSON.decode(val) if val.is_a?(String)</code>
3120
+ </li>
3121
+
3122
+ <li class="covered" data-hits="8" data-linenumber="39">
3123
+ <span class="hits">8</span>
3124
+
3125
+ <code class="ruby"> val = self.stringify_keys(val).sort if val.is_a?(Hash)</code>
3126
+ </li>
3127
+
3128
+ <li class="covered" data-hits="104" data-linenumber="40">
3129
+ <span class="hits">104</span>
3130
+
3131
+ <code class="ruby"> val = val.collect{|v| v.collect{|n| n.is_a?(Hash) ? self.sort_json(n) : n}} if val.is_a?(Array)</code>
3132
+ </li>
3133
+
3134
+ <li class="covered" data-hits="8" data-linenumber="41">
3135
+ <span class="hits">8</span>
3136
+
3137
+ <code class="ruby"> val.sort</code>
3138
+ </li>
3139
+
3140
+ <li class="never" data-hits="" data-linenumber="42">
3141
+
3142
+
3143
+ <code class="ruby"> end</code>
3144
+ </li>
3145
+
3146
+ <li class="never" data-hits="" data-linenumber="43">
3147
+
3148
+
3149
+ <code class="ruby"> </code>
3150
+ </li>
3151
+
3152
+ <li class="never" data-hits="" data-linenumber="44">
3153
+
3154
+
3155
+ <code class="ruby"> # </code>
3156
+ </li>
3157
+
3158
+ <li class="never" data-hits="" data-linenumber="45">
3159
+
3160
+
3161
+ <code class="ruby"> # </code>
3162
+ </li>
3163
+
3164
+ <li class="covered" data-hits="1" data-linenumber="46">
3165
+ <span class="hits">1</span>
3166
+
3167
+ <code class="ruby"> def self.extract_params(known_path, entered_path)</code>
3168
+ </li>
3169
+
3170
+ <li class="missed" data-hits="0" data-linenumber="47">
3171
+
3172
+
3173
+ <code class="ruby"> params = {}.with_indifferent_access</code>
3174
+ </li>
3175
+
3176
+ <li class="never" data-hits="" data-linenumber="48">
3177
+
3178
+
3179
+ <code class="ruby"> </code>
3180
+ </li>
3181
+
3182
+ <li class="missed" data-hits="0" data-linenumber="49">
3183
+
3184
+
3185
+ <code class="ruby"> self.get_zipped_array(known_path, entered_path).each do |kp, ep|</code>
3186
+ </li>
3187
+
3188
+ <li class="missed" data-hits="0" data-linenumber="50">
3189
+
3190
+
3191
+ <code class="ruby"> if kp.nil? || ep.nil?</code>
3192
+ </li>
3193
+
3194
+ <li class="missed" data-hits="0" data-linenumber="51">
3195
+
3196
+
3197
+ <code class="ruby"> raise Exception.new(&quot;Cannot extract params for routes that don't match&quot;)</code>
3198
+ </li>
3199
+
3200
+ <li class="never" data-hits="" data-linenumber="52">
3201
+
3202
+
3203
+ <code class="ruby"> end</code>
3204
+ </li>
3205
+
3206
+ <li class="missed" data-hits="0" data-linenumber="53">
3207
+
3208
+
3209
+ <code class="ruby"> if kp.start_with?(&quot;:&quot;)</code>
3210
+ </li>
3211
+
3212
+ <li class="missed" data-hits="0" data-linenumber="54">
3213
+
3214
+
3215
+ <code class="ruby"> if params[kp[1..-1]]</code>
3216
+ </li>
3217
+
3218
+ <li class="missed" data-hits="0" data-linenumber="55">
3219
+
3220
+
3221
+ <code class="ruby"> raise Exception.new(&quot;Cannot define a route containing two parameters with the same name&quot;)</code>
3222
+ </li>
3223
+
3224
+ <li class="never" data-hits="" data-linenumber="56">
3225
+
3226
+
3227
+ <code class="ruby"> else</code>
3228
+ </li>
3229
+
3230
+ <li class="missed" data-hits="0" data-linenumber="57">
3231
+
3232
+
3233
+ <code class="ruby"> params[kp[1..-1]] = ep</code>
3234
+ </li>
3235
+
3236
+ <li class="never" data-hits="" data-linenumber="58">
3237
+
3238
+
3239
+ <code class="ruby"> end</code>
3240
+ </li>
3241
+
3242
+ <li class="never" data-hits="" data-linenumber="59">
3243
+
3244
+
3245
+ <code class="ruby"> end</code>
3246
+ </li>
3247
+
3248
+ <li class="never" data-hits="" data-linenumber="60">
3249
+
3250
+
3251
+ <code class="ruby"> end</code>
3252
+ </li>
3253
+
3254
+ <li class="missed" data-hits="0" data-linenumber="61">
3255
+
3256
+
3257
+ <code class="ruby"> return params</code>
3258
+ </li>
3259
+
3260
+ <li class="never" data-hits="" data-linenumber="62">
3261
+
3262
+
3263
+ <code class="ruby"> end</code>
3264
+ </li>
3265
+
3266
+ <li class="never" data-hits="" data-linenumber="63">
3267
+
3268
+
3269
+ <code class="ruby"> </code>
3270
+ </li>
3271
+
3272
+ <li class="covered" data-hits="1" data-linenumber="64">
3273
+ <span class="hits">1</span>
3274
+
3275
+ <code class="ruby"> def self.diff(a,b)</code>
3276
+ </li>
3277
+
3278
+ <li class="missed" data-hits="0" data-linenumber="65">
3279
+
3280
+
3281
+ <code class="ruby"> a, b = self.as_sorted_json(a), self.as_sorted_json(b)</code>
3282
+ </li>
3283
+
3284
+ <li class="missed" data-hits="0" data-linenumber="66">
3285
+
3286
+
3287
+ <code class="ruby"> diff = []</code>
3288
+ </li>
3289
+
3290
+ <li class="missed" data-hits="0" data-linenumber="67">
3291
+
3292
+
3293
+ <code class="ruby"> a.each_index do |i|</code>
3294
+ </li>
3295
+
3296
+ <li class="missed" data-hits="0" data-linenumber="68">
3297
+
3298
+
3299
+ <code class="ruby"> unless a[i] == b[i]</code>
3300
+ </li>
3301
+
3302
+ <li class="missed" data-hits="0" data-linenumber="69">
3303
+
3304
+
3305
+ <code class="ruby"> diff &lt;&lt; {:expected =&gt; a[i], :got =&gt; b[i]}</code>
3306
+ </li>
3307
+
3308
+ <li class="never" data-hits="" data-linenumber="70">
3309
+
3310
+
3311
+ <code class="ruby"> end</code>
3312
+ </li>
3313
+
3314
+ <li class="never" data-hits="" data-linenumber="71">
3315
+
3316
+
3317
+ <code class="ruby"> end</code>
3318
+ </li>
3319
+
3320
+ <li class="missed" data-hits="0" data-linenumber="72">
3321
+
3322
+
3323
+ <code class="ruby"> diff</code>
3324
+ </li>
3325
+
3326
+ <li class="never" data-hits="" data-linenumber="73">
3327
+
3328
+
3329
+ <code class="ruby"> end</code>
3330
+ </li>
3331
+
3332
+ <li class="never" data-hits="" data-linenumber="74">
3333
+
3334
+
3335
+ <code class="ruby"> </code>
3336
+ </li>
3337
+
3338
+ <li class="never" data-hits="" data-linenumber="75">
3339
+
3340
+
3341
+ <code class="ruby"> </code>
3342
+ </li>
3343
+
3344
+ <li class="covered" data-hits="1" data-linenumber="76">
3345
+ <span class="hits">1</span>
3346
+
3347
+ <code class="ruby"> private</code>
3348
+ </li>
3349
+
3350
+ <li class="never" data-hits="" data-linenumber="77">
3351
+
3352
+
3353
+ <code class="ruby"> </code>
3354
+ </li>
3355
+
3356
+ <li class="covered" data-hits="1" data-linenumber="78">
3357
+ <span class="hits">1</span>
3358
+
3359
+ <code class="ruby"> def self.stringify_keys(hash)</code>
3360
+ </li>
3361
+
3362
+ <li class="covered" data-hits="8" data-linenumber="79">
3363
+ <span class="hits">8</span>
3364
+
3365
+ <code class="ruby"> new_hash = hash.class.new</code>
3366
+ </li>
3367
+
3368
+ <li class="covered" data-hits="8" data-linenumber="80">
3369
+ <span class="hits">8</span>
3370
+
3371
+ <code class="ruby"> hash.each_pair do |k,v|</code>
3372
+ </li>
3373
+
3374
+ <li class="covered" data-hits="36" data-linenumber="81">
3375
+ <span class="hits">36</span>
3376
+
3377
+ <code class="ruby"> new_hash[k.to_s] = case v</code>
3378
+ </li>
3379
+
3380
+ <li class="never" data-hits="" data-linenumber="82">
3381
+
3382
+
3383
+ <code class="ruby"> when Hash</code>
3384
+ </li>
3385
+
3386
+ <li class="covered" data-hits="1" data-linenumber="83">
3387
+ <span class="hits">1</span>
3388
+
3389
+ <code class="ruby"> self.stringify_keys(v)</code>
3390
+ </li>
3391
+
3392
+ <li class="never" data-hits="" data-linenumber="84">
3393
+
3394
+
3395
+ <code class="ruby"> when Array</code>
3396
+ </li>
3397
+
3398
+ <li class="covered" data-hits="4" data-linenumber="85">
3399
+ <span class="hits">4</span>
3400
+
3401
+ <code class="ruby"> self.stringify_array_keys(v)</code>
3402
+ </li>
3403
+
3404
+ <li class="never" data-hits="" data-linenumber="86">
3405
+
3406
+
3407
+ <code class="ruby"> else</code>
3408
+ </li>
3409
+
3410
+ <li class="covered" data-hits="31" data-linenumber="87">
3411
+ <span class="hits">31</span>
3412
+
3413
+ <code class="ruby"> v </code>
3414
+ </li>
3415
+
3416
+ <li class="never" data-hits="" data-linenumber="88">
3417
+
3418
+
3419
+ <code class="ruby"> end</code>
3420
+ </li>
3421
+
3422
+ <li class="never" data-hits="" data-linenumber="89">
3423
+
3424
+
3425
+ <code class="ruby"> end</code>
3426
+ </li>
3427
+
3428
+ <li class="covered" data-hits="8" data-linenumber="90">
3429
+ <span class="hits">8</span>
3430
+
3431
+ <code class="ruby"> new_hash</code>
3432
+ </li>
3433
+
3434
+ <li class="never" data-hits="" data-linenumber="91">
3435
+
3436
+
3437
+ <code class="ruby"> end</code>
3438
+ </li>
3439
+
3440
+ <li class="never" data-hits="" data-linenumber="92">
3441
+
3442
+
3443
+ <code class="ruby"> </code>
3444
+ </li>
3445
+
3446
+ <li class="never" data-hits="" data-linenumber="93">
3447
+
3448
+
3449
+ <code class="ruby"> # </code>
3450
+ </li>
3451
+
3452
+ <li class="covered" data-hits="1" data-linenumber="94">
3453
+ <span class="hits">1</span>
3454
+
3455
+ <code class="ruby"> def self.stringify_array_keys(array)</code>
3456
+ </li>
3457
+
3458
+ <li class="covered" data-hits="4" data-linenumber="95">
3459
+ <span class="hits">4</span>
3460
+
3461
+ <code class="ruby"> array.collect{|v|</code>
3462
+ </li>
3463
+
3464
+ <li class="covered" data-hits="8" data-linenumber="96">
3465
+ <span class="hits">8</span>
3466
+
3467
+ <code class="ruby"> case v</code>
3468
+ </li>
3469
+
3470
+ <li class="never" data-hits="" data-linenumber="97">
3471
+
3472
+
3473
+ <code class="ruby"> when Hash</code>
3474
+ </li>
3475
+
3476
+ <li class="missed" data-hits="0" data-linenumber="98">
3477
+
3478
+
3479
+ <code class="ruby"> self.stringify_keys(v)</code>
3480
+ </li>
3481
+
3482
+ <li class="never" data-hits="" data-linenumber="99">
3483
+
3484
+
3485
+ <code class="ruby"> when Array</code>
3486
+ </li>
3487
+
3488
+ <li class="missed" data-hits="0" data-linenumber="100">
3489
+
3490
+
3491
+ <code class="ruby"> self.stringify_array_keys(v)</code>
3492
+ </li>
3493
+
3494
+ <li class="never" data-hits="" data-linenumber="101">
3495
+
3496
+
3497
+ <code class="ruby"> else</code>
3498
+ </li>
3499
+
3500
+ <li class="covered" data-hits="8" data-linenumber="102">
3501
+ <span class="hits">8</span>
3502
+
3503
+ <code class="ruby"> v</code>
3504
+ </li>
3505
+
3506
+ <li class="never" data-hits="" data-linenumber="103">
3507
+
3508
+
3509
+ <code class="ruby"> end</code>
3510
+ </li>
3511
+
3512
+ <li class="never" data-hits="" data-linenumber="104">
3513
+
3514
+
3515
+ <code class="ruby"> }</code>
3516
+ </li>
3517
+
3518
+ <li class="never" data-hits="" data-linenumber="105">
3519
+
3520
+
3521
+ <code class="ruby"> end</code>
3522
+ </li>
3523
+
3524
+ <li class="never" data-hits="" data-linenumber="106">
3525
+
3526
+
3527
+ <code class="ruby"> </code>
3528
+ </li>
3529
+
3530
+ <li class="covered" data-hits="1" data-linenumber="107">
3531
+ <span class="hits">1</span>
3532
+
3533
+ <code class="ruby"> def self.get_zipped_array(known_path, entered_path)</code>
3534
+ </li>
3535
+
3536
+ <li class="never" data-hits="" data-linenumber="108">
3537
+
3538
+
3539
+ <code class="ruby"> # make these strings</code>
3540
+ </li>
3541
+
3542
+ <li class="covered" data-hits="2" data-linenumber="109">
3543
+ <span class="hits">2</span>
3544
+
3545
+ <code class="ruby"> known_path, entered_path = known_path.to_s, entered_path.to_s</code>
3546
+ </li>
3547
+
3548
+ <li class="never" data-hits="" data-linenumber="110">
3549
+
3550
+
3551
+ <code class="ruby"> # Remove the any beginning or trailing slashes from both paths if they exist</code>
3552
+ </li>
3553
+
3554
+ <li class="covered" data-hits="2" data-linenumber="111">
3555
+ <span class="hits">2</span>
3556
+
3557
+ <code class="ruby"> known_path = known_path[1..-1] if known_path.start_with?(&quot;/&quot;)</code>
3558
+ </li>
3559
+
3560
+ <li class="covered" data-hits="2" data-linenumber="112">
3561
+ <span class="hits">2</span>
3562
+
3563
+ <code class="ruby"> known_path = known_path[0..-2] if known_path.end_with?(&quot;/&quot;)</code>
3564
+ </li>
3565
+
3566
+ <li class="covered" data-hits="2" data-linenumber="113">
3567
+ <span class="hits">2</span>
3568
+
3569
+ <code class="ruby"> entered_path = entered_path[1..-1] if entered_path.start_with?(&quot;/&quot;)</code>
3570
+ </li>
3571
+
3572
+ <li class="covered" data-hits="2" data-linenumber="114">
3573
+ <span class="hits">2</span>
3574
+
3575
+ <code class="ruby"> entered_path = entered_path[0..-2] if entered_path.end_with?(&quot;/&quot;)</code>
3576
+ </li>
3577
+
3578
+ <li class="covered" data-hits="2" data-linenumber="115">
3579
+ <span class="hits">2</span>
3580
+
3581
+ <code class="ruby"> known_path = known_path.split(&quot;/&quot;)</code>
3582
+ </li>
3583
+
3584
+ <li class="covered" data-hits="2" data-linenumber="116">
3585
+ <span class="hits">2</span>
3586
+
3587
+ <code class="ruby"> entered_path = entered_path.split(&quot;/&quot;)</code>
3588
+ </li>
3589
+
3590
+ <li class="covered" data-hits="2" data-linenumber="117">
3591
+ <span class="hits">2</span>
3592
+
3593
+ <code class="ruby"> if known_path.length &lt; entered_path.length</code>
3594
+ </li>
3595
+
3596
+ <li class="missed" data-hits="0" data-linenumber="118">
3597
+
3598
+
3599
+ <code class="ruby"> (entered_path.length - known_path.length).times do</code>
3600
+ </li>
3601
+
3602
+ <li class="missed" data-hits="0" data-linenumber="119">
3603
+
3604
+
3605
+ <code class="ruby"> known_path &lt;&lt; nil</code>
3606
+ </li>
3607
+
3608
+ <li class="never" data-hits="" data-linenumber="120">
3609
+
3610
+
3611
+ <code class="ruby"> end</code>
3612
+ </li>
3613
+
3614
+ <li class="never" data-hits="" data-linenumber="121">
3615
+
3616
+
3617
+ <code class="ruby"> end</code>
3618
+ </li>
3619
+
3620
+ <li class="covered" data-hits="2" data-linenumber="122">
3621
+ <span class="hits">2</span>
3622
+
3623
+ <code class="ruby"> return known_path.zip(entered_path)</code>
3624
+ </li>
3625
+
3626
+ <li class="never" data-hits="" data-linenumber="123">
3627
+
3628
+
3629
+ <code class="ruby"> end</code>
3630
+ </li>
3631
+
3632
+ <li class="never" data-hits="" data-linenumber="124">
3633
+
3634
+
3635
+ <code class="ruby"> </code>
3636
+ </li>
3637
+
3638
+ <li class="never" data-hits="" data-linenumber="125">
3639
+
3640
+
3641
+ <code class="ruby">end</code>
3642
+ </li>
3643
+
3644
+ </ol>
3645
+ </pre>
3646
+ </div>
3647
+
3648
+ <div class="source_table" id="a53828a5413df9e3a1d0192504eac81ee4166020">
3649
+ <div class="header">
3650
+ <h3>lib/variable_array.rb</h3>
3651
+ <h4><span class="green">90.91 %</span> covered</h4>
3652
+ <div>
3653
+ <b>11</b> relevant lines.
3654
+ <span class="green"><b>10</b> lines covered</span> and
3655
+ <span class="red"><b>1</b> lines missed.</span>
3656
+ </div>
3657
+ </div>
3658
+
3659
+ <pre>
3660
+ <ol>
3661
+
3662
+ <li class="covered" data-hits="1" data-linenumber="1">
3663
+ <span class="hits">1</span>
3664
+
3665
+ <code class="ruby">class VariableArray &lt; Array</code>
3666
+ </li>
3667
+
3668
+ <li class="covered" data-hits="1" data-linenumber="2">
3669
+ <span class="hits">1</span>
3670
+
3671
+ <code class="ruby"> def ==(other)</code>
3672
+ </li>
3673
+
3674
+ <li class="covered" data-hits="7" data-linenumber="3">
3675
+ <span class="hits">7</span>
3676
+
3677
+ <code class="ruby"> if other.is_a?(Array)</code>
3678
+ </li>
3679
+
3680
+ <li class="covered" data-hits="7" data-linenumber="4">
3681
+ <span class="hits">7</span>
3682
+
3683
+ <code class="ruby"> comp = self[1..(self.length - 1)]</code>
3684
+ </li>
3685
+
3686
+ <li class="covered" data-hits="7" data-linenumber="5">
3687
+ <span class="hits">7</span>
3688
+
3689
+ <code class="ruby"> return comp.first == other.first</code>
3690
+ </li>
3691
+
3692
+ <li class="never" data-hits="" data-linenumber="6">
3693
+
3694
+
3695
+ <code class="ruby"> else</code>
3696
+ </li>
3697
+
3698
+ <li class="missed" data-hits="0" data-linenumber="7">
3699
+
3700
+
3701
+ <code class="ruby"> super</code>
3702
+ </li>
3703
+
3704
+ <li class="never" data-hits="" data-linenumber="8">
3705
+
3706
+
3707
+ <code class="ruby"> end</code>
3708
+ </li>
3709
+
3710
+ <li class="never" data-hits="" data-linenumber="9">
3711
+
3712
+
3713
+ <code class="ruby"> end</code>
3714
+ </li>
3715
+
3716
+ <li class="covered" data-hits="1" data-linenumber="10">
3717
+ <span class="hits">1</span>
3718
+
3719
+ <code class="ruby"> def collect(&amp;block)</code>
3720
+ </li>
3721
+
3722
+ <li class="covered" data-hits="3" data-linenumber="11">
3723
+ <span class="hits">3</span>
3724
+
3725
+ <code class="ruby"> self.class.new.tap do |ret|</code>
3726
+ </li>
3727
+
3728
+ <li class="covered" data-hits="3" data-linenumber="12">
3729
+ <span class="hits">3</span>
3730
+
3731
+ <code class="ruby"> self.each_with_index do |el, i|</code>
3732
+ </li>
3733
+
3734
+ <li class="covered" data-hits="6" data-linenumber="13">
3735
+ <span class="hits">6</span>
3736
+
3737
+ <code class="ruby"> ret[i] = block.call(el)</code>
3738
+ </li>
3739
+
3740
+ <li class="never" data-hits="" data-linenumber="14">
3741
+
3742
+
3743
+ <code class="ruby"> end</code>
3744
+ </li>
3745
+
3746
+ <li class="never" data-hits="" data-linenumber="15">
3747
+
3748
+
3749
+ <code class="ruby"> end</code>
3750
+ </li>
3751
+
3752
+ <li class="never" data-hits="" data-linenumber="16">
3753
+
3754
+
3755
+ <code class="ruby"> end</code>
3756
+ </li>
3757
+
3758
+ <li class="covered" data-hits="1" data-linenumber="17">
3759
+ <span class="hits">1</span>
3760
+
3761
+ <code class="ruby"> alias_method :eql?, :==</code>
3762
+ </li>
3763
+
3764
+ <li class="never" data-hits="" data-linenumber="18">
3765
+
3766
+
3767
+ <code class="ruby">end</code>
3768
+ </li>
3769
+
3770
+ </ol>
3771
+ </pre>
3772
+ </div>
3773
+
3774
+ </div>
3775
+ </div>
3776
+ </body>
3777
+ </html>