regexp-examples 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +0 -1
  3. data/Gemfile +3 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +9 -3
  6. data/Rakefile +7 -2
  7. data/coverage/.last_run.json +5 -0
  8. data/coverage/.resultset.json +667 -0
  9. data/coverage/.resultset.json.lock +0 -0
  10. data/coverage/assets/0.8.0/application.css +799 -0
  11. data/coverage/assets/0.8.0/application.js +1559 -0
  12. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  13. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  14. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  15. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  16. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  17. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  18. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  19. data/coverage/assets/0.8.0/loading.gif +0 -0
  20. data/coverage/assets/0.8.0/magnify.png +0 -0
  21. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  22. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  23. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  24. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  25. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  26. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  27. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  28. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  29. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  30. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  31. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  32. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  33. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  34. data/coverage/coverage-badge.png +0 -0
  35. data/coverage/index.html +4176 -0
  36. data/lib/regexp-examples/constants.rb +7 -2
  37. data/lib/regexp-examples/groups.rb +0 -3
  38. data/lib/regexp-examples/helpers.rb +0 -13
  39. data/lib/regexp-examples/version.rb +1 -1
  40. data/spec/regexp-examples_spec.rb +6 -1
  41. data/spec/spec_helper.rb +12 -61
  42. metadata +39 -11
Binary file
Binary file
Binary file
@@ -0,0 +1,4176 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Regexp-examples</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.8.0/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.8.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.8.0/favicon_green.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.8.0/favicon.png" />
10
+ </head>
11
+
12
+ <body>
13
+ <div id="loading">
14
+ <img src="./assets/0.8.0/loading.gif" alt="loading"/>
15
+ </div>
16
+ <div id="wrapper" style="display:none;">
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2015-01-14T17:27:23+00:00">2015-01-14T17:27:23+00:00</abbr></div>
18
+ <ul class="group_tabs"></ul>
19
+
20
+ <div id="content">
21
+ <div class="file_list_container" id="AllFiles">
22
+ <h2>
23
+ <span class="group_name">All Files</span>
24
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
25
+ covered at
26
+ <span class="covered_strength">
27
+ <span class="green">
28
+ 50.45
29
+ </span>
30
+ </span> hits/line)
31
+ </h2>
32
+ <a name="AllFiles"></a>
33
+ <div>
34
+ <b>9</b> files in total.
35
+ <b>297</b> relevant lines.
36
+ <span class="green"><b>297</b> lines covered</span> and
37
+ <span class="red"><b>0</b> lines missed </span>
38
+ </div>
39
+ <table class="file_list">
40
+ <thead>
41
+ <tr>
42
+ <th>File</th>
43
+ <th>% covered</th>
44
+ <th>Lines</th>
45
+ <th>Relevant Lines</th>
46
+ <th>Lines covered</th>
47
+ <th>Lines missed</th>
48
+ <th>Avg. Hits / Line</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+
53
+ <tr>
54
+ <td class="strong"><a href="#2803e22e3c56b48da477c2353232f0bc6e406a58" class="src_link" title="lib/regexp-examples.rb">lib/regexp-examples.rb</a></td>
55
+ <td class="green strong">100.0 %</td>
56
+ <td>2</td>
57
+ <td>1</td>
58
+ <td>1</td>
59
+ <td>0</td>
60
+ <td>9.0</td>
61
+ </tr>
62
+
63
+ <tr>
64
+ <td class="strong"><a href="#29a2a933bc8a3e2979023518566420381fb495fb" class="src_link" title="lib/regexp-examples/backreferences.rb">lib/regexp-examples/backreferences.rb</a></td>
65
+ <td class="green strong">100.0 %</td>
66
+ <td>52</td>
67
+ <td>28</td>
68
+ <td>28</td>
69
+ <td>0</td>
70
+ <td>65.3</td>
71
+ </tr>
72
+
73
+ <tr>
74
+ <td class="strong"><a href="#e85042a89399d7715f4d8400e118fda97215b72c" class="src_link" title="lib/regexp-examples/constants.rb">lib/regexp-examples/constants.rb</a></td>
75
+ <td class="green strong">100.0 %</td>
76
+ <td>42</td>
77
+ <td>12</td>
78
+ <td>12</td>
79
+ <td>0</td>
80
+ <td>6.8</td>
81
+ </tr>
82
+
83
+ <tr>
84
+ <td class="strong"><a href="#00d77fb2e4e21451442e29891ddf88bd05f0fbd7" class="src_link" title="lib/regexp-examples/groups.rb">lib/regexp-examples/groups.rb</a></td>
85
+ <td class="green strong">100.0 %</td>
86
+ <td>119</td>
87
+ <td>65</td>
88
+ <td>65</td>
89
+ <td>0</td>
90
+ <td>30.2</td>
91
+ </tr>
92
+
93
+ <tr>
94
+ <td class="strong"><a href="#dad3c4bb6458db3261442a9292e1345b41afd730" class="src_link" title="lib/regexp-examples/helpers.rb">lib/regexp-examples/helpers.rb</a></td>
95
+ <td class="green strong">100.0 %</td>
96
+ <td>36</td>
97
+ <td>15</td>
98
+ <td>15</td>
99
+ <td>0</td>
100
+ <td>144.5</td>
101
+ </tr>
102
+
103
+ <tr>
104
+ <td class="strong"><a href="#e013406b8d61f5ad15d0a3ad7ea7e8e96b6d7254" class="src_link" title="lib/regexp-examples/parser.rb">lib/regexp-examples/parser.rb</a></td>
105
+ <td class="green strong">100.0 %</td>
106
+ <td>184</td>
107
+ <td>102</td>
108
+ <td>102</td>
109
+ <td>0</td>
110
+ <td>54.6</td>
111
+ </tr>
112
+
113
+ <tr>
114
+ <td class="strong"><a href="#0dc204f32cb2876d2238a2aae7dea86ad7f9e679" class="src_link" title="lib/regexp-examples/regexp_extensions.rb">lib/regexp-examples/regexp_extensions.rb</a></td>
115
+ <td class="green strong">100.0 %</td>
116
+ <td>16</td>
117
+ <td>9</td>
118
+ <td>9</td>
119
+ <td>0</td>
120
+ <td>37.1</td>
121
+ </tr>
122
+
123
+ <tr>
124
+ <td class="strong"><a href="#430477f0c86b2d77a18fe51e32b818d48ab7e74b" class="src_link" title="lib/regexp-examples/repeaters.rb">lib/regexp-examples/repeaters.rb</a></td>
125
+ <td class="green strong">100.0 %</td>
126
+ <td>78</td>
127
+ <td>43</td>
128
+ <td>43</td>
129
+ <td>0</td>
130
+ <td>61.5</td>
131
+ </tr>
132
+
133
+ <tr>
134
+ <td class="strong"><a href="#73ece59f571550448cda013ec330081f40e82321" class="src_link" title="spec/regexp-examples_spec.rb">spec/regexp-examples_spec.rb</a></td>
135
+ <td class="green strong">100.0 %</td>
136
+ <td>113</td>
137
+ <td>22</td>
138
+ <td>22</td>
139
+ <td>0</td>
140
+ <td>17.6</td>
141
+ </tr>
142
+
143
+ </tbody>
144
+ </table>
145
+ </div>
146
+
147
+
148
+
149
+ </div>
150
+
151
+ <div id="footer">
152
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.9.1
153
+ and simplecov-html v0.8.0<br/>
154
+ using RSpec
155
+ </div>
156
+
157
+ <div class="source_files">
158
+
159
+ <div class="source_table" id="2803e22e3c56b48da477c2353232f0bc6e406a58">
160
+ <div class="header">
161
+ <h3>lib/regexp-examples.rb</h3>
162
+ <h4><span class="green">100.0 %</span> covered</h4>
163
+ <div>
164
+ <b>1</b> relevant lines.
165
+ <span class="green"><b>1</b> lines covered</span> and
166
+ <span class="red"><b>0</b> lines missed.</span>
167
+ </div>
168
+ </div>
169
+
170
+ <pre>
171
+ <ol>
172
+
173
+ <li class="covered" data-hits="9" data-linenumber="1">
174
+ <span class="hits">9</span>
175
+
176
+ <code class="ruby">Dir[File.dirname(__FILE__) + &#39;/regexp-examples/*.rb&#39;].each {|file| require file }</code>
177
+ </li>
178
+
179
+ <li class="never" data-hits="" data-linenumber="2">
180
+
181
+
182
+ <code class="ruby"></code>
183
+ </li>
184
+
185
+ </ol>
186
+ </pre>
187
+ </div>
188
+
189
+ <div class="source_table" id="29a2a933bc8a3e2979023518566420381fb495fb">
190
+ <div class="header">
191
+ <h3>lib/regexp-examples/backreferences.rb</h3>
192
+ <h4><span class="green">100.0 %</span> covered</h4>
193
+ <div>
194
+ <b>28</b> relevant lines.
195
+ <span class="green"><b>28</b> lines covered</span> and
196
+ <span class="red"><b>0</b> lines missed.</span>
197
+ </div>
198
+ </div>
199
+
200
+ <pre>
201
+ <ol>
202
+
203
+ <li class="covered" data-hits="1" data-linenumber="1">
204
+ <span class="hits">1</span>
205
+
206
+ <code class="ruby">module RegexpExamples</code>
207
+ </li>
208
+
209
+ <li class="covered" data-hits="1" data-linenumber="2">
210
+ <span class="hits">1</span>
211
+
212
+ <code class="ruby"> class CaptureGroupResult &lt; String</code>
213
+ </li>
214
+
215
+ <li class="covered" data-hits="1" data-linenumber="3">
216
+ <span class="hits">1</span>
217
+
218
+ <code class="ruby"> attr_reader :group_id, :subgroups</code>
219
+ </li>
220
+
221
+ <li class="covered" data-hits="1" data-linenumber="4">
222
+ <span class="hits">1</span>
223
+
224
+ <code class="ruby"> def initialize(group_id, subgroups, values)</code>
225
+ </li>
226
+
227
+ <li class="covered" data-hits="248" data-linenumber="5">
228
+ <span class="hits">248</span>
229
+
230
+ <code class="ruby"> @group_id = group_id</code>
231
+ </li>
232
+
233
+ <li class="covered" data-hits="248" data-linenumber="6">
234
+ <span class="hits">248</span>
235
+
236
+ <code class="ruby"> @subgroups = subgroups</code>
237
+ </li>
238
+
239
+ <li class="covered" data-hits="248" data-linenumber="7">
240
+ <span class="hits">248</span>
241
+
242
+ <code class="ruby"> super(values)</code>
243
+ </li>
244
+
245
+ <li class="never" data-hits="" data-linenumber="8">
246
+
247
+
248
+ <code class="ruby"> end</code>
249
+ </li>
250
+
251
+ <li class="never" data-hits="" data-linenumber="9">
252
+
253
+
254
+ <code class="ruby"></code>
255
+ </li>
256
+
257
+ <li class="covered" data-hits="1" data-linenumber="10">
258
+ <span class="hits">1</span>
259
+
260
+ <code class="ruby"> def all_subgroups</code>
261
+ </li>
262
+
263
+ <li class="covered" data-hits="168" data-linenumber="11">
264
+ <span class="hits">168</span>
265
+
266
+ <code class="ruby"> [self, subgroups].flatten</code>
267
+ </li>
268
+
269
+ <li class="never" data-hits="" data-linenumber="12">
270
+
271
+
272
+ <code class="ruby"> end</code>
273
+ </li>
274
+
275
+ <li class="never" data-hits="" data-linenumber="13">
276
+
277
+
278
+ <code class="ruby"></code>
279
+ </li>
280
+
281
+ <li class="never" data-hits="" data-linenumber="14">
282
+
283
+
284
+ <code class="ruby"> # Overridden in order to preserve the @group_id and @subgroups</code>
285
+ </li>
286
+
287
+ <li class="covered" data-hits="1" data-linenumber="15">
288
+ <span class="hits">1</span>
289
+
290
+ <code class="ruby"> def *(int)</code>
291
+ </li>
292
+
293
+ <li class="covered" data-hits="79" data-linenumber="16">
294
+ <span class="hits">79</span>
295
+
296
+ <code class="ruby"> self.class.new(group_id, subgroups, super)</code>
297
+ </li>
298
+
299
+ <li class="never" data-hits="" data-linenumber="17">
300
+
301
+
302
+ <code class="ruby"> end</code>
303
+ </li>
304
+
305
+ <li class="never" data-hits="" data-linenumber="18">
306
+
307
+
308
+ <code class="ruby"> # Overridden in order to preserve the @group_id and @subgroups</code>
309
+ </li>
310
+
311
+ <li class="covered" data-hits="1" data-linenumber="19">
312
+ <span class="hits">1</span>
313
+
314
+ <code class="ruby"> def gsub(regex)</code>
315
+ </li>
316
+
317
+ <li class="covered" data-hits="28" data-linenumber="20">
318
+ <span class="hits">28</span>
319
+
320
+ <code class="ruby"> self.class.new(group_id, subgroups, super)</code>
321
+ </li>
322
+
323
+ <li class="never" data-hits="" data-linenumber="21">
324
+
325
+
326
+ <code class="ruby"> end</code>
327
+ </li>
328
+
329
+ <li class="never" data-hits="" data-linenumber="22">
330
+
331
+
332
+ <code class="ruby"> end</code>
333
+ </li>
334
+
335
+ <li class="never" data-hits="" data-linenumber="23">
336
+
337
+
338
+ <code class="ruby"></code>
339
+ </li>
340
+
341
+ <li class="covered" data-hits="1" data-linenumber="24">
342
+ <span class="hits">1</span>
343
+
344
+ <code class="ruby"> class BackReferenceReplacer</code>
345
+ </li>
346
+
347
+ <li class="covered" data-hits="1" data-linenumber="25">
348
+ <span class="hits">1</span>
349
+
350
+ <code class="ruby"> def substitute_backreferences(full_examples)</code>
351
+ </li>
352
+
353
+ <li class="covered" data-hits="54" data-linenumber="26">
354
+ <span class="hits">54</span>
355
+
356
+ <code class="ruby"> full_examples.map! do |full_example|</code>
357
+ </li>
358
+
359
+ <li class="covered" data-hits="148" data-linenumber="27">
360
+ <span class="hits">148</span>
361
+
362
+ <code class="ruby"> if full_example.is_a? String</code>
363
+ </li>
364
+
365
+ <li class="covered" data-hits="130" data-linenumber="28">
366
+ <span class="hits">130</span>
367
+
368
+ <code class="ruby"> [full_example]</code>
369
+ </li>
370
+
371
+ <li class="never" data-hits="" data-linenumber="29">
372
+
373
+
374
+ <code class="ruby"> else</code>
375
+ </li>
376
+
377
+ <li class="covered" data-hits="18" data-linenumber="30">
378
+ <span class="hits">18</span>
379
+
380
+ <code class="ruby"> full_example.map! do |partial_example|</code>
381
+ </li>
382
+
383
+ <li class="covered" data-hits="112" data-linenumber="31">
384
+ <span class="hits">112</span>
385
+
386
+ <code class="ruby"> partial_example.gsub(/__(\w+)__/) do |match|</code>
387
+ </li>
388
+
389
+ <li class="covered" data-hits="28" data-linenumber="32">
390
+ <span class="hits">28</span>
391
+
392
+ <code class="ruby"> find_backref_for(full_example, $1)</code>
393
+ </li>
394
+
395
+ <li class="never" data-hits="" data-linenumber="33">
396
+
397
+
398
+ <code class="ruby"> end</code>
399
+ </li>
400
+
401
+ <li class="never" data-hits="" data-linenumber="34">
402
+
403
+
404
+ <code class="ruby"> end</code>
405
+ </li>
406
+
407
+ <li class="never" data-hits="" data-linenumber="35">
408
+
409
+
410
+ <code class="ruby"> end</code>
411
+ </li>
412
+
413
+ <li class="never" data-hits="" data-linenumber="36">
414
+
415
+
416
+ <code class="ruby"> end</code>
417
+ </li>
418
+
419
+ <li class="covered" data-hits="54" data-linenumber="37">
420
+ <span class="hits">54</span>
421
+
422
+ <code class="ruby"> full_examples</code>
423
+ </li>
424
+
425
+ <li class="never" data-hits="" data-linenumber="38">
426
+
427
+
428
+ <code class="ruby"> end</code>
429
+ </li>
430
+
431
+ <li class="never" data-hits="" data-linenumber="39">
432
+
433
+
434
+ <code class="ruby"></code>
435
+ </li>
436
+
437
+ <li class="covered" data-hits="1" data-linenumber="40">
438
+ <span class="hits">1</span>
439
+
440
+ <code class="ruby"> private</code>
441
+ </li>
442
+
443
+ <li class="covered" data-hits="1" data-linenumber="41">
444
+ <span class="hits">1</span>
445
+
446
+ <code class="ruby"> def find_backref_for(full_example, group_id)</code>
447
+ </li>
448
+
449
+ <li class="covered" data-hits="28" data-linenumber="42">
450
+ <span class="hits">28</span>
451
+
452
+ <code class="ruby"> full_example.each do |partial_example|</code>
453
+ </li>
454
+
455
+ <li class="covered" data-hits="75" data-linenumber="43">
456
+ <span class="hits">75</span>
457
+
458
+ <code class="ruby"> next unless partial_example.respond_to?(:group_id)</code>
459
+ </li>
460
+
461
+ <li class="covered" data-hits="74" data-linenumber="44">
462
+ <span class="hits">74</span>
463
+
464
+ <code class="ruby"> partial_example.all_subgroups.each do |subgroup|</code>
465
+ </li>
466
+
467
+ <li class="covered" data-hits="77" data-linenumber="45">
468
+ <span class="hits">77</span>
469
+
470
+ <code class="ruby"> return subgroup if subgroup.group_id == group_id</code>
471
+ </li>
472
+
473
+ <li class="never" data-hits="" data-linenumber="46">
474
+
475
+
476
+ <code class="ruby"> end</code>
477
+ </li>
478
+
479
+ <li class="never" data-hits="" data-linenumber="47">
480
+
481
+
482
+ <code class="ruby"> end</code>
483
+ </li>
484
+
485
+ <li class="never" data-hits="" data-linenumber="48">
486
+
487
+
488
+ <code class="ruby"> end</code>
489
+ </li>
490
+
491
+ <li class="never" data-hits="" data-linenumber="49">
492
+
493
+
494
+ <code class="ruby"></code>
495
+ </li>
496
+
497
+ <li class="never" data-hits="" data-linenumber="50">
498
+
499
+
500
+ <code class="ruby"> end</code>
501
+ </li>
502
+
503
+ <li class="never" data-hits="" data-linenumber="51">
504
+
505
+
506
+ <code class="ruby"></code>
507
+ </li>
508
+
509
+ <li class="never" data-hits="" data-linenumber="52">
510
+
511
+
512
+ <code class="ruby">end</code>
513
+ </li>
514
+
515
+ </ol>
516
+ </pre>
517
+ </div>
518
+
519
+ <div class="source_table" id="e85042a89399d7715f4d8400e118fda97215b72c">
520
+ <div class="header">
521
+ <h3>lib/regexp-examples/constants.rb</h3>
522
+ <h4><span class="green">100.0 %</span> covered</h4>
523
+ <div>
524
+ <b>12</b> relevant lines.
525
+ <span class="green"><b>12</b> lines covered</span> and
526
+ <span class="red"><b>0</b> lines missed.</span>
527
+ </div>
528
+ </div>
529
+
530
+ <pre>
531
+ <ol>
532
+
533
+ <li class="covered" data-hits="1" data-linenumber="1">
534
+ <span class="hits">1</span>
535
+
536
+ <code class="ruby">module RegexpExamples</code>
537
+ </li>
538
+
539
+ <li class="never" data-hits="" data-linenumber="2">
540
+
541
+
542
+ <code class="ruby"> # Number of times to repeat for Star and Plus repeaters</code>
543
+ </li>
544
+
545
+ <li class="covered" data-hits="1" data-linenumber="3">
546
+ <span class="hits">1</span>
547
+
548
+ <code class="ruby"> TIMES = 2</code>
549
+ </li>
550
+
551
+ <li class="never" data-hits="" data-linenumber="4">
552
+
553
+
554
+ <code class="ruby"></code>
555
+ </li>
556
+
557
+ <li class="never" data-hits="" data-linenumber="5">
558
+
559
+
560
+ <code class="ruby"> # Maximum number of characters returned from a char set, to reduce output spam</code>
561
+ </li>
562
+
563
+ <li class="never" data-hits="" data-linenumber="6">
564
+
565
+
566
+ <code class="ruby"> # For example:</code>
567
+ </li>
568
+
569
+ <li class="never" data-hits="" data-linenumber="7">
570
+
571
+
572
+ <code class="ruby"> # If MaxGroupResults = 5, then</code>
573
+ </li>
574
+
575
+ <li class="never" data-hits="" data-linenumber="8">
576
+
577
+
578
+ <code class="ruby"> # \d = [0, 1, 2, 3, 4]</code>
579
+ </li>
580
+
581
+ <li class="covered" data-hits="1" data-linenumber="9">
582
+ <span class="hits">1</span>
583
+
584
+ <code class="ruby"> MaxGroupResults = 5</code>
585
+ </li>
586
+
587
+ <li class="never" data-hits="" data-linenumber="10">
588
+
589
+
590
+ <code class="ruby"></code>
591
+ </li>
592
+
593
+ <li class="covered" data-hits="1" data-linenumber="11">
594
+ <span class="hits">1</span>
595
+
596
+ <code class="ruby"> module CharSets</code>
597
+ </li>
598
+
599
+ <li class="covered" data-hits="1" data-linenumber="12">
600
+ <span class="hits">1</span>
601
+
602
+ <code class="ruby"> Lower = Array(&#39;a&#39;..&#39;z&#39;)</code>
603
+ </li>
604
+
605
+ <li class="covered" data-hits="1" data-linenumber="13">
606
+ <span class="hits">1</span>
607
+
608
+ <code class="ruby"> Upper = Array(&#39;A&#39;..&#39;Z&#39;)</code>
609
+ </li>
610
+
611
+ <li class="covered" data-hits="1" data-linenumber="14">
612
+ <span class="hits">1</span>
613
+
614
+ <code class="ruby"> Digit = Array(&#39;0&#39;..&#39;9&#39;)</code>
615
+ </li>
616
+
617
+ <li class="never" data-hits="" data-linenumber="15">
618
+
619
+
620
+ <code class="ruby"> # 45.chr = &quot;-&quot;. Need to make sure this is at the START of the array, or things break</code>
621
+ </li>
622
+
623
+ <li class="never" data-hits="" data-linenumber="16">
624
+
625
+
626
+ <code class="ruby"> # This is because of the /[a-z]/ regex syntax, and how it&#39;s being parsed</code>
627
+ </li>
628
+
629
+ <li class="covered" data-hits="39" data-linenumber="17">
630
+ <span class="hits">39</span>
631
+
632
+ <code class="ruby"> Punct = [45..45, 33..44, 46..47, 58..64, 91..96, 123..126].map { |r| r.map { |val| val.chr } }.flatten</code>
633
+ </li>
634
+
635
+ <li class="covered" data-hits="1" data-linenumber="18">
636
+ <span class="hits">1</span>
637
+
638
+ <code class="ruby"> Hex = Array(&#39;a&#39;..&#39;f&#39;) | Array(&#39;A&#39;..&#39;F&#39;) | Digit</code>
639
+ </li>
640
+
641
+ <li class="covered" data-hits="1" data-linenumber="19">
642
+ <span class="hits">1</span>
643
+
644
+ <code class="ruby"> Any = Lower | Upper | Digit | Punct</code>
645
+ </li>
646
+
647
+ <li class="never" data-hits="" data-linenumber="20">
648
+
649
+
650
+ <code class="ruby"> end</code>
651
+ </li>
652
+
653
+ <li class="never" data-hits="" data-linenumber="21">
654
+
655
+
656
+ <code class="ruby"></code>
657
+ </li>
658
+
659
+ <li class="never" data-hits="" data-linenumber="22">
660
+
661
+
662
+ <code class="ruby"> # Map of special regex characters, to their associated character sets</code>
663
+ </li>
664
+
665
+ <li class="covered" data-hits="1" data-linenumber="23">
666
+ <span class="hits">1</span>
667
+
668
+ <code class="ruby"> BackslashCharMap = {</code>
669
+ </li>
670
+
671
+ <li class="never" data-hits="" data-linenumber="24">
672
+
673
+
674
+ <code class="ruby"> &#39;d&#39; =&gt; CharSets::Digit,</code>
675
+ </li>
676
+
677
+ <li class="never" data-hits="" data-linenumber="25">
678
+
679
+
680
+ <code class="ruby"> &#39;D&#39; =&gt; CharSets::Lower | CharSets::Upper | CharSets::Punct,</code>
681
+ </li>
682
+
683
+ <li class="never" data-hits="" data-linenumber="26">
684
+
685
+
686
+ <code class="ruby"> &#39;w&#39; =&gt; CharSets::Lower | CharSets::Upper | CharSets::Digit | [&#39;_&#39;],</code>
687
+ </li>
688
+
689
+ <li class="covered" data-hits="32" data-linenumber="27">
690
+ <span class="hits">32</span>
691
+
692
+ <code class="ruby"> &#39;W&#39; =&gt; CharSets::Punct.reject { |val| val == &#39;_&#39; },</code>
693
+ </li>
694
+
695
+ <li class="never" data-hits="" data-linenumber="28">
696
+
697
+
698
+ <code class="ruby"> &#39;s&#39; =&gt; [&#39; &#39;, &quot;\t&quot;, &quot;\n&quot;, &quot;\r&quot;, &quot;\v&quot;, &quot;\f&quot;],</code>
699
+ </li>
700
+
701
+ <li class="never" data-hits="" data-linenumber="29">
702
+
703
+
704
+ <code class="ruby"> &#39;S&#39; =&gt; CharSets::Any - [&#39; &#39;, &quot;\t&quot;, &quot;\n&quot;, &quot;\r&quot;, &quot;\v&quot;, &quot;\f&quot;],</code>
705
+ </li>
706
+
707
+ <li class="never" data-hits="" data-linenumber="30">
708
+
709
+
710
+ <code class="ruby"> &#39;h&#39; =&gt; CharSets::Hex,</code>
711
+ </li>
712
+
713
+ <li class="never" data-hits="" data-linenumber="31">
714
+
715
+
716
+ <code class="ruby"> &#39;H&#39; =&gt; CharSets::Any - CharSets::Hex,</code>
717
+ </li>
718
+
719
+ <li class="never" data-hits="" data-linenumber="32">
720
+
721
+
722
+ <code class="ruby"></code>
723
+ </li>
724
+
725
+ <li class="never" data-hits="" data-linenumber="33">
726
+
727
+
728
+ <code class="ruby"> &#39;t&#39; =&gt; [&quot;\t&quot;], # tab</code>
729
+ </li>
730
+
731
+ <li class="never" data-hits="" data-linenumber="34">
732
+
733
+
734
+ <code class="ruby"> &#39;n&#39; =&gt; [&quot;\n&quot;], # new line</code>
735
+ </li>
736
+
737
+ <li class="never" data-hits="" data-linenumber="35">
738
+
739
+
740
+ <code class="ruby"> &#39;r&#39; =&gt; [&quot;\r&quot;], # carriage return</code>
741
+ </li>
742
+
743
+ <li class="never" data-hits="" data-linenumber="36">
744
+
745
+
746
+ <code class="ruby"> &#39;f&#39; =&gt; [&quot;\f&quot;], # form feed</code>
747
+ </li>
748
+
749
+ <li class="never" data-hits="" data-linenumber="37">
750
+
751
+
752
+ <code class="ruby"> &#39;a&#39; =&gt; [&quot;\a&quot;], # alarm</code>
753
+ </li>
754
+
755
+ <li class="never" data-hits="" data-linenumber="38">
756
+
757
+
758
+ <code class="ruby"> &#39;v&#39; =&gt; [&quot;\v&quot;], # vertical tab</code>
759
+ </li>
760
+
761
+ <li class="never" data-hits="" data-linenumber="39">
762
+
763
+
764
+ <code class="ruby"> &#39;e&#39; =&gt; [&quot;\e&quot;], # escape</code>
765
+ </li>
766
+
767
+ <li class="never" data-hits="" data-linenumber="40">
768
+
769
+
770
+ <code class="ruby"> }</code>
771
+ </li>
772
+
773
+ <li class="never" data-hits="" data-linenumber="41">
774
+
775
+
776
+ <code class="ruby">end</code>
777
+ </li>
778
+
779
+ <li class="never" data-hits="" data-linenumber="42">
780
+
781
+
782
+ <code class="ruby"></code>
783
+ </li>
784
+
785
+ </ol>
786
+ </pre>
787
+ </div>
788
+
789
+ <div class="source_table" id="00d77fb2e4e21451442e29891ddf88bd05f0fbd7">
790
+ <div class="header">
791
+ <h3>lib/regexp-examples/groups.rb</h3>
792
+ <h4><span class="green">100.0 %</span> covered</h4>
793
+ <div>
794
+ <b>65</b> relevant lines.
795
+ <span class="green"><b>65</b> lines covered</span> and
796
+ <span class="red"><b>0</b> lines missed.</span>
797
+ </div>
798
+ </div>
799
+
800
+ <pre>
801
+ <ol>
802
+
803
+ <li class="covered" data-hits="1" data-linenumber="1">
804
+ <span class="hits">1</span>
805
+
806
+ <code class="ruby">module RegexpExamples</code>
807
+ </li>
808
+
809
+ <li class="covered" data-hits="1" data-linenumber="2">
810
+ <span class="hits">1</span>
811
+
812
+ <code class="ruby"> class SingleCharGroup</code>
813
+ </li>
814
+
815
+ <li class="covered" data-hits="1" data-linenumber="3">
816
+ <span class="hits">1</span>
817
+
818
+ <code class="ruby"> def initialize(char)</code>
819
+ </li>
820
+
821
+ <li class="covered" data-hits="175" data-linenumber="4">
822
+ <span class="hits">175</span>
823
+
824
+ <code class="ruby"> @char = char</code>
825
+ </li>
826
+
827
+ <li class="never" data-hits="" data-linenumber="5">
828
+
829
+
830
+ <code class="ruby"> end</code>
831
+ </li>
832
+
833
+ <li class="covered" data-hits="1" data-linenumber="6">
834
+ <span class="hits">1</span>
835
+
836
+ <code class="ruby"> def result</code>
837
+ </li>
838
+
839
+ <li class="covered" data-hits="175" data-linenumber="7">
840
+ <span class="hits">175</span>
841
+
842
+ <code class="ruby"> [@char]</code>
843
+ </li>
844
+
845
+ <li class="never" data-hits="" data-linenumber="8">
846
+
847
+
848
+ <code class="ruby"> end</code>
849
+ </li>
850
+
851
+ <li class="never" data-hits="" data-linenumber="9">
852
+
853
+
854
+ <code class="ruby"> end</code>
855
+ </li>
856
+
857
+ <li class="never" data-hits="" data-linenumber="10">
858
+
859
+
860
+ <code class="ruby"></code>
861
+ </li>
862
+
863
+ <li class="covered" data-hits="1" data-linenumber="11">
864
+ <span class="hits">1</span>
865
+
866
+ <code class="ruby"> class CharGroup</code>
867
+ </li>
868
+
869
+ <li class="covered" data-hits="1" data-linenumber="12">
870
+ <span class="hits">1</span>
871
+
872
+ <code class="ruby"> def initialize(chars)</code>
873
+ </li>
874
+
875
+ <li class="covered" data-hits="28" data-linenumber="13">
876
+ <span class="hits">28</span>
877
+
878
+ <code class="ruby"> @chars = chars</code>
879
+ </li>
880
+
881
+ <li class="covered" data-hits="28" data-linenumber="14">
882
+ <span class="hits">28</span>
883
+
884
+ <code class="ruby"> if chars[0] == &quot;^&quot;</code>
885
+ </li>
886
+
887
+ <li class="covered" data-hits="1" data-linenumber="15">
888
+ <span class="hits">1</span>
889
+
890
+ <code class="ruby"> @negative = true</code>
891
+ </li>
892
+
893
+ <li class="covered" data-hits="1" data-linenumber="16">
894
+ <span class="hits">1</span>
895
+
896
+ <code class="ruby"> @chars = @chars[1..-1]</code>
897
+ </li>
898
+
899
+ <li class="never" data-hits="" data-linenumber="17">
900
+
901
+
902
+ <code class="ruby"> else</code>
903
+ </li>
904
+
905
+ <li class="covered" data-hits="27" data-linenumber="18">
906
+ <span class="hits">27</span>
907
+
908
+ <code class="ruby"> @negative = false</code>
909
+ </li>
910
+
911
+ <li class="never" data-hits="" data-linenumber="19">
912
+
913
+
914
+ <code class="ruby"> end</code>
915
+ </li>
916
+
917
+ <li class="never" data-hits="" data-linenumber="20">
918
+
919
+
920
+ <code class="ruby"></code>
921
+ </li>
922
+
923
+ <li class="covered" data-hits="28" data-linenumber="21">
924
+ <span class="hits">28</span>
925
+
926
+ <code class="ruby"> init_backslash_chars</code>
927
+ </li>
928
+
929
+ <li class="covered" data-hits="28" data-linenumber="22">
930
+ <span class="hits">28</span>
931
+
932
+ <code class="ruby"> init_ranges</code>
933
+ </li>
934
+
935
+ <li class="never" data-hits="" data-linenumber="23">
936
+
937
+
938
+ <code class="ruby"> end</code>
939
+ </li>
940
+
941
+ <li class="never" data-hits="" data-linenumber="24">
942
+
943
+
944
+ <code class="ruby"></code>
945
+ </li>
946
+
947
+ <li class="covered" data-hits="1" data-linenumber="25">
948
+ <span class="hits">1</span>
949
+
950
+ <code class="ruby"> def init_ranges</code>
951
+ </li>
952
+
953
+ <li class="never" data-hits="" data-linenumber="26">
954
+
955
+
956
+ <code class="ruby"> # save first and last &quot;-&quot; if present</code>
957
+ </li>
958
+
959
+ <li class="covered" data-hits="28" data-linenumber="27">
960
+ <span class="hits">28</span>
961
+
962
+ <code class="ruby"> first = nil</code>
963
+ </li>
964
+
965
+ <li class="covered" data-hits="28" data-linenumber="28">
966
+ <span class="hits">28</span>
967
+
968
+ <code class="ruby"> last = nil</code>
969
+ </li>
970
+
971
+ <li class="covered" data-hits="28" data-linenumber="29">
972
+ <span class="hits">28</span>
973
+
974
+ <code class="ruby"> first = @chars.shift if @chars.first == &quot;-&quot;</code>
975
+ </li>
976
+
977
+ <li class="covered" data-hits="28" data-linenumber="30">
978
+ <span class="hits">28</span>
979
+
980
+ <code class="ruby"> last = @chars.pop if @chars.last == &quot;-&quot;</code>
981
+ </li>
982
+
983
+ <li class="never" data-hits="" data-linenumber="31">
984
+
985
+
986
+ <code class="ruby"> # Replace all instances of e.g. [&quot;a&quot; &quot;-&quot; &quot;z&quot;] with [&quot;a&quot;, &quot;b&quot;, ..., &quot;z&quot;]</code>
987
+ </li>
988
+
989
+ <li class="covered" data-hits="28" data-linenumber="32">
990
+ <span class="hits">28</span>
991
+
992
+ <code class="ruby"> while i = @chars.index(&quot;-&quot;)</code>
993
+ </li>
994
+
995
+ <li class="covered" data-hits="9" data-linenumber="33">
996
+ <span class="hits">9</span>
997
+
998
+ <code class="ruby"> @chars[i-1..i+1] = (@chars[i-1]..@chars[i+1]).to_a</code>
999
+ </li>
1000
+
1001
+ <li class="never" data-hits="" data-linenumber="34">
1002
+
1003
+
1004
+ <code class="ruby"> end</code>
1005
+ </li>
1006
+
1007
+ <li class="never" data-hits="" data-linenumber="35">
1008
+
1009
+
1010
+ <code class="ruby"> # restore them back</code>
1011
+ </li>
1012
+
1013
+ <li class="covered" data-hits="28" data-linenumber="36">
1014
+ <span class="hits">28</span>
1015
+
1016
+ <code class="ruby"> @chars.unshift(first) if first</code>
1017
+ </li>
1018
+
1019
+ <li class="covered" data-hits="28" data-linenumber="37">
1020
+ <span class="hits">28</span>
1021
+
1022
+ <code class="ruby"> @chars.push(last) if last</code>
1023
+ </li>
1024
+
1025
+ <li class="never" data-hits="" data-linenumber="38">
1026
+
1027
+
1028
+ <code class="ruby"> end</code>
1029
+ </li>
1030
+
1031
+ <li class="never" data-hits="" data-linenumber="39">
1032
+
1033
+
1034
+ <code class="ruby"></code>
1035
+ </li>
1036
+
1037
+ <li class="covered" data-hits="1" data-linenumber="40">
1038
+ <span class="hits">1</span>
1039
+
1040
+ <code class="ruby"> def init_backslash_chars</code>
1041
+ </li>
1042
+
1043
+ <li class="covered" data-hits="28" data-linenumber="41">
1044
+ <span class="hits">28</span>
1045
+
1046
+ <code class="ruby"> @chars.each_with_index do |char, i|</code>
1047
+ </li>
1048
+
1049
+ <li class="covered" data-hits="540" data-linenumber="42">
1050
+ <span class="hits">540</span>
1051
+
1052
+ <code class="ruby"> if char == &quot;\\&quot;</code>
1053
+ </li>
1054
+
1055
+ <li class="covered" data-hits="13" data-linenumber="43">
1056
+ <span class="hits">13</span>
1057
+
1058
+ <code class="ruby"> if BackslashCharMap.keys.include?(@chars[i+1])</code>
1059
+ </li>
1060
+
1061
+ <li class="covered" data-hits="4" data-linenumber="44">
1062
+ <span class="hits">4</span>
1063
+
1064
+ <code class="ruby"> @chars[i..i+1] = BackslashCharMap[@chars[i+1]]</code>
1065
+ </li>
1066
+
1067
+ <li class="never" data-hits="" data-linenumber="45">
1068
+
1069
+
1070
+ <code class="ruby"> elsif @chars[i+1] == &quot;\\&quot;</code>
1071
+ </li>
1072
+
1073
+ <li class="covered" data-hits="2" data-linenumber="46">
1074
+ <span class="hits">2</span>
1075
+
1076
+ <code class="ruby"> @chars.delete_at(i+1)</code>
1077
+ </li>
1078
+
1079
+ <li class="never" data-hits="" data-linenumber="47">
1080
+
1081
+
1082
+ <code class="ruby"> else</code>
1083
+ </li>
1084
+
1085
+ <li class="covered" data-hits="7" data-linenumber="48">
1086
+ <span class="hits">7</span>
1087
+
1088
+ <code class="ruby"> @chars.delete_at(i)</code>
1089
+ </li>
1090
+
1091
+ <li class="never" data-hits="" data-linenumber="49">
1092
+
1093
+
1094
+ <code class="ruby"> end</code>
1095
+ </li>
1096
+
1097
+ <li class="never" data-hits="" data-linenumber="50">
1098
+
1099
+
1100
+ <code class="ruby"> end</code>
1101
+ </li>
1102
+
1103
+ <li class="never" data-hits="" data-linenumber="51">
1104
+
1105
+
1106
+ <code class="ruby"> end</code>
1107
+ </li>
1108
+
1109
+ <li class="never" data-hits="" data-linenumber="52">
1110
+
1111
+
1112
+ <code class="ruby"> end</code>
1113
+ </li>
1114
+
1115
+ <li class="never" data-hits="" data-linenumber="53">
1116
+
1117
+
1118
+ <code class="ruby"></code>
1119
+ </li>
1120
+
1121
+ <li class="covered" data-hits="1" data-linenumber="54">
1122
+ <span class="hits">1</span>
1123
+
1124
+ <code class="ruby"> def result</code>
1125
+ </li>
1126
+
1127
+ <li class="covered" data-hits="28" data-linenumber="55">
1128
+ <span class="hits">28</span>
1129
+
1130
+ <code class="ruby"> if @negative</code>
1131
+ </li>
1132
+
1133
+ <li class="covered" data-hits="1" data-linenumber="56">
1134
+ <span class="hits">1</span>
1135
+
1136
+ <code class="ruby"> CharSets::Any - @chars</code>
1137
+ </li>
1138
+
1139
+ <li class="never" data-hits="" data-linenumber="57">
1140
+
1141
+
1142
+ <code class="ruby"> else</code>
1143
+ </li>
1144
+
1145
+ <li class="covered" data-hits="27" data-linenumber="58">
1146
+ <span class="hits">27</span>
1147
+
1148
+ <code class="ruby"> @chars</code>
1149
+ </li>
1150
+
1151
+ <li class="never" data-hits="" data-linenumber="59">
1152
+
1153
+
1154
+ <code class="ruby"> end</code>
1155
+ </li>
1156
+
1157
+ <li class="never" data-hits="" data-linenumber="60">
1158
+
1159
+
1160
+ <code class="ruby"> end</code>
1161
+ </li>
1162
+
1163
+ <li class="never" data-hits="" data-linenumber="61">
1164
+
1165
+
1166
+ <code class="ruby"> end</code>
1167
+ </li>
1168
+
1169
+ <li class="never" data-hits="" data-linenumber="62">
1170
+
1171
+
1172
+ <code class="ruby"></code>
1173
+ </li>
1174
+
1175
+ <li class="covered" data-hits="1" data-linenumber="63">
1176
+ <span class="hits">1</span>
1177
+
1178
+ <code class="ruby"> class DotGroup</code>
1179
+ </li>
1180
+
1181
+ <li class="covered" data-hits="1" data-linenumber="64">
1182
+ <span class="hits">1</span>
1183
+
1184
+ <code class="ruby"> def result</code>
1185
+ </li>
1186
+
1187
+ <li class="covered" data-hits="1" data-linenumber="65">
1188
+ <span class="hits">1</span>
1189
+
1190
+ <code class="ruby"> CharSets::Any</code>
1191
+ </li>
1192
+
1193
+ <li class="never" data-hits="" data-linenumber="66">
1194
+
1195
+
1196
+ <code class="ruby"> end</code>
1197
+ </li>
1198
+
1199
+ <li class="never" data-hits="" data-linenumber="67">
1200
+
1201
+
1202
+ <code class="ruby"> end</code>
1203
+ </li>
1204
+
1205
+ <li class="never" data-hits="" data-linenumber="68">
1206
+
1207
+
1208
+ <code class="ruby"></code>
1209
+ </li>
1210
+
1211
+ <li class="covered" data-hits="1" data-linenumber="69">
1212
+ <span class="hits">1</span>
1213
+
1214
+ <code class="ruby"> class MultiGroup</code>
1215
+ </li>
1216
+
1217
+ <li class="covered" data-hits="1" data-linenumber="70">
1218
+ <span class="hits">1</span>
1219
+
1220
+ <code class="ruby"> attr_reader :group_id</code>
1221
+ </li>
1222
+
1223
+ <li class="covered" data-hits="1" data-linenumber="71">
1224
+ <span class="hits">1</span>
1225
+
1226
+ <code class="ruby"> def initialize(groups, group_id)</code>
1227
+ </li>
1228
+
1229
+ <li class="covered" data-hits="41" data-linenumber="72">
1230
+ <span class="hits">41</span>
1231
+
1232
+ <code class="ruby"> @groups = groups</code>
1233
+ </li>
1234
+
1235
+ <li class="covered" data-hits="41" data-linenumber="73">
1236
+ <span class="hits">41</span>
1237
+
1238
+ <code class="ruby"> @group_id = group_id</code>
1239
+ </li>
1240
+
1241
+ <li class="never" data-hits="" data-linenumber="74">
1242
+
1243
+
1244
+ <code class="ruby"> end</code>
1245
+ </li>
1246
+
1247
+ <li class="never" data-hits="" data-linenumber="75">
1248
+
1249
+
1250
+ <code class="ruby"></code>
1251
+ </li>
1252
+
1253
+ <li class="never" data-hits="" data-linenumber="76">
1254
+
1255
+
1256
+ <code class="ruby"> # Generates the result of each contained group</code>
1257
+ </li>
1258
+
1259
+ <li class="never" data-hits="" data-linenumber="77">
1260
+
1261
+
1262
+ <code class="ruby"> # and adds the filled group of each result to</code>
1263
+ </li>
1264
+
1265
+ <li class="never" data-hits="" data-linenumber="78">
1266
+
1267
+
1268
+ <code class="ruby"> # itself</code>
1269
+ </li>
1270
+
1271
+ <li class="covered" data-hits="1" data-linenumber="79">
1272
+ <span class="hits">1</span>
1273
+
1274
+ <code class="ruby"> def result</code>
1275
+ </li>
1276
+
1277
+ <li class="covered" data-hits="186" data-linenumber="80">
1278
+ <span class="hits">186</span>
1279
+
1280
+ <code class="ruby"> strings = @groups.map {|repeater| repeater.result}</code>
1281
+ </li>
1282
+
1283
+ <li class="covered" data-hits="41" data-linenumber="81">
1284
+ <span class="hits">41</span>
1285
+
1286
+ <code class="ruby"> RegexpExamples::permutations_of_strings(strings).map do |result|</code>
1287
+ </li>
1288
+
1289
+ <li class="covered" data-hits="101" data-linenumber="82">
1290
+ <span class="hits">101</span>
1291
+
1292
+ <code class="ruby"> subgroups = result.respond_to?(:group_id) ? result.all_subgroups : []</code>
1293
+ </li>
1294
+
1295
+ <li class="covered" data-hits="101" data-linenumber="83">
1296
+ <span class="hits">101</span>
1297
+
1298
+ <code class="ruby"> group_id ? CaptureGroupResult.new(group_id, subgroups, result) : result</code>
1299
+ </li>
1300
+
1301
+ <li class="never" data-hits="" data-linenumber="84">
1302
+
1303
+
1304
+ <code class="ruby"> end</code>
1305
+ </li>
1306
+
1307
+ <li class="never" data-hits="" data-linenumber="85">
1308
+
1309
+
1310
+ <code class="ruby"> end</code>
1311
+ </li>
1312
+
1313
+ <li class="never" data-hits="" data-linenumber="86">
1314
+
1315
+
1316
+ <code class="ruby"> end</code>
1317
+ </li>
1318
+
1319
+ <li class="never" data-hits="" data-linenumber="87">
1320
+
1321
+
1322
+ <code class="ruby"></code>
1323
+ </li>
1324
+
1325
+ <li class="covered" data-hits="1" data-linenumber="88">
1326
+ <span class="hits">1</span>
1327
+
1328
+ <code class="ruby"> class MultiGroupEnd</code>
1329
+ </li>
1330
+
1331
+ <li class="never" data-hits="" data-linenumber="89">
1332
+
1333
+
1334
+ <code class="ruby"> end</code>
1335
+ </li>
1336
+
1337
+ <li class="never" data-hits="" data-linenumber="90">
1338
+
1339
+
1340
+ <code class="ruby"></code>
1341
+ </li>
1342
+
1343
+ <li class="covered" data-hits="1" data-linenumber="91">
1344
+ <span class="hits">1</span>
1345
+
1346
+ <code class="ruby"> class OrGroup</code>
1347
+ </li>
1348
+
1349
+ <li class="covered" data-hits="1" data-linenumber="92">
1350
+ <span class="hits">1</span>
1351
+
1352
+ <code class="ruby"> def initialize(left_repeaters, right_repeaters)</code>
1353
+ </li>
1354
+
1355
+ <li class="covered" data-hits="6" data-linenumber="93">
1356
+ <span class="hits">6</span>
1357
+
1358
+ <code class="ruby"> @left_repeaters = left_repeaters</code>
1359
+ </li>
1360
+
1361
+ <li class="covered" data-hits="6" data-linenumber="94">
1362
+ <span class="hits">6</span>
1363
+
1364
+ <code class="ruby"> @right_repeaters = right_repeaters</code>
1365
+ </li>
1366
+
1367
+ <li class="never" data-hits="" data-linenumber="95">
1368
+
1369
+
1370
+ <code class="ruby"> end</code>
1371
+ </li>
1372
+
1373
+ <li class="never" data-hits="" data-linenumber="96">
1374
+
1375
+
1376
+ <code class="ruby"></code>
1377
+ </li>
1378
+
1379
+ <li class="covered" data-hits="1" data-linenumber="97">
1380
+ <span class="hits">1</span>
1381
+
1382
+ <code class="ruby"> def result</code>
1383
+ </li>
1384
+
1385
+ <li class="covered" data-hits="6" data-linenumber="98">
1386
+ <span class="hits">6</span>
1387
+
1388
+ <code class="ruby"> left_result = @left_repeaters.map do |repeater|</code>
1389
+ </li>
1390
+
1391
+ <li class="covered" data-hits="6" data-linenumber="99">
1392
+ <span class="hits">6</span>
1393
+
1394
+ <code class="ruby"> RegexpExamples::permutations_of_strings([repeater.result])</code>
1395
+ </li>
1396
+
1397
+ <li class="never" data-hits="" data-linenumber="100">
1398
+
1399
+
1400
+ <code class="ruby"> end</code>
1401
+ </li>
1402
+
1403
+ <li class="covered" data-hits="6" data-linenumber="101">
1404
+ <span class="hits">6</span>
1405
+
1406
+ <code class="ruby"> right_result = @right_repeaters.map do |repeater|</code>
1407
+ </li>
1408
+
1409
+ <li class="covered" data-hits="6" data-linenumber="102">
1410
+ <span class="hits">6</span>
1411
+
1412
+ <code class="ruby"> RegexpExamples::permutations_of_strings([repeater.result])</code>
1413
+ </li>
1414
+
1415
+ <li class="never" data-hits="" data-linenumber="103">
1416
+
1417
+
1418
+ <code class="ruby"> end</code>
1419
+ </li>
1420
+
1421
+ <li class="covered" data-hits="6" data-linenumber="104">
1422
+ <span class="hits">6</span>
1423
+
1424
+ <code class="ruby"> left_result.concat(right_result).flatten.uniq</code>
1425
+ </li>
1426
+
1427
+ <li class="never" data-hits="" data-linenumber="105">
1428
+
1429
+
1430
+ <code class="ruby"> end</code>
1431
+ </li>
1432
+
1433
+ <li class="never" data-hits="" data-linenumber="106">
1434
+
1435
+
1436
+ <code class="ruby"> end</code>
1437
+ </li>
1438
+
1439
+ <li class="never" data-hits="" data-linenumber="107">
1440
+
1441
+
1442
+ <code class="ruby"></code>
1443
+ </li>
1444
+
1445
+ <li class="covered" data-hits="1" data-linenumber="108">
1446
+ <span class="hits">1</span>
1447
+
1448
+ <code class="ruby"> class BackReferenceGroup</code>
1449
+ </li>
1450
+
1451
+ <li class="covered" data-hits="1" data-linenumber="109">
1452
+ <span class="hits">1</span>
1453
+
1454
+ <code class="ruby"> attr_reader :id</code>
1455
+ </li>
1456
+
1457
+ <li class="covered" data-hits="1" data-linenumber="110">
1458
+ <span class="hits">1</span>
1459
+
1460
+ <code class="ruby"> def initialize(id)</code>
1461
+ </li>
1462
+
1463
+ <li class="covered" data-hits="20" data-linenumber="111">
1464
+ <span class="hits">20</span>
1465
+
1466
+ <code class="ruby"> @id = id</code>
1467
+ </li>
1468
+
1469
+ <li class="never" data-hits="" data-linenumber="112">
1470
+
1471
+
1472
+ <code class="ruby"> end</code>
1473
+ </li>
1474
+
1475
+ <li class="never" data-hits="" data-linenumber="113">
1476
+
1477
+
1478
+ <code class="ruby"></code>
1479
+ </li>
1480
+
1481
+ <li class="covered" data-hits="1" data-linenumber="114">
1482
+ <span class="hits">1</span>
1483
+
1484
+ <code class="ruby"> def result</code>
1485
+ </li>
1486
+
1487
+ <li class="covered" data-hits="20" data-linenumber="115">
1488
+ <span class="hits">20</span>
1489
+
1490
+ <code class="ruby"> [&quot;__#{@id}__&quot;]</code>
1491
+ </li>
1492
+
1493
+ <li class="never" data-hits="" data-linenumber="116">
1494
+
1495
+
1496
+ <code class="ruby"> end</code>
1497
+ </li>
1498
+
1499
+ <li class="never" data-hits="" data-linenumber="117">
1500
+
1501
+
1502
+ <code class="ruby"> end</code>
1503
+ </li>
1504
+
1505
+ <li class="never" data-hits="" data-linenumber="118">
1506
+
1507
+
1508
+ <code class="ruby"></code>
1509
+ </li>
1510
+
1511
+ <li class="never" data-hits="" data-linenumber="119">
1512
+
1513
+
1514
+ <code class="ruby">end</code>
1515
+ </li>
1516
+
1517
+ </ol>
1518
+ </pre>
1519
+ </div>
1520
+
1521
+ <div class="source_table" id="dad3c4bb6458db3261442a9292e1345b41afd730">
1522
+ <div class="header">
1523
+ <h3>lib/regexp-examples/helpers.rb</h3>
1524
+ <h4><span class="green">100.0 %</span> covered</h4>
1525
+ <div>
1526
+ <b>15</b> relevant lines.
1527
+ <span class="green"><b>15</b> lines covered</span> and
1528
+ <span class="red"><b>0</b> lines missed.</span>
1529
+ </div>
1530
+ </div>
1531
+
1532
+ <pre>
1533
+ <ol>
1534
+
1535
+ <li class="covered" data-hits="1" data-linenumber="1">
1536
+ <span class="hits">1</span>
1537
+
1538
+ <code class="ruby">module RegexpExamples</code>
1539
+ </li>
1540
+
1541
+ <li class="never" data-hits="" data-linenumber="2">
1542
+
1543
+
1544
+ <code class="ruby"> # Given an array of arrays of strings,</code>
1545
+ </li>
1546
+
1547
+ <li class="never" data-hits="" data-linenumber="3">
1548
+
1549
+
1550
+ <code class="ruby"> # returns all possible perutations,</code>
1551
+ </li>
1552
+
1553
+ <li class="never" data-hits="" data-linenumber="4">
1554
+
1555
+
1556
+ <code class="ruby"> # for strings created by joining one</code>
1557
+ </li>
1558
+
1559
+ <li class="never" data-hits="" data-linenumber="5">
1560
+
1561
+
1562
+ <code class="ruby"> # element from each array</code>
1563
+ </li>
1564
+
1565
+ <li class="never" data-hits="" data-linenumber="6">
1566
+
1567
+
1568
+ <code class="ruby"> #</code>
1569
+ </li>
1570
+
1571
+ <li class="never" data-hits="" data-linenumber="7">
1572
+
1573
+
1574
+ <code class="ruby"> # For example:</code>
1575
+ </li>
1576
+
1577
+ <li class="never" data-hits="" data-linenumber="8">
1578
+
1579
+
1580
+ <code class="ruby"> # permutations_of_strings [ [&#39;a&#39;], [&#39;b&#39;], [&#39;c&#39;, &#39;d&#39;, &#39;e&#39;] ] #=&gt; [&#39;acb&#39;, &#39;abd&#39;, &#39;abe&#39;]</code>
1581
+ </li>
1582
+
1583
+ <li class="never" data-hits="" data-linenumber="9">
1584
+
1585
+
1586
+ <code class="ruby"> # permutations_of_strings [ [&#39;a&#39;, &#39;b&#39;], [&#39;c&#39;, &#39;d&#39;] ] #=&gt; [ &#39;ac&#39;, &#39;ad&#39;, &#39;bc&#39;, &#39;bd&#39; ]</code>
1587
+ </li>
1588
+
1589
+ <li class="covered" data-hits="1" data-linenumber="10">
1590
+ <span class="hits">1</span>
1591
+
1592
+ <code class="ruby"> def self.permutations_of_strings(arrays_of_strings, options={})</code>
1593
+ </li>
1594
+
1595
+ <li class="covered" data-hits="271" data-linenumber="11">
1596
+ <span class="hits">271</span>
1597
+
1598
+ <code class="ruby"> first = arrays_of_strings.shift</code>
1599
+ </li>
1600
+
1601
+ <li class="covered" data-hits="271" data-linenumber="12">
1602
+ <span class="hits">271</span>
1603
+
1604
+ <code class="ruby"> return first if arrays_of_strings.empty?</code>
1605
+ </li>
1606
+
1607
+ <li class="covered" data-hits="164" data-linenumber="13">
1608
+ <span class="hits">164</span>
1609
+
1610
+ <code class="ruby"> first.product( permutations_of_strings(arrays_of_strings, options) ).map do |result|</code>
1611
+ </li>
1612
+
1613
+ <li class="covered" data-hits="237" data-linenumber="14">
1614
+ <span class="hits">237</span>
1615
+
1616
+ <code class="ruby"> if options[:no_join]</code>
1617
+ </li>
1618
+
1619
+ <li class="covered" data-hits="73" data-linenumber="15">
1620
+ <span class="hits">73</span>
1621
+
1622
+ <code class="ruby"> result.flatten</code>
1623
+ </li>
1624
+
1625
+ <li class="never" data-hits="" data-linenumber="16">
1626
+
1627
+
1628
+ <code class="ruby"> else</code>
1629
+ </li>
1630
+
1631
+ <li class="covered" data-hits="164" data-linenumber="17">
1632
+ <span class="hits">164</span>
1633
+
1634
+ <code class="ruby"> join_preserving_capture_groups(result)</code>
1635
+ </li>
1636
+
1637
+ <li class="never" data-hits="" data-linenumber="18">
1638
+
1639
+
1640
+ <code class="ruby"> end</code>
1641
+ </li>
1642
+
1643
+ <li class="never" data-hits="" data-linenumber="19">
1644
+
1645
+
1646
+ <code class="ruby"> end</code>
1647
+ </li>
1648
+
1649
+ <li class="never" data-hits="" data-linenumber="20">
1650
+
1651
+
1652
+ <code class="ruby"> end</code>
1653
+ </li>
1654
+
1655
+ <li class="never" data-hits="" data-linenumber="21">
1656
+
1657
+
1658
+ <code class="ruby"></code>
1659
+ </li>
1660
+
1661
+ <li class="covered" data-hits="1" data-linenumber="22">
1662
+ <span class="hits">1</span>
1663
+
1664
+ <code class="ruby"> def self.join_preserving_capture_groups(result)</code>
1665
+ </li>
1666
+
1667
+ <li class="covered" data-hits="164" data-linenumber="23">
1668
+ <span class="hits">164</span>
1669
+
1670
+ <code class="ruby"> result.flatten!</code>
1671
+ </li>
1672
+
1673
+ <li class="covered" data-hits="164" data-linenumber="24">
1674
+ <span class="hits">164</span>
1675
+
1676
+ <code class="ruby"> subgroups = result</code>
1677
+ </li>
1678
+
1679
+ <li class="covered" data-hits="328" data-linenumber="25">
1680
+ <span class="hits">328</span>
1681
+
1682
+ <code class="ruby"> .select { |partial| partial.respond_to? :group_id }</code>
1683
+ </li>
1684
+
1685
+ <li class="never" data-hits="" data-linenumber="26">
1686
+
1687
+
1688
+ <code class="ruby"> .map(&amp;:all_subgroups)</code>
1689
+ </li>
1690
+
1691
+ <li class="never" data-hits="" data-linenumber="27">
1692
+
1693
+
1694
+ <code class="ruby"> .flatten</code>
1695
+ </li>
1696
+
1697
+ <li class="never" data-hits="" data-linenumber="28">
1698
+
1699
+
1700
+ <code class="ruby"></code>
1701
+ </li>
1702
+
1703
+ <li class="covered" data-hits="164" data-linenumber="29">
1704
+ <span class="hits">164</span>
1705
+
1706
+ <code class="ruby"> if subgroups.empty?</code>
1707
+ </li>
1708
+
1709
+ <li class="covered" data-hits="123" data-linenumber="30">
1710
+ <span class="hits">123</span>
1711
+
1712
+ <code class="ruby"> result.join</code>
1713
+ </li>
1714
+
1715
+ <li class="never" data-hits="" data-linenumber="31">
1716
+
1717
+
1718
+ <code class="ruby"> else</code>
1719
+ </li>
1720
+
1721
+ <li class="covered" data-hits="41" data-linenumber="32">
1722
+ <span class="hits">41</span>
1723
+
1724
+ <code class="ruby"> CaptureGroupResult.new(nil, subgroups, result.join)</code>
1725
+ </li>
1726
+
1727
+ <li class="never" data-hits="" data-linenumber="33">
1728
+
1729
+
1730
+ <code class="ruby"> end</code>
1731
+ </li>
1732
+
1733
+ <li class="never" data-hits="" data-linenumber="34">
1734
+
1735
+
1736
+ <code class="ruby"> end</code>
1737
+ </li>
1738
+
1739
+ <li class="never" data-hits="" data-linenumber="35">
1740
+
1741
+
1742
+ <code class="ruby">end</code>
1743
+ </li>
1744
+
1745
+ <li class="never" data-hits="" data-linenumber="36">
1746
+
1747
+
1748
+ <code class="ruby"></code>
1749
+ </li>
1750
+
1751
+ </ol>
1752
+ </pre>
1753
+ </div>
1754
+
1755
+ <div class="source_table" id="e013406b8d61f5ad15d0a3ad7ea7e8e96b6d7254">
1756
+ <div class="header">
1757
+ <h3>lib/regexp-examples/parser.rb</h3>
1758
+ <h4><span class="green">100.0 %</span> covered</h4>
1759
+ <div>
1760
+ <b>102</b> relevant lines.
1761
+ <span class="green"><b>102</b> lines covered</span> and
1762
+ <span class="red"><b>0</b> lines missed.</span>
1763
+ </div>
1764
+ </div>
1765
+
1766
+ <pre>
1767
+ <ol>
1768
+
1769
+ <li class="covered" data-hits="1" data-linenumber="1">
1770
+ <span class="hits">1</span>
1771
+
1772
+ <code class="ruby">module RegexpExamples</code>
1773
+ </li>
1774
+
1775
+ <li class="covered" data-hits="1" data-linenumber="2">
1776
+ <span class="hits">1</span>
1777
+
1778
+ <code class="ruby"> class Parser</code>
1779
+ </li>
1780
+
1781
+ <li class="covered" data-hits="1" data-linenumber="3">
1782
+ <span class="hits">1</span>
1783
+
1784
+ <code class="ruby"> attr_reader :regexp_string</code>
1785
+ </li>
1786
+
1787
+ <li class="covered" data-hits="1" data-linenumber="4">
1788
+ <span class="hits">1</span>
1789
+
1790
+ <code class="ruby"> def initialize(regexp_string)</code>
1791
+ </li>
1792
+
1793
+ <li class="covered" data-hits="54" data-linenumber="5">
1794
+ <span class="hits">54</span>
1795
+
1796
+ <code class="ruby"> @regexp_string = regexp_string</code>
1797
+ </li>
1798
+
1799
+ <li class="covered" data-hits="54" data-linenumber="6">
1800
+ <span class="hits">54</span>
1801
+
1802
+ <code class="ruby"> @num_groups = 0</code>
1803
+ </li>
1804
+
1805
+ <li class="covered" data-hits="54" data-linenumber="7">
1806
+ <span class="hits">54</span>
1807
+
1808
+ <code class="ruby"> @current_position = 0</code>
1809
+ </li>
1810
+
1811
+ <li class="never" data-hits="" data-linenumber="8">
1812
+
1813
+
1814
+ <code class="ruby"> end</code>
1815
+ </li>
1816
+
1817
+ <li class="never" data-hits="" data-linenumber="9">
1818
+
1819
+
1820
+ <code class="ruby"></code>
1821
+ </li>
1822
+
1823
+ <li class="covered" data-hits="1" data-linenumber="10">
1824
+ <span class="hits">1</span>
1825
+
1826
+ <code class="ruby"> def parse</code>
1827
+ </li>
1828
+
1829
+ <li class="covered" data-hits="101" data-linenumber="11">
1830
+ <span class="hits">101</span>
1831
+
1832
+ <code class="ruby"> repeaters = []</code>
1833
+ </li>
1834
+
1835
+ <li class="covered" data-hits="101" data-linenumber="12">
1836
+ <span class="hits">101</span>
1837
+
1838
+ <code class="ruby"> while @current_position &lt; regexp_string.length</code>
1839
+ </li>
1840
+
1841
+ <li class="covered" data-hits="312" data-linenumber="13">
1842
+ <span class="hits">312</span>
1843
+
1844
+ <code class="ruby"> group = parse_group(repeaters)</code>
1845
+ </li>
1846
+
1847
+ <li class="covered" data-hits="312" data-linenumber="14">
1848
+ <span class="hits">312</span>
1849
+
1850
+ <code class="ruby"> break if group.is_a? MultiGroupEnd</code>
1851
+ </li>
1852
+
1853
+ <li class="covered" data-hits="271" data-linenumber="15">
1854
+ <span class="hits">271</span>
1855
+
1856
+ <code class="ruby"> repeaters = [] if group.is_a? OrGroup</code>
1857
+ </li>
1858
+
1859
+ <li class="covered" data-hits="271" data-linenumber="16">
1860
+ <span class="hits">271</span>
1861
+
1862
+ <code class="ruby"> @current_position += 1</code>
1863
+ </li>
1864
+
1865
+ <li class="covered" data-hits="271" data-linenumber="17">
1866
+ <span class="hits">271</span>
1867
+
1868
+ <code class="ruby"> repeaters &lt;&lt; parse_repeater(group)</code>
1869
+ </li>
1870
+
1871
+ <li class="never" data-hits="" data-linenumber="18">
1872
+
1873
+
1874
+ <code class="ruby"> end</code>
1875
+ </li>
1876
+
1877
+ <li class="covered" data-hits="101" data-linenumber="19">
1878
+ <span class="hits">101</span>
1879
+
1880
+ <code class="ruby"> repeaters</code>
1881
+ </li>
1882
+
1883
+ <li class="never" data-hits="" data-linenumber="20">
1884
+
1885
+
1886
+ <code class="ruby"> end</code>
1887
+ </li>
1888
+
1889
+ <li class="never" data-hits="" data-linenumber="21">
1890
+
1891
+
1892
+ <code class="ruby"></code>
1893
+ </li>
1894
+
1895
+ <li class="covered" data-hits="1" data-linenumber="22">
1896
+ <span class="hits">1</span>
1897
+
1898
+ <code class="ruby"> private</code>
1899
+ </li>
1900
+
1901
+ <li class="never" data-hits="" data-linenumber="23">
1902
+
1903
+
1904
+ <code class="ruby"></code>
1905
+ </li>
1906
+
1907
+ <li class="covered" data-hits="1" data-linenumber="24">
1908
+ <span class="hits">1</span>
1909
+
1910
+ <code class="ruby"> def parse_group(repeaters)</code>
1911
+ </li>
1912
+
1913
+ <li class="covered" data-hits="312" data-linenumber="25">
1914
+ <span class="hits">312</span>
1915
+
1916
+ <code class="ruby"> char = regexp_string[@current_position]</code>
1917
+ </li>
1918
+
1919
+ <li class="covered" data-hits="312" data-linenumber="26">
1920
+ <span class="hits">312</span>
1921
+
1922
+ <code class="ruby"> case char</code>
1923
+ </li>
1924
+
1925
+ <li class="never" data-hits="" data-linenumber="27">
1926
+
1927
+
1928
+ <code class="ruby"> when &#39;(&#39;</code>
1929
+ </li>
1930
+
1931
+ <li class="covered" data-hits="41" data-linenumber="28">
1932
+ <span class="hits">41</span>
1933
+
1934
+ <code class="ruby"> group = parse_multi_group</code>
1935
+ </li>
1936
+
1937
+ <li class="never" data-hits="" data-linenumber="29">
1938
+
1939
+
1940
+ <code class="ruby"> when &#39;)&#39;</code>
1941
+ </li>
1942
+
1943
+ <li class="covered" data-hits="41" data-linenumber="30">
1944
+ <span class="hits">41</span>
1945
+
1946
+ <code class="ruby"> group = parse_multi_end_group</code>
1947
+ </li>
1948
+
1949
+ <li class="never" data-hits="" data-linenumber="31">
1950
+
1951
+
1952
+ <code class="ruby"> when &#39;[&#39;</code>
1953
+ </li>
1954
+
1955
+ <li class="covered" data-hits="14" data-linenumber="32">
1956
+ <span class="hits">14</span>
1957
+
1958
+ <code class="ruby"> group = parse_char_group</code>
1959
+ </li>
1960
+
1961
+ <li class="never" data-hits="" data-linenumber="33">
1962
+
1963
+
1964
+ <code class="ruby"> when &#39;.&#39;</code>
1965
+ </li>
1966
+
1967
+ <li class="covered" data-hits="1" data-linenumber="34">
1968
+ <span class="hits">1</span>
1969
+
1970
+ <code class="ruby"> group = parse_dot_group</code>
1971
+ </li>
1972
+
1973
+ <li class="never" data-hits="" data-linenumber="35">
1974
+
1975
+
1976
+ <code class="ruby"> when &#39;|&#39;</code>
1977
+ </li>
1978
+
1979
+ <li class="covered" data-hits="6" data-linenumber="36">
1980
+ <span class="hits">6</span>
1981
+
1982
+ <code class="ruby"> group = parse_or_group(repeaters)</code>
1983
+ </li>
1984
+
1985
+ <li class="never" data-hits="" data-linenumber="37">
1986
+
1987
+
1988
+ <code class="ruby"> when &#39;\\&#39;</code>
1989
+ </li>
1990
+
1991
+ <li class="covered" data-hits="36" data-linenumber="38">
1992
+ <span class="hits">36</span>
1993
+
1994
+ <code class="ruby"> group = parse_after_backslash_group</code>
1995
+ </li>
1996
+
1997
+ <li class="never" data-hits="" data-linenumber="39">
1998
+
1999
+
2000
+ <code class="ruby"> else</code>
2001
+ </li>
2002
+
2003
+ <li class="covered" data-hits="173" data-linenumber="40">
2004
+ <span class="hits">173</span>
2005
+
2006
+ <code class="ruby"> group = parse_single_char_group(char)</code>
2007
+ </li>
2008
+
2009
+ <li class="never" data-hits="" data-linenumber="41">
2010
+
2011
+
2012
+ <code class="ruby"> end</code>
2013
+ </li>
2014
+
2015
+ <li class="covered" data-hits="312" data-linenumber="42">
2016
+ <span class="hits">312</span>
2017
+
2018
+ <code class="ruby"> group</code>
2019
+ </li>
2020
+
2021
+ <li class="never" data-hits="" data-linenumber="43">
2022
+
2023
+
2024
+ <code class="ruby"> end</code>
2025
+ </li>
2026
+
2027
+ <li class="never" data-hits="" data-linenumber="44">
2028
+
2029
+
2030
+ <code class="ruby"></code>
2031
+ </li>
2032
+
2033
+ <li class="covered" data-hits="1" data-linenumber="45">
2034
+ <span class="hits">1</span>
2035
+
2036
+ <code class="ruby"> def parse_after_backslash_group</code>
2037
+ </li>
2038
+
2039
+ <li class="covered" data-hits="36" data-linenumber="46">
2040
+ <span class="hits">36</span>
2041
+
2042
+ <code class="ruby"> @current_position += 1</code>
2043
+ </li>
2044
+
2045
+ <li class="never" data-hits="" data-linenumber="47">
2046
+
2047
+
2048
+ <code class="ruby"> case</code>
2049
+ </li>
2050
+
2051
+ <li class="never" data-hits="" data-linenumber="48">
2052
+
2053
+
2054
+ <code class="ruby"> when rest_of_string =~ /\A(\d+)/</code>
2055
+ </li>
2056
+
2057
+ <li class="covered" data-hits="19" data-linenumber="49">
2058
+ <span class="hits">19</span>
2059
+
2060
+ <code class="ruby"> @current_position += ($1.length - 1) # In case of 10+ backrefs!</code>
2061
+ </li>
2062
+
2063
+ <li class="covered" data-hits="19" data-linenumber="50">
2064
+ <span class="hits">19</span>
2065
+
2066
+ <code class="ruby"> group = parse_backreference_group($1)</code>
2067
+ </li>
2068
+
2069
+ <li class="never" data-hits="" data-linenumber="51">
2070
+
2071
+
2072
+ <code class="ruby"> when rest_of_string =~ /\Ak&lt;([^&gt;]+)&gt;/ # Named capture group</code>
2073
+ </li>
2074
+
2075
+ <li class="covered" data-hits="1" data-linenumber="52">
2076
+ <span class="hits">1</span>
2077
+
2078
+ <code class="ruby"> @current_position += ($1.length + 2)</code>
2079
+ </li>
2080
+
2081
+ <li class="covered" data-hits="1" data-linenumber="53">
2082
+ <span class="hits">1</span>
2083
+
2084
+ <code class="ruby"> group = parse_backreference_group($1)</code>
2085
+ </li>
2086
+
2087
+ <li class="never" data-hits="" data-linenumber="54">
2088
+
2089
+
2090
+ <code class="ruby"> when BackslashCharMap.keys.include?(regexp_string[@current_position])</code>
2091
+ </li>
2092
+
2093
+ <li class="covered" data-hits="14" data-linenumber="55">
2094
+ <span class="hits">14</span>
2095
+
2096
+ <code class="ruby"> group = CharGroup.new(</code>
2097
+ </li>
2098
+
2099
+ <li class="never" data-hits="" data-linenumber="56">
2100
+
2101
+
2102
+ <code class="ruby"> BackslashCharMap[regexp_string[@current_position]])</code>
2103
+ </li>
2104
+
2105
+ <li class="never" data-hits="" data-linenumber="57">
2106
+
2107
+
2108
+ <code class="ruby"> # TODO: There are also a bunch of multi-char matches to watch out for:</code>
2109
+ </li>
2110
+
2111
+ <li class="never" data-hits="" data-linenumber="58">
2112
+
2113
+
2114
+ <code class="ruby"> # http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals</code>
2115
+ </li>
2116
+
2117
+ <li class="never" data-hits="" data-linenumber="59">
2118
+
2119
+
2120
+ <code class="ruby"> else</code>
2121
+ </li>
2122
+
2123
+ <li class="covered" data-hits="2" data-linenumber="60">
2124
+ <span class="hits">2</span>
2125
+
2126
+ <code class="ruby"> group = parse_single_char_group( regexp_string[@current_position] )</code>
2127
+ </li>
2128
+
2129
+ <li class="never" data-hits="" data-linenumber="61">
2130
+
2131
+
2132
+ <code class="ruby"> # TODO: What about cases like \A, \z, \Z ?</code>
2133
+ </li>
2134
+
2135
+ <li class="covered" data-hits="36" data-linenumber="62">
2136
+ <span class="hits">36</span>
2137
+
2138
+ <code class="ruby"> end</code>
2139
+ </li>
2140
+
2141
+ <li class="covered" data-hits="36" data-linenumber="63">
2142
+ <span class="hits">36</span>
2143
+
2144
+ <code class="ruby"> group</code>
2145
+ </li>
2146
+
2147
+ <li class="never" data-hits="" data-linenumber="64">
2148
+
2149
+
2150
+ <code class="ruby"> end</code>
2151
+ </li>
2152
+
2153
+ <li class="never" data-hits="" data-linenumber="65">
2154
+
2155
+
2156
+ <code class="ruby"></code>
2157
+ </li>
2158
+
2159
+ <li class="covered" data-hits="1" data-linenumber="66">
2160
+ <span class="hits">1</span>
2161
+
2162
+ <code class="ruby"> def parse_repeater(group)</code>
2163
+ </li>
2164
+
2165
+ <li class="covered" data-hits="271" data-linenumber="67">
2166
+ <span class="hits">271</span>
2167
+
2168
+ <code class="ruby"> char = regexp_string[@current_position]</code>
2169
+ </li>
2170
+
2171
+ <li class="covered" data-hits="271" data-linenumber="68">
2172
+ <span class="hits">271</span>
2173
+
2174
+ <code class="ruby"> case char</code>
2175
+ </li>
2176
+
2177
+ <li class="never" data-hits="" data-linenumber="69">
2178
+
2179
+
2180
+ <code class="ruby"> when &#39;*&#39;</code>
2181
+ </li>
2182
+
2183
+ <li class="covered" data-hits="5" data-linenumber="70">
2184
+ <span class="hits">5</span>
2185
+
2186
+ <code class="ruby"> repeater = parse_star_repeater(group)</code>
2187
+ </li>
2188
+
2189
+ <li class="never" data-hits="" data-linenumber="71">
2190
+
2191
+
2192
+ <code class="ruby"> when &#39;+&#39;</code>
2193
+ </li>
2194
+
2195
+ <li class="covered" data-hits="4" data-linenumber="72">
2196
+ <span class="hits">4</span>
2197
+
2198
+ <code class="ruby"> repeater = parse_plus_repeater(group)</code>
2199
+ </li>
2200
+
2201
+ <li class="never" data-hits="" data-linenumber="73">
2202
+
2203
+
2204
+ <code class="ruby"> when &#39;?&#39;</code>
2205
+ </li>
2206
+
2207
+ <li class="covered" data-hits="11" data-linenumber="74">
2208
+ <span class="hits">11</span>
2209
+
2210
+ <code class="ruby"> repeater = parse_question_mark_repeater(group)</code>
2211
+ </li>
2212
+
2213
+ <li class="never" data-hits="" data-linenumber="75">
2214
+
2215
+
2216
+ <code class="ruby"> when &#39;{&#39;</code>
2217
+ </li>
2218
+
2219
+ <li class="covered" data-hits="4" data-linenumber="76">
2220
+ <span class="hits">4</span>
2221
+
2222
+ <code class="ruby"> repeater = parse_range_repeater(group)</code>
2223
+ </li>
2224
+
2225
+ <li class="never" data-hits="" data-linenumber="77">
2226
+
2227
+
2228
+ <code class="ruby"> else</code>
2229
+ </li>
2230
+
2231
+ <li class="covered" data-hits="247" data-linenumber="78">
2232
+ <span class="hits">247</span>
2233
+
2234
+ <code class="ruby"> repeater = parse_one_time_repeater(group)</code>
2235
+ </li>
2236
+
2237
+ <li class="never" data-hits="" data-linenumber="79">
2238
+
2239
+
2240
+ <code class="ruby"> end</code>
2241
+ </li>
2242
+
2243
+ <li class="covered" data-hits="271" data-linenumber="80">
2244
+ <span class="hits">271</span>
2245
+
2246
+ <code class="ruby"> repeater</code>
2247
+ </li>
2248
+
2249
+ <li class="never" data-hits="" data-linenumber="81">
2250
+
2251
+
2252
+ <code class="ruby"> end</code>
2253
+ </li>
2254
+
2255
+ <li class="never" data-hits="" data-linenumber="82">
2256
+
2257
+
2258
+ <code class="ruby"></code>
2259
+ </li>
2260
+
2261
+ <li class="covered" data-hits="1" data-linenumber="83">
2262
+ <span class="hits">1</span>
2263
+
2264
+ <code class="ruby"> def parse_multi_group</code>
2265
+ </li>
2266
+
2267
+ <li class="covered" data-hits="41" data-linenumber="84">
2268
+ <span class="hits">41</span>
2269
+
2270
+ <code class="ruby"> @current_position += 1</code>
2271
+ </li>
2272
+
2273
+ <li class="covered" data-hits="41" data-linenumber="85">
2274
+ <span class="hits">41</span>
2275
+
2276
+ <code class="ruby"> @num_groups += 1</code>
2277
+ </li>
2278
+
2279
+ <li class="covered" data-hits="41" data-linenumber="86">
2280
+ <span class="hits">41</span>
2281
+
2282
+ <code class="ruby"> group_id = nil # init</code>
2283
+ </li>
2284
+
2285
+ <li class="covered" data-hits="41" data-linenumber="87">
2286
+ <span class="hits">41</span>
2287
+
2288
+ <code class="ruby"> rest_of_string.match(/\A(\?)?(:|!|=|&lt;(!|=|[^!=][^&gt;]*))?/) do |match|</code>
2289
+ </li>
2290
+
2291
+ <li class="never" data-hits="" data-linenumber="88">
2292
+
2293
+
2294
+ <code class="ruby"> case</code>
2295
+ </li>
2296
+
2297
+ <li class="never" data-hits="" data-linenumber="89">
2298
+
2299
+
2300
+ <code class="ruby"> when match[1].nil? # e.g. /(normal)/</code>
2301
+ </li>
2302
+
2303
+ <li class="covered" data-hits="38" data-linenumber="90">
2304
+ <span class="hits">38</span>
2305
+
2306
+ <code class="ruby"> group_id = @num_groups.to_s</code>
2307
+ </li>
2308
+
2309
+ <li class="never" data-hits="" data-linenumber="91">
2310
+
2311
+
2312
+ <code class="ruby"> when match[2] == &#39;:&#39; # e.g. /(?:nocapture)/</code>
2313
+ </li>
2314
+
2315
+ <li class="covered" data-hits="1" data-linenumber="92">
2316
+ <span class="hits">1</span>
2317
+
2318
+ <code class="ruby"> @current_position += 2</code>
2319
+ </li>
2320
+
2321
+ <li class="covered" data-hits="1" data-linenumber="93">
2322
+ <span class="hits">1</span>
2323
+
2324
+ <code class="ruby"> group_id = nil</code>
2325
+ </li>
2326
+
2327
+ <li class="never" data-hits="" data-linenumber="94">
2328
+
2329
+
2330
+ <code class="ruby"> when %w(! =).include?(match[2]) # e.g. /(?=lookahead)/, /(?!neglookahead)/</code>
2331
+ </li>
2332
+
2333
+ <li class="never" data-hits="" data-linenumber="95">
2334
+
2335
+
2336
+ <code class="ruby"> # TODO: Raise exception</code>
2337
+ </li>
2338
+
2339
+ <li class="never" data-hits="" data-linenumber="96">
2340
+
2341
+
2342
+ <code class="ruby"> when %w(! =).include?(match[3]) # e.g. /(?&lt;=lookbehind)/, /(?&lt;!neglookbehind)/</code>
2343
+ </li>
2344
+
2345
+ <li class="never" data-hits="" data-linenumber="97">
2346
+
2347
+
2348
+ <code class="ruby"> # TODO: Raise exception</code>
2349
+ </li>
2350
+
2351
+ <li class="never" data-hits="" data-linenumber="98">
2352
+
2353
+
2354
+ <code class="ruby"> else # e.g. /(?&lt;name&gt;namedgroup)/</code>
2355
+ </li>
2356
+
2357
+ <li class="covered" data-hits="2" data-linenumber="99">
2358
+ <span class="hits">2</span>
2359
+
2360
+ <code class="ruby"> @current_position += (match[3].length + 3)</code>
2361
+ </li>
2362
+
2363
+ <li class="covered" data-hits="2" data-linenumber="100">
2364
+ <span class="hits">2</span>
2365
+
2366
+ <code class="ruby"> group_id = match[3]</code>
2367
+ </li>
2368
+
2369
+ <li class="covered" data-hits="41" data-linenumber="101">
2370
+ <span class="hits">41</span>
2371
+
2372
+ <code class="ruby"> end</code>
2373
+ </li>
2374
+
2375
+ <li class="never" data-hits="" data-linenumber="102">
2376
+
2377
+
2378
+ <code class="ruby"> end</code>
2379
+ </li>
2380
+
2381
+ <li class="covered" data-hits="41" data-linenumber="103">
2382
+ <span class="hits">41</span>
2383
+
2384
+ <code class="ruby"> groups = parse</code>
2385
+ </li>
2386
+
2387
+ <li class="covered" data-hits="41" data-linenumber="104">
2388
+ <span class="hits">41</span>
2389
+
2390
+ <code class="ruby"> MultiGroup.new(groups, group_id)</code>
2391
+ </li>
2392
+
2393
+ <li class="never" data-hits="" data-linenumber="105">
2394
+
2395
+
2396
+ <code class="ruby"> end</code>
2397
+ </li>
2398
+
2399
+ <li class="never" data-hits="" data-linenumber="106">
2400
+
2401
+
2402
+ <code class="ruby"></code>
2403
+ </li>
2404
+
2405
+ <li class="covered" data-hits="1" data-linenumber="107">
2406
+ <span class="hits">1</span>
2407
+
2408
+ <code class="ruby"> def parse_multi_end_group</code>
2409
+ </li>
2410
+
2411
+ <li class="covered" data-hits="41" data-linenumber="108">
2412
+ <span class="hits">41</span>
2413
+
2414
+ <code class="ruby"> MultiGroupEnd.new</code>
2415
+ </li>
2416
+
2417
+ <li class="never" data-hits="" data-linenumber="109">
2418
+
2419
+
2420
+ <code class="ruby"> end</code>
2421
+ </li>
2422
+
2423
+ <li class="never" data-hits="" data-linenumber="110">
2424
+
2425
+
2426
+ <code class="ruby"></code>
2427
+ </li>
2428
+
2429
+ <li class="covered" data-hits="1" data-linenumber="111">
2430
+ <span class="hits">1</span>
2431
+
2432
+ <code class="ruby"> def parse_char_group</code>
2433
+ </li>
2434
+
2435
+ <li class="covered" data-hits="14" data-linenumber="112">
2436
+ <span class="hits">14</span>
2437
+
2438
+ <code class="ruby"> chars = []</code>
2439
+ </li>
2440
+
2441
+ <li class="covered" data-hits="14" data-linenumber="113">
2442
+ <span class="hits">14</span>
2443
+
2444
+ <code class="ruby"> @current_position += 1</code>
2445
+ </li>
2446
+
2447
+ <li class="covered" data-hits="14" data-linenumber="114">
2448
+ <span class="hits">14</span>
2449
+
2450
+ <code class="ruby"> if regexp_string[@current_position] == &#39;]&#39;</code>
2451
+ </li>
2452
+
2453
+ <li class="never" data-hits="" data-linenumber="115">
2454
+
2455
+
2456
+ <code class="ruby"> # Beware of the sneaky edge case:</code>
2457
+ </li>
2458
+
2459
+ <li class="never" data-hits="" data-linenumber="116">
2460
+
2461
+
2462
+ <code class="ruby"> # /[]]/ (match &quot;]&quot;)</code>
2463
+ </li>
2464
+
2465
+ <li class="covered" data-hits="1" data-linenumber="117">
2466
+ <span class="hits">1</span>
2467
+
2468
+ <code class="ruby"> chars &lt;&lt; &#39;]&#39;</code>
2469
+ </li>
2470
+
2471
+ <li class="covered" data-hits="1" data-linenumber="118">
2472
+ <span class="hits">1</span>
2473
+
2474
+ <code class="ruby"> @current_position += 1</code>
2475
+ </li>
2476
+
2477
+ <li class="never" data-hits="" data-linenumber="119">
2478
+
2479
+
2480
+ <code class="ruby"> end</code>
2481
+ </li>
2482
+
2483
+ <li class="never" data-hits="" data-linenumber="120">
2484
+
2485
+
2486
+ <code class="ruby"> until regexp_string[@current_position] == &#39;]&#39; \</code>
2487
+ </li>
2488
+
2489
+ <li class="covered" data-hits="14" data-linenumber="121">
2490
+ <span class="hits">14</span>
2491
+
2492
+ <code class="ruby"> &amp;&amp; !regexp_string[0..@current_position-1].match(/[^\\](\\{2})*\\\z/)</code>
2493
+ </li>
2494
+
2495
+ <li class="never" data-hits="" data-linenumber="122">
2496
+
2497
+
2498
+ <code class="ruby"> # Beware of having an ODD number of &quot;\&quot; before the &quot;]&quot;, e.g.</code>
2499
+ </li>
2500
+
2501
+ <li class="never" data-hits="" data-linenumber="123">
2502
+
2503
+
2504
+ <code class="ruby"> # /[\]]/ (match &quot;]&quot;)</code>
2505
+ </li>
2506
+
2507
+ <li class="never" data-hits="" data-linenumber="124">
2508
+
2509
+
2510
+ <code class="ruby"> # /[\\]/ (match &quot;\&quot;)</code>
2511
+ </li>
2512
+
2513
+ <li class="never" data-hits="" data-linenumber="125">
2514
+
2515
+
2516
+ <code class="ruby"> # /[\\\]]/ (match &quot;\&quot; or &quot;]&quot;)</code>
2517
+ </li>
2518
+
2519
+ <li class="covered" data-hits="41" data-linenumber="126">
2520
+ <span class="hits">41</span>
2521
+
2522
+ <code class="ruby"> chars &lt;&lt; regexp_string[@current_position]</code>
2523
+ </li>
2524
+
2525
+ <li class="covered" data-hits="41" data-linenumber="127">
2526
+ <span class="hits">41</span>
2527
+
2528
+ <code class="ruby"> @current_position += 1</code>
2529
+ </li>
2530
+
2531
+ <li class="never" data-hits="" data-linenumber="128">
2532
+
2533
+
2534
+ <code class="ruby"> end</code>
2535
+ </li>
2536
+
2537
+ <li class="covered" data-hits="14" data-linenumber="129">
2538
+ <span class="hits">14</span>
2539
+
2540
+ <code class="ruby"> CharGroup.new(chars)</code>
2541
+ </li>
2542
+
2543
+ <li class="never" data-hits="" data-linenumber="130">
2544
+
2545
+
2546
+ <code class="ruby"> end</code>
2547
+ </li>
2548
+
2549
+ <li class="never" data-hits="" data-linenumber="131">
2550
+
2551
+
2552
+ <code class="ruby"></code>
2553
+ </li>
2554
+
2555
+ <li class="covered" data-hits="1" data-linenumber="132">
2556
+ <span class="hits">1</span>
2557
+
2558
+ <code class="ruby"> def parse_dot_group</code>
2559
+ </li>
2560
+
2561
+ <li class="covered" data-hits="1" data-linenumber="133">
2562
+ <span class="hits">1</span>
2563
+
2564
+ <code class="ruby"> DotGroup.new</code>
2565
+ </li>
2566
+
2567
+ <li class="never" data-hits="" data-linenumber="134">
2568
+
2569
+
2570
+ <code class="ruby"> end</code>
2571
+ </li>
2572
+
2573
+ <li class="never" data-hits="" data-linenumber="135">
2574
+
2575
+
2576
+ <code class="ruby"></code>
2577
+ </li>
2578
+
2579
+ <li class="covered" data-hits="1" data-linenumber="136">
2580
+ <span class="hits">1</span>
2581
+
2582
+ <code class="ruby"> def parse_or_group(left_repeaters)</code>
2583
+ </li>
2584
+
2585
+ <li class="covered" data-hits="6" data-linenumber="137">
2586
+ <span class="hits">6</span>
2587
+
2588
+ <code class="ruby"> @current_position += 1</code>
2589
+ </li>
2590
+
2591
+ <li class="covered" data-hits="6" data-linenumber="138">
2592
+ <span class="hits">6</span>
2593
+
2594
+ <code class="ruby"> right_repeaters = parse</code>
2595
+ </li>
2596
+
2597
+ <li class="covered" data-hits="6" data-linenumber="139">
2598
+ <span class="hits">6</span>
2599
+
2600
+ <code class="ruby"> OrGroup.new(left_repeaters, right_repeaters)</code>
2601
+ </li>
2602
+
2603
+ <li class="never" data-hits="" data-linenumber="140">
2604
+
2605
+
2606
+ <code class="ruby"> end</code>
2607
+ </li>
2608
+
2609
+ <li class="never" data-hits="" data-linenumber="141">
2610
+
2611
+
2612
+ <code class="ruby"></code>
2613
+ </li>
2614
+
2615
+ <li class="never" data-hits="" data-linenumber="142">
2616
+
2617
+
2618
+ <code class="ruby"></code>
2619
+ </li>
2620
+
2621
+ <li class="covered" data-hits="1" data-linenumber="143">
2622
+ <span class="hits">1</span>
2623
+
2624
+ <code class="ruby"> def parse_single_char_group(char)</code>
2625
+ </li>
2626
+
2627
+ <li class="covered" data-hits="175" data-linenumber="144">
2628
+ <span class="hits">175</span>
2629
+
2630
+ <code class="ruby"> SingleCharGroup.new(char)</code>
2631
+ </li>
2632
+
2633
+ <li class="never" data-hits="" data-linenumber="145">
2634
+
2635
+
2636
+ <code class="ruby"> end</code>
2637
+ </li>
2638
+
2639
+ <li class="never" data-hits="" data-linenumber="146">
2640
+
2641
+
2642
+ <code class="ruby"></code>
2643
+ </li>
2644
+
2645
+ <li class="covered" data-hits="1" data-linenumber="147">
2646
+ <span class="hits">1</span>
2647
+
2648
+ <code class="ruby"> def parse_backreference_group(match)</code>
2649
+ </li>
2650
+
2651
+ <li class="covered" data-hits="20" data-linenumber="148">
2652
+ <span class="hits">20</span>
2653
+
2654
+ <code class="ruby"> BackReferenceGroup.new(match)</code>
2655
+ </li>
2656
+
2657
+ <li class="never" data-hits="" data-linenumber="149">
2658
+
2659
+
2660
+ <code class="ruby"> end</code>
2661
+ </li>
2662
+
2663
+ <li class="never" data-hits="" data-linenumber="150">
2664
+
2665
+
2666
+ <code class="ruby"></code>
2667
+ </li>
2668
+
2669
+ <li class="covered" data-hits="1" data-linenumber="151">
2670
+ <span class="hits">1</span>
2671
+
2672
+ <code class="ruby"> def parse_star_repeater(group)</code>
2673
+ </li>
2674
+
2675
+ <li class="covered" data-hits="5" data-linenumber="152">
2676
+ <span class="hits">5</span>
2677
+
2678
+ <code class="ruby"> @current_position += 1</code>
2679
+ </li>
2680
+
2681
+ <li class="covered" data-hits="5" data-linenumber="153">
2682
+ <span class="hits">5</span>
2683
+
2684
+ <code class="ruby"> StarRepeater.new(group)</code>
2685
+ </li>
2686
+
2687
+ <li class="never" data-hits="" data-linenumber="154">
2688
+
2689
+
2690
+ <code class="ruby"> end</code>
2691
+ </li>
2692
+
2693
+ <li class="never" data-hits="" data-linenumber="155">
2694
+
2695
+
2696
+ <code class="ruby"></code>
2697
+ </li>
2698
+
2699
+ <li class="covered" data-hits="1" data-linenumber="156">
2700
+ <span class="hits">1</span>
2701
+
2702
+ <code class="ruby"> def parse_plus_repeater(group)</code>
2703
+ </li>
2704
+
2705
+ <li class="covered" data-hits="4" data-linenumber="157">
2706
+ <span class="hits">4</span>
2707
+
2708
+ <code class="ruby"> @current_position += 1</code>
2709
+ </li>
2710
+
2711
+ <li class="covered" data-hits="4" data-linenumber="158">
2712
+ <span class="hits">4</span>
2713
+
2714
+ <code class="ruby"> PlusRepeater.new(group)</code>
2715
+ </li>
2716
+
2717
+ <li class="never" data-hits="" data-linenumber="159">
2718
+
2719
+
2720
+ <code class="ruby"> end</code>
2721
+ </li>
2722
+
2723
+ <li class="never" data-hits="" data-linenumber="160">
2724
+
2725
+
2726
+ <code class="ruby"></code>
2727
+ </li>
2728
+
2729
+ <li class="covered" data-hits="1" data-linenumber="161">
2730
+ <span class="hits">1</span>
2731
+
2732
+ <code class="ruby"> def parse_question_mark_repeater(group)</code>
2733
+ </li>
2734
+
2735
+ <li class="covered" data-hits="11" data-linenumber="162">
2736
+ <span class="hits">11</span>
2737
+
2738
+ <code class="ruby"> @current_position += 1</code>
2739
+ </li>
2740
+
2741
+ <li class="covered" data-hits="11" data-linenumber="163">
2742
+ <span class="hits">11</span>
2743
+
2744
+ <code class="ruby"> QuestionMarkRepeater.new(group)</code>
2745
+ </li>
2746
+
2747
+ <li class="never" data-hits="" data-linenumber="164">
2748
+
2749
+
2750
+ <code class="ruby"> end</code>
2751
+ </li>
2752
+
2753
+ <li class="never" data-hits="" data-linenumber="165">
2754
+
2755
+
2756
+ <code class="ruby"></code>
2757
+ </li>
2758
+
2759
+ <li class="covered" data-hits="1" data-linenumber="166">
2760
+ <span class="hits">1</span>
2761
+
2762
+ <code class="ruby"> def parse_range_repeater(group)</code>
2763
+ </li>
2764
+
2765
+ <li class="covered" data-hits="4" data-linenumber="167">
2766
+ <span class="hits">4</span>
2767
+
2768
+ <code class="ruby"> match = rest_of_string.match(/\A\{(\d+)(,)?(\d+)?\}/)</code>
2769
+ </li>
2770
+
2771
+ <li class="covered" data-hits="4" data-linenumber="168">
2772
+ <span class="hits">4</span>
2773
+
2774
+ <code class="ruby"> @current_position += match[0].size</code>
2775
+ </li>
2776
+
2777
+ <li class="covered" data-hits="4" data-linenumber="169">
2778
+ <span class="hits">4</span>
2779
+
2780
+ <code class="ruby"> min = match[1].to_i if match[1]</code>
2781
+ </li>
2782
+
2783
+ <li class="covered" data-hits="4" data-linenumber="170">
2784
+ <span class="hits">4</span>
2785
+
2786
+ <code class="ruby"> has_comma = !match[2].nil?</code>
2787
+ </li>
2788
+
2789
+ <li class="covered" data-hits="4" data-linenumber="171">
2790
+ <span class="hits">4</span>
2791
+
2792
+ <code class="ruby"> max = match[3].to_i if match[3]</code>
2793
+ </li>
2794
+
2795
+ <li class="covered" data-hits="4" data-linenumber="172">
2796
+ <span class="hits">4</span>
2797
+
2798
+ <code class="ruby"> RangeRepeater.new(group, min, has_comma, max)</code>
2799
+ </li>
2800
+
2801
+ <li class="never" data-hits="" data-linenumber="173">
2802
+
2803
+
2804
+ <code class="ruby"> end</code>
2805
+ </li>
2806
+
2807
+ <li class="never" data-hits="" data-linenumber="174">
2808
+
2809
+
2810
+ <code class="ruby"></code>
2811
+ </li>
2812
+
2813
+ <li class="covered" data-hits="1" data-linenumber="175">
2814
+ <span class="hits">1</span>
2815
+
2816
+ <code class="ruby"> def parse_one_time_repeater(group)</code>
2817
+ </li>
2818
+
2819
+ <li class="covered" data-hits="247" data-linenumber="176">
2820
+ <span class="hits">247</span>
2821
+
2822
+ <code class="ruby"> OneTimeRepeater.new(group)</code>
2823
+ </li>
2824
+
2825
+ <li class="never" data-hits="" data-linenumber="177">
2826
+
2827
+
2828
+ <code class="ruby"> end</code>
2829
+ </li>
2830
+
2831
+ <li class="never" data-hits="" data-linenumber="178">
2832
+
2833
+
2834
+ <code class="ruby"></code>
2835
+ </li>
2836
+
2837
+ <li class="covered" data-hits="1" data-linenumber="179">
2838
+ <span class="hits">1</span>
2839
+
2840
+ <code class="ruby"> def rest_of_string</code>
2841
+ </li>
2842
+
2843
+ <li class="covered" data-hits="98" data-linenumber="180">
2844
+ <span class="hits">98</span>
2845
+
2846
+ <code class="ruby"> regexp_string[@current_position..-1]</code>
2847
+ </li>
2848
+
2849
+ <li class="never" data-hits="" data-linenumber="181">
2850
+
2851
+
2852
+ <code class="ruby"> end</code>
2853
+ </li>
2854
+
2855
+ <li class="never" data-hits="" data-linenumber="182">
2856
+
2857
+
2858
+ <code class="ruby"> end</code>
2859
+ </li>
2860
+
2861
+ <li class="never" data-hits="" data-linenumber="183">
2862
+
2863
+
2864
+ <code class="ruby">end</code>
2865
+ </li>
2866
+
2867
+ <li class="never" data-hits="" data-linenumber="184">
2868
+
2869
+
2870
+ <code class="ruby"></code>
2871
+ </li>
2872
+
2873
+ </ol>
2874
+ </pre>
2875
+ </div>
2876
+
2877
+ <div class="source_table" id="0dc204f32cb2876d2238a2aae7dea86ad7f9e679">
2878
+ <div class="header">
2879
+ <h3>lib/regexp-examples/regexp_extensions.rb</h3>
2880
+ <h4><span class="green">100.0 %</span> covered</h4>
2881
+ <div>
2882
+ <b>9</b> relevant lines.
2883
+ <span class="green"><b>9</b> lines covered</span> and
2884
+ <span class="red"><b>0</b> lines missed.</span>
2885
+ </div>
2886
+ </div>
2887
+
2888
+ <pre>
2889
+ <ol>
2890
+
2891
+ <li class="covered" data-hits="1" data-linenumber="1">
2892
+ <span class="hits">1</span>
2893
+
2894
+ <code class="ruby">class Regexp</code>
2895
+ </li>
2896
+
2897
+ <li class="covered" data-hits="1" data-linenumber="2">
2898
+ <span class="hits">1</span>
2899
+
2900
+ <code class="ruby"> module Examples</code>
2901
+ </li>
2902
+
2903
+ <li class="covered" data-hits="1" data-linenumber="3">
2904
+ <span class="hits">1</span>
2905
+
2906
+ <code class="ruby"> def examples</code>
2907
+ </li>
2908
+
2909
+ <li class="covered" data-hits="54" data-linenumber="4">
2910
+ <span class="hits">54</span>
2911
+
2912
+ <code class="ruby"> partial_examples =</code>
2913
+ </li>
2914
+
2915
+ <li class="never" data-hits="" data-linenumber="5">
2916
+
2917
+
2918
+ <code class="ruby"> RegexpExamples::Parser.new(source)</code>
2919
+ </li>
2920
+
2921
+ <li class="never" data-hits="" data-linenumber="6">
2922
+
2923
+
2924
+ <code class="ruby"> .parse</code>
2925
+ </li>
2926
+
2927
+ <li class="covered" data-hits="114" data-linenumber="7">
2928
+ <span class="hits">114</span>
2929
+
2930
+ <code class="ruby"> .map {|repeater| repeater.result}</code>
2931
+ </li>
2932
+
2933
+ <li class="covered" data-hits="54" data-linenumber="8">
2934
+ <span class="hits">54</span>
2935
+
2936
+ <code class="ruby"> full_examples = RegexpExamples::permutations_of_strings(partial_examples.dup, no_join: true)</code>
2937
+ </li>
2938
+
2939
+ <li class="covered" data-hits="54" data-linenumber="9">
2940
+ <span class="hits">54</span>
2941
+
2942
+ <code class="ruby"> full_examples_with_backrefs = \</code>
2943
+ </li>
2944
+
2945
+ <li class="never" data-hits="" data-linenumber="10">
2946
+
2947
+
2948
+ <code class="ruby"> RegexpExamples::BackReferenceReplacer.new.substitute_backreferences(full_examples)</code>
2949
+ </li>
2950
+
2951
+ <li class="covered" data-hits="54" data-linenumber="11">
2952
+ <span class="hits">54</span>
2953
+
2954
+ <code class="ruby"> full_examples_with_backrefs.map(&amp;:join)</code>
2955
+ </li>
2956
+
2957
+ <li class="never" data-hits="" data-linenumber="12">
2958
+
2959
+
2960
+ <code class="ruby"> end</code>
2961
+ </li>
2962
+
2963
+ <li class="never" data-hits="" data-linenumber="13">
2964
+
2965
+
2966
+ <code class="ruby"> end</code>
2967
+ </li>
2968
+
2969
+ <li class="covered" data-hits="1" data-linenumber="14">
2970
+ <span class="hits">1</span>
2971
+
2972
+ <code class="ruby"> include Examples</code>
2973
+ </li>
2974
+
2975
+ <li class="never" data-hits="" data-linenumber="15">
2976
+
2977
+
2978
+ <code class="ruby">end</code>
2979
+ </li>
2980
+
2981
+ <li class="never" data-hits="" data-linenumber="16">
2982
+
2983
+
2984
+ <code class="ruby"></code>
2985
+ </li>
2986
+
2987
+ </ol>
2988
+ </pre>
2989
+ </div>
2990
+
2991
+ <div class="source_table" id="430477f0c86b2d77a18fe51e32b818d48ab7e74b">
2992
+ <div class="header">
2993
+ <h3>lib/regexp-examples/repeaters.rb</h3>
2994
+ <h4><span class="green">100.0 %</span> covered</h4>
2995
+ <div>
2996
+ <b>43</b> relevant lines.
2997
+ <span class="green"><b>43</b> lines covered</span> and
2998
+ <span class="red"><b>0</b> lines missed.</span>
2999
+ </div>
3000
+ </div>
3001
+
3002
+ <pre>
3003
+ <ol>
3004
+
3005
+ <li class="covered" data-hits="1" data-linenumber="1">
3006
+ <span class="hits">1</span>
3007
+
3008
+ <code class="ruby">module RegexpExamples</code>
3009
+ </li>
3010
+
3011
+ <li class="covered" data-hits="1" data-linenumber="2">
3012
+ <span class="hits">1</span>
3013
+
3014
+ <code class="ruby"> class BaseRepeater</code>
3015
+ </li>
3016
+
3017
+ <li class="covered" data-hits="1" data-linenumber="3">
3018
+ <span class="hits">1</span>
3019
+
3020
+ <code class="ruby"> attr_reader :group</code>
3021
+ </li>
3022
+
3023
+ <li class="covered" data-hits="1" data-linenumber="4">
3024
+ <span class="hits">1</span>
3025
+
3026
+ <code class="ruby"> def initialize(group)</code>
3027
+ </li>
3028
+
3029
+ <li class="covered" data-hits="271" data-linenumber="5">
3030
+ <span class="hits">271</span>
3031
+
3032
+ <code class="ruby"> @group = group</code>
3033
+ </li>
3034
+
3035
+ <li class="never" data-hits="" data-linenumber="6">
3036
+
3037
+
3038
+ <code class="ruby"> end</code>
3039
+ </li>
3040
+
3041
+ <li class="never" data-hits="" data-linenumber="7">
3042
+
3043
+
3044
+ <code class="ruby"></code>
3045
+ </li>
3046
+
3047
+ <li class="covered" data-hits="1" data-linenumber="8">
3048
+ <span class="hits">1</span>
3049
+
3050
+ <code class="ruby"> def result(min_repeats, max_repeats)</code>
3051
+ </li>
3052
+
3053
+ <li class="covered" data-hits="271" data-linenumber="9">
3054
+ <span class="hits">271</span>
3055
+
3056
+ <code class="ruby"> group_results = @group.result[0 .. MaxGroupResults-1]</code>
3057
+ </li>
3058
+
3059
+ <li class="covered" data-hits="271" data-linenumber="10">
3060
+ <span class="hits">271</span>
3061
+
3062
+ <code class="ruby"> results = []</code>
3063
+ </li>
3064
+
3065
+ <li class="covered" data-hits="271" data-linenumber="11">
3066
+ <span class="hits">271</span>
3067
+
3068
+ <code class="ruby"> min_repeats.upto(max_repeats) do |repeats|</code>
3069
+ </li>
3070
+
3071
+ <li class="covered" data-hits="299" data-linenumber="12">
3072
+ <span class="hits">299</span>
3073
+
3074
+ <code class="ruby"> group_results.each do |group_result|</code>
3075
+ </li>
3076
+
3077
+ <li class="covered" data-hits="413" data-linenumber="13">
3078
+ <span class="hits">413</span>
3079
+
3080
+ <code class="ruby"> results &lt;&lt; group_result * repeats</code>
3081
+ </li>
3082
+
3083
+ <li class="never" data-hits="" data-linenumber="14">
3084
+
3085
+
3086
+ <code class="ruby"> end</code>
3087
+ </li>
3088
+
3089
+ <li class="never" data-hits="" data-linenumber="15">
3090
+
3091
+
3092
+ <code class="ruby"> end</code>
3093
+ </li>
3094
+
3095
+ <li class="covered" data-hits="271" data-linenumber="16">
3096
+ <span class="hits">271</span>
3097
+
3098
+ <code class="ruby"> results.uniq</code>
3099
+ </li>
3100
+
3101
+ <li class="never" data-hits="" data-linenumber="17">
3102
+
3103
+
3104
+ <code class="ruby"> end</code>
3105
+ </li>
3106
+
3107
+ <li class="never" data-hits="" data-linenumber="18">
3108
+
3109
+
3110
+ <code class="ruby"> end</code>
3111
+ </li>
3112
+
3113
+ <li class="never" data-hits="" data-linenumber="19">
3114
+
3115
+
3116
+ <code class="ruby"></code>
3117
+ </li>
3118
+
3119
+ <li class="covered" data-hits="1" data-linenumber="20">
3120
+ <span class="hits">1</span>
3121
+
3122
+ <code class="ruby"> class OneTimeRepeater &lt; BaseRepeater</code>
3123
+ </li>
3124
+
3125
+ <li class="covered" data-hits="1" data-linenumber="21">
3126
+ <span class="hits">1</span>
3127
+
3128
+ <code class="ruby"> def initialize(group)</code>
3129
+ </li>
3130
+
3131
+ <li class="covered" data-hits="247" data-linenumber="22">
3132
+ <span class="hits">247</span>
3133
+
3134
+ <code class="ruby"> super</code>
3135
+ </li>
3136
+
3137
+ <li class="never" data-hits="" data-linenumber="23">
3138
+
3139
+
3140
+ <code class="ruby"> end</code>
3141
+ </li>
3142
+
3143
+ <li class="never" data-hits="" data-linenumber="24">
3144
+
3145
+
3146
+ <code class="ruby"></code>
3147
+ </li>
3148
+
3149
+ <li class="covered" data-hits="1" data-linenumber="25">
3150
+ <span class="hits">1</span>
3151
+
3152
+ <code class="ruby"> def result</code>
3153
+ </li>
3154
+
3155
+ <li class="covered" data-hits="247" data-linenumber="26">
3156
+ <span class="hits">247</span>
3157
+
3158
+ <code class="ruby"> super(1, 1)</code>
3159
+ </li>
3160
+
3161
+ <li class="never" data-hits="" data-linenumber="27">
3162
+
3163
+
3164
+ <code class="ruby"> end</code>
3165
+ </li>
3166
+
3167
+ <li class="never" data-hits="" data-linenumber="28">
3168
+
3169
+
3170
+ <code class="ruby"> end</code>
3171
+ </li>
3172
+
3173
+ <li class="never" data-hits="" data-linenumber="29">
3174
+
3175
+
3176
+ <code class="ruby"></code>
3177
+ </li>
3178
+
3179
+ <li class="covered" data-hits="1" data-linenumber="30">
3180
+ <span class="hits">1</span>
3181
+
3182
+ <code class="ruby"> class StarRepeater &lt; BaseRepeater</code>
3183
+ </li>
3184
+
3185
+ <li class="covered" data-hits="1" data-linenumber="31">
3186
+ <span class="hits">1</span>
3187
+
3188
+ <code class="ruby"> def initialize(group)</code>
3189
+ </li>
3190
+
3191
+ <li class="covered" data-hits="5" data-linenumber="32">
3192
+ <span class="hits">5</span>
3193
+
3194
+ <code class="ruby"> super</code>
3195
+ </li>
3196
+
3197
+ <li class="never" data-hits="" data-linenumber="33">
3198
+
3199
+
3200
+ <code class="ruby"> end</code>
3201
+ </li>
3202
+
3203
+ <li class="never" data-hits="" data-linenumber="34">
3204
+
3205
+
3206
+ <code class="ruby"></code>
3207
+ </li>
3208
+
3209
+ <li class="covered" data-hits="1" data-linenumber="35">
3210
+ <span class="hits">1</span>
3211
+
3212
+ <code class="ruby"> def result</code>
3213
+ </li>
3214
+
3215
+ <li class="covered" data-hits="5" data-linenumber="36">
3216
+ <span class="hits">5</span>
3217
+
3218
+ <code class="ruby"> super(0, TIMES)</code>
3219
+ </li>
3220
+
3221
+ <li class="never" data-hits="" data-linenumber="37">
3222
+
3223
+
3224
+ <code class="ruby"> end</code>
3225
+ </li>
3226
+
3227
+ <li class="never" data-hits="" data-linenumber="38">
3228
+
3229
+
3230
+ <code class="ruby"> end</code>
3231
+ </li>
3232
+
3233
+ <li class="never" data-hits="" data-linenumber="39">
3234
+
3235
+
3236
+ <code class="ruby"></code>
3237
+ </li>
3238
+
3239
+ <li class="covered" data-hits="1" data-linenumber="40">
3240
+ <span class="hits">1</span>
3241
+
3242
+ <code class="ruby"> class PlusRepeater &lt; BaseRepeater</code>
3243
+ </li>
3244
+
3245
+ <li class="covered" data-hits="1" data-linenumber="41">
3246
+ <span class="hits">1</span>
3247
+
3248
+ <code class="ruby"> def initialize(group)</code>
3249
+ </li>
3250
+
3251
+ <li class="covered" data-hits="4" data-linenumber="42">
3252
+ <span class="hits">4</span>
3253
+
3254
+ <code class="ruby"> super</code>
3255
+ </li>
3256
+
3257
+ <li class="never" data-hits="" data-linenumber="43">
3258
+
3259
+
3260
+ <code class="ruby"> end</code>
3261
+ </li>
3262
+
3263
+ <li class="never" data-hits="" data-linenumber="44">
3264
+
3265
+
3266
+ <code class="ruby"></code>
3267
+ </li>
3268
+
3269
+ <li class="covered" data-hits="1" data-linenumber="45">
3270
+ <span class="hits">1</span>
3271
+
3272
+ <code class="ruby"> def result</code>
3273
+ </li>
3274
+
3275
+ <li class="covered" data-hits="4" data-linenumber="46">
3276
+ <span class="hits">4</span>
3277
+
3278
+ <code class="ruby"> super(1, TIMES)</code>
3279
+ </li>
3280
+
3281
+ <li class="never" data-hits="" data-linenumber="47">
3282
+
3283
+
3284
+ <code class="ruby"> end</code>
3285
+ </li>
3286
+
3287
+ <li class="never" data-hits="" data-linenumber="48">
3288
+
3289
+
3290
+ <code class="ruby"> end</code>
3291
+ </li>
3292
+
3293
+ <li class="never" data-hits="" data-linenumber="49">
3294
+
3295
+
3296
+ <code class="ruby"></code>
3297
+ </li>
3298
+
3299
+ <li class="covered" data-hits="1" data-linenumber="50">
3300
+ <span class="hits">1</span>
3301
+
3302
+ <code class="ruby"> class QuestionMarkRepeater &lt; BaseRepeater</code>
3303
+ </li>
3304
+
3305
+ <li class="covered" data-hits="1" data-linenumber="51">
3306
+ <span class="hits">1</span>
3307
+
3308
+ <code class="ruby"> def initialize(group)</code>
3309
+ </li>
3310
+
3311
+ <li class="covered" data-hits="11" data-linenumber="52">
3312
+ <span class="hits">11</span>
3313
+
3314
+ <code class="ruby"> super</code>
3315
+ </li>
3316
+
3317
+ <li class="never" data-hits="" data-linenumber="53">
3318
+
3319
+
3320
+ <code class="ruby"> end</code>
3321
+ </li>
3322
+
3323
+ <li class="never" data-hits="" data-linenumber="54">
3324
+
3325
+
3326
+ <code class="ruby"></code>
3327
+ </li>
3328
+
3329
+ <li class="covered" data-hits="1" data-linenumber="55">
3330
+ <span class="hits">1</span>
3331
+
3332
+ <code class="ruby"> def result</code>
3333
+ </li>
3334
+
3335
+ <li class="covered" data-hits="11" data-linenumber="56">
3336
+ <span class="hits">11</span>
3337
+
3338
+ <code class="ruby"> super(0, 1)</code>
3339
+ </li>
3340
+
3341
+ <li class="never" data-hits="" data-linenumber="57">
3342
+
3343
+
3344
+ <code class="ruby"> end</code>
3345
+ </li>
3346
+
3347
+ <li class="never" data-hits="" data-linenumber="58">
3348
+
3349
+
3350
+ <code class="ruby"> end</code>
3351
+ </li>
3352
+
3353
+ <li class="never" data-hits="" data-linenumber="59">
3354
+
3355
+
3356
+ <code class="ruby"></code>
3357
+ </li>
3358
+
3359
+ <li class="covered" data-hits="1" data-linenumber="60">
3360
+ <span class="hits">1</span>
3361
+
3362
+ <code class="ruby"> class RangeRepeater &lt; BaseRepeater</code>
3363
+ </li>
3364
+
3365
+ <li class="covered" data-hits="1" data-linenumber="61">
3366
+ <span class="hits">1</span>
3367
+
3368
+ <code class="ruby"> def initialize(group, min, has_comma, max)</code>
3369
+ </li>
3370
+
3371
+ <li class="covered" data-hits="4" data-linenumber="62">
3372
+ <span class="hits">4</span>
3373
+
3374
+ <code class="ruby"> super(group)</code>
3375
+ </li>
3376
+
3377
+ <li class="covered" data-hits="4" data-linenumber="63">
3378
+ <span class="hits">4</span>
3379
+
3380
+ <code class="ruby"> @min = min</code>
3381
+ </li>
3382
+
3383
+ <li class="covered" data-hits="4" data-linenumber="64">
3384
+ <span class="hits">4</span>
3385
+
3386
+ <code class="ruby"> if max</code>
3387
+ </li>
3388
+
3389
+ <li class="covered" data-hits="1" data-linenumber="65">
3390
+ <span class="hits">1</span>
3391
+
3392
+ <code class="ruby"> @max = max</code>
3393
+ </li>
3394
+
3395
+ <li class="covered" data-hits="3" data-linenumber="66">
3396
+ <span class="hits">3</span>
3397
+
3398
+ <code class="ruby"> elsif has_comma</code>
3399
+ </li>
3400
+
3401
+ <li class="covered" data-hits="1" data-linenumber="67">
3402
+ <span class="hits">1</span>
3403
+
3404
+ <code class="ruby"> @max = min + TIMES</code>
3405
+ </li>
3406
+
3407
+ <li class="never" data-hits="" data-linenumber="68">
3408
+
3409
+
3410
+ <code class="ruby"> else</code>
3411
+ </li>
3412
+
3413
+ <li class="covered" data-hits="2" data-linenumber="69">
3414
+ <span class="hits">2</span>
3415
+
3416
+ <code class="ruby"> @max = min</code>
3417
+ </li>
3418
+
3419
+ <li class="never" data-hits="" data-linenumber="70">
3420
+
3421
+
3422
+ <code class="ruby"> end</code>
3423
+ </li>
3424
+
3425
+ <li class="never" data-hits="" data-linenumber="71">
3426
+
3427
+
3428
+ <code class="ruby"> end</code>
3429
+ </li>
3430
+
3431
+ <li class="never" data-hits="" data-linenumber="72">
3432
+
3433
+
3434
+ <code class="ruby"></code>
3435
+ </li>
3436
+
3437
+ <li class="covered" data-hits="1" data-linenumber="73">
3438
+ <span class="hits">1</span>
3439
+
3440
+ <code class="ruby"> def result</code>
3441
+ </li>
3442
+
3443
+ <li class="covered" data-hits="4" data-linenumber="74">
3444
+ <span class="hits">4</span>
3445
+
3446
+ <code class="ruby"> super(@min, @max)</code>
3447
+ </li>
3448
+
3449
+ <li class="never" data-hits="" data-linenumber="75">
3450
+
3451
+
3452
+ <code class="ruby"> end</code>
3453
+ </li>
3454
+
3455
+ <li class="never" data-hits="" data-linenumber="76">
3456
+
3457
+
3458
+ <code class="ruby"> end</code>
3459
+ </li>
3460
+
3461
+ <li class="never" data-hits="" data-linenumber="77">
3462
+
3463
+
3464
+ <code class="ruby">end</code>
3465
+ </li>
3466
+
3467
+ <li class="never" data-hits="" data-linenumber="78">
3468
+
3469
+
3470
+ <code class="ruby"></code>
3471
+ </li>
3472
+
3473
+ </ol>
3474
+ </pre>
3475
+ </div>
3476
+
3477
+ <div class="source_table" id="73ece59f571550448cda013ec330081f40e82321">
3478
+ <div class="header">
3479
+ <h3>spec/regexp-examples_spec.rb</h3>
3480
+ <h4><span class="green">100.0 %</span> covered</h4>
3481
+ <div>
3482
+ <b>22</b> relevant lines.
3483
+ <span class="green"><b>22</b> lines covered</span> and
3484
+ <span class="red"><b>0</b> lines missed.</span>
3485
+ </div>
3486
+ </div>
3487
+
3488
+ <pre>
3489
+ <ol>
3490
+
3491
+ <li class="covered" data-hits="1" data-linenumber="1">
3492
+ <span class="hits">1</span>
3493
+
3494
+ <code class="ruby">RSpec.describe Regexp, &quot;#examples&quot; do</code>
3495
+ </li>
3496
+
3497
+ <li class="covered" data-hits="1" data-linenumber="2">
3498
+ <span class="hits">1</span>
3499
+
3500
+ <code class="ruby"> def self.examples_exist_and_match(*regexps)</code>
3501
+ </li>
3502
+
3503
+ <li class="covered" data-hits="7" data-linenumber="3">
3504
+ <span class="hits">7</span>
3505
+
3506
+ <code class="ruby"> regexps.each do |regexp|</code>
3507
+ </li>
3508
+
3509
+ <li class="covered" data-hits="54" data-linenumber="4">
3510
+ <span class="hits">54</span>
3511
+
3512
+ <code class="ruby"> it do</code>
3513
+ </li>
3514
+
3515
+ <li class="covered" data-hits="54" data-linenumber="5">
3516
+ <span class="hits">54</span>
3517
+
3518
+ <code class="ruby"> regexp_examples = regexp.examples</code>
3519
+ </li>
3520
+
3521
+ <li class="covered" data-hits="54" data-linenumber="6">
3522
+ <span class="hits">54</span>
3523
+
3524
+ <code class="ruby"> expect(regexp_examples).not_to be_empty</code>
3525
+ </li>
3526
+
3527
+ <li class="covered" data-hits="202" data-linenumber="7">
3528
+ <span class="hits">202</span>
3529
+
3530
+ <code class="ruby"> regexp_examples.each { |example| expect(example).to match(/\A(?:#{regexp.source})\z/) }</code>
3531
+ </li>
3532
+
3533
+ <li class="never" data-hits="" data-linenumber="8">
3534
+
3535
+
3536
+ <code class="ruby"> # Note: /\A...\z/ is used, to prevent misleading examples from passing the test.</code>
3537
+ </li>
3538
+
3539
+ <li class="never" data-hits="" data-linenumber="9">
3540
+
3541
+
3542
+ <code class="ruby"> # For example, we don&#39;t want things like:</code>
3543
+ </li>
3544
+
3545
+ <li class="never" data-hits="" data-linenumber="10">
3546
+
3547
+
3548
+ <code class="ruby"> # /a*/.examples to include &quot;xyz&quot;</code>
3549
+ </li>
3550
+
3551
+ <li class="never" data-hits="" data-linenumber="11">
3552
+
3553
+
3554
+ <code class="ruby"> # /a|b/.examples to include &quot;bad&quot;</code>
3555
+ </li>
3556
+
3557
+ <li class="never" data-hits="" data-linenumber="12">
3558
+
3559
+
3560
+ <code class="ruby"> end</code>
3561
+ </li>
3562
+
3563
+ <li class="never" data-hits="" data-linenumber="13">
3564
+
3565
+
3566
+ <code class="ruby"> end</code>
3567
+ </li>
3568
+
3569
+ <li class="never" data-hits="" data-linenumber="14">
3570
+
3571
+
3572
+ <code class="ruby"> end</code>
3573
+ </li>
3574
+
3575
+ <li class="never" data-hits="" data-linenumber="15">
3576
+
3577
+
3578
+ <code class="ruby"></code>
3579
+ </li>
3580
+
3581
+ <li class="covered" data-hits="1" data-linenumber="16">
3582
+ <span class="hits">1</span>
3583
+
3584
+ <code class="ruby"> context &#39;returns matching strings&#39; do</code>
3585
+ </li>
3586
+
3587
+ <li class="covered" data-hits="1" data-linenumber="17">
3588
+ <span class="hits">1</span>
3589
+
3590
+ <code class="ruby"> context &quot;for basic repeaters&quot; do</code>
3591
+ </li>
3592
+
3593
+ <li class="covered" data-hits="1" data-linenumber="18">
3594
+ <span class="hits">1</span>
3595
+
3596
+ <code class="ruby"> examples_exist_and_match(</code>
3597
+ </li>
3598
+
3599
+ <li class="never" data-hits="" data-linenumber="19">
3600
+
3601
+
3602
+ <code class="ruby"> /a/,</code>
3603
+ </li>
3604
+
3605
+ <li class="never" data-hits="" data-linenumber="20">
3606
+
3607
+
3608
+ <code class="ruby"> /a*/,</code>
3609
+ </li>
3610
+
3611
+ <li class="never" data-hits="" data-linenumber="21">
3612
+
3613
+
3614
+ <code class="ruby"> /a+/,</code>
3615
+ </li>
3616
+
3617
+ <li class="never" data-hits="" data-linenumber="22">
3618
+
3619
+
3620
+ <code class="ruby"> /a?/,</code>
3621
+ </li>
3622
+
3623
+ <li class="never" data-hits="" data-linenumber="23">
3624
+
3625
+
3626
+ <code class="ruby"> /a{1}/,</code>
3627
+ </li>
3628
+
3629
+ <li class="never" data-hits="" data-linenumber="24">
3630
+
3631
+
3632
+ <code class="ruby"> /a{1,}/,</code>
3633
+ </li>
3634
+
3635
+ <li class="never" data-hits="" data-linenumber="25">
3636
+
3637
+
3638
+ <code class="ruby"> /a{1,2}/</code>
3639
+ </li>
3640
+
3641
+ <li class="never" data-hits="" data-linenumber="26">
3642
+
3643
+
3644
+ <code class="ruby"> )</code>
3645
+ </li>
3646
+
3647
+ <li class="never" data-hits="" data-linenumber="27">
3648
+
3649
+
3650
+ <code class="ruby"> end</code>
3651
+ </li>
3652
+
3653
+ <li class="never" data-hits="" data-linenumber="28">
3654
+
3655
+
3656
+ <code class="ruby"></code>
3657
+ </li>
3658
+
3659
+ <li class="covered" data-hits="1" data-linenumber="29">
3660
+ <span class="hits">1</span>
3661
+
3662
+ <code class="ruby"> context &quot;for basic groups&quot; do</code>
3663
+ </li>
3664
+
3665
+ <li class="covered" data-hits="1" data-linenumber="30">
3666
+ <span class="hits">1</span>
3667
+
3668
+ <code class="ruby"> examples_exist_and_match(</code>
3669
+ </li>
3670
+
3671
+ <li class="never" data-hits="" data-linenumber="31">
3672
+
3673
+
3674
+ <code class="ruby"> /[a]/,</code>
3675
+ </li>
3676
+
3677
+ <li class="never" data-hits="" data-linenumber="32">
3678
+
3679
+
3680
+ <code class="ruby"> /(a)/,</code>
3681
+ </li>
3682
+
3683
+ <li class="never" data-hits="" data-linenumber="33">
3684
+
3685
+
3686
+ <code class="ruby"> /a|b/,</code>
3687
+ </li>
3688
+
3689
+ <li class="never" data-hits="" data-linenumber="34">
3690
+
3691
+
3692
+ <code class="ruby"> /./</code>
3693
+ </li>
3694
+
3695
+ <li class="never" data-hits="" data-linenumber="35">
3696
+
3697
+
3698
+ <code class="ruby"> )</code>
3699
+ </li>
3700
+
3701
+ <li class="never" data-hits="" data-linenumber="36">
3702
+
3703
+
3704
+ <code class="ruby"> end</code>
3705
+ </li>
3706
+
3707
+ <li class="never" data-hits="" data-linenumber="37">
3708
+
3709
+
3710
+ <code class="ruby"></code>
3711
+ </li>
3712
+
3713
+ <li class="covered" data-hits="1" data-linenumber="38">
3714
+ <span class="hits">1</span>
3715
+
3716
+ <code class="ruby"> context &quot;for complex char groups (square brackets)&quot; do</code>
3717
+ </li>
3718
+
3719
+ <li class="covered" data-hits="1" data-linenumber="39">
3720
+ <span class="hits">1</span>
3721
+
3722
+ <code class="ruby"> examples_exist_and_match(</code>
3723
+ </li>
3724
+
3725
+ <li class="never" data-hits="" data-linenumber="40">
3726
+
3727
+
3728
+ <code class="ruby"> /[abc]/,</code>
3729
+ </li>
3730
+
3731
+ <li class="never" data-hits="" data-linenumber="41">
3732
+
3733
+
3734
+ <code class="ruby"> /[a-c]/,</code>
3735
+ </li>
3736
+
3737
+ <li class="never" data-hits="" data-linenumber="42">
3738
+
3739
+
3740
+ <code class="ruby"> /[abc-e]/,</code>
3741
+ </li>
3742
+
3743
+ <li class="never" data-hits="" data-linenumber="43">
3744
+
3745
+
3746
+ <code class="ruby"> /[^a-zA-Z]/,</code>
3747
+ </li>
3748
+
3749
+ <li class="never" data-hits="" data-linenumber="44">
3750
+
3751
+
3752
+ <code class="ruby"> /[\w]/,</code>
3753
+ </li>
3754
+
3755
+ <li class="never" data-hits="" data-linenumber="45">
3756
+
3757
+
3758
+ <code class="ruby"> /[]]/, # TODO: How to suppress annoying warnings on this test?</code>
3759
+ </li>
3760
+
3761
+ <li class="never" data-hits="" data-linenumber="46">
3762
+
3763
+
3764
+ <code class="ruby"> /[\]]/,</code>
3765
+ </li>
3766
+
3767
+ <li class="never" data-hits="" data-linenumber="47">
3768
+
3769
+
3770
+ <code class="ruby"> /[\\]/,</code>
3771
+ </li>
3772
+
3773
+ <li class="never" data-hits="" data-linenumber="48">
3774
+
3775
+
3776
+ <code class="ruby"> /[\\\]]/,</code>
3777
+ </li>
3778
+
3779
+ <li class="never" data-hits="" data-linenumber="49">
3780
+
3781
+
3782
+ <code class="ruby"> /[\n-\r]/,</code>
3783
+ </li>
3784
+
3785
+ <li class="never" data-hits="" data-linenumber="50">
3786
+
3787
+
3788
+ <code class="ruby"> /[\-]/,</code>
3789
+ </li>
3790
+
3791
+ <li class="never" data-hits="" data-linenumber="51">
3792
+
3793
+
3794
+ <code class="ruby"> /[%-+]/ # This regex is &quot;supposed to&quot; match some surprising things!!!</code>
3795
+ </li>
3796
+
3797
+ <li class="never" data-hits="" data-linenumber="52">
3798
+
3799
+
3800
+ <code class="ruby"> )</code>
3801
+ </li>
3802
+
3803
+ <li class="never" data-hits="" data-linenumber="53">
3804
+
3805
+
3806
+ <code class="ruby"> end</code>
3807
+ </li>
3808
+
3809
+ <li class="never" data-hits="" data-linenumber="54">
3810
+
3811
+
3812
+ <code class="ruby"></code>
3813
+ </li>
3814
+
3815
+ <li class="covered" data-hits="1" data-linenumber="55">
3816
+ <span class="hits">1</span>
3817
+
3818
+ <code class="ruby"> context &quot;for complex multi groups&quot; do</code>
3819
+ </li>
3820
+
3821
+ <li class="covered" data-hits="1" data-linenumber="56">
3822
+ <span class="hits">1</span>
3823
+
3824
+ <code class="ruby"> examples_exist_and_match(</code>
3825
+ </li>
3826
+
3827
+ <li class="never" data-hits="" data-linenumber="57">
3828
+
3829
+
3830
+ <code class="ruby"> /(normal)/,</code>
3831
+ </li>
3832
+
3833
+ <li class="never" data-hits="" data-linenumber="58">
3834
+
3835
+
3836
+ <code class="ruby"> /(?:nocapture)/,</code>
3837
+ </li>
3838
+
3839
+ <li class="never" data-hits="" data-linenumber="59">
3840
+
3841
+
3842
+ <code class="ruby"> /(?&lt;name&gt;namedgroup)/,</code>
3843
+ </li>
3844
+
3845
+ <li class="never" data-hits="" data-linenumber="60">
3846
+
3847
+
3848
+ <code class="ruby"> /(?&lt;name&gt;namedgroup) \k&lt;name&gt;/</code>
3849
+ </li>
3850
+
3851
+ <li class="never" data-hits="" data-linenumber="61">
3852
+
3853
+
3854
+ <code class="ruby"> )</code>
3855
+ </li>
3856
+
3857
+ <li class="never" data-hits="" data-linenumber="62">
3858
+
3859
+
3860
+ <code class="ruby"> # TODO: These are not yet implemented</code>
3861
+ </li>
3862
+
3863
+ <li class="never" data-hits="" data-linenumber="63">
3864
+
3865
+
3866
+ <code class="ruby"> # (expect to raise exception)</code>
3867
+ </li>
3868
+
3869
+ <li class="never" data-hits="" data-linenumber="64">
3870
+
3871
+
3872
+ <code class="ruby"># /(?=lookahead)/,</code>
3873
+ </li>
3874
+
3875
+ <li class="never" data-hits="" data-linenumber="65">
3876
+
3877
+
3878
+ <code class="ruby"># /(?!neglookahead)/,</code>
3879
+ </li>
3880
+
3881
+ <li class="never" data-hits="" data-linenumber="66">
3882
+
3883
+
3884
+ <code class="ruby"># /(?&lt;=lookbehind)/,</code>
3885
+ </li>
3886
+
3887
+ <li class="never" data-hits="" data-linenumber="67">
3888
+
3889
+
3890
+ <code class="ruby"># /(?&lt;!neglookbehind)/,</code>
3891
+ </li>
3892
+
3893
+ <li class="never" data-hits="" data-linenumber="68">
3894
+
3895
+
3896
+ <code class="ruby"> end</code>
3897
+ </li>
3898
+
3899
+ <li class="never" data-hits="" data-linenumber="69">
3900
+
3901
+
3902
+ <code class="ruby"></code>
3903
+ </li>
3904
+
3905
+ <li class="covered" data-hits="1" data-linenumber="70">
3906
+ <span class="hits">1</span>
3907
+
3908
+ <code class="ruby"> context &quot;for escaped characters&quot; do</code>
3909
+ </li>
3910
+
3911
+ <li class="covered" data-hits="1" data-linenumber="71">
3912
+ <span class="hits">1</span>
3913
+
3914
+ <code class="ruby"> examples_exist_and_match(</code>
3915
+ </li>
3916
+
3917
+ <li class="never" data-hits="" data-linenumber="72">
3918
+
3919
+
3920
+ <code class="ruby"> /\w/,</code>
3921
+ </li>
3922
+
3923
+ <li class="never" data-hits="" data-linenumber="73">
3924
+
3925
+
3926
+ <code class="ruby"> /\W/,</code>
3927
+ </li>
3928
+
3929
+ <li class="never" data-hits="" data-linenumber="74">
3930
+
3931
+
3932
+ <code class="ruby"> /\s/,</code>
3933
+ </li>
3934
+
3935
+ <li class="never" data-hits="" data-linenumber="75">
3936
+
3937
+
3938
+ <code class="ruby"> /\S/,</code>
3939
+ </li>
3940
+
3941
+ <li class="never" data-hits="" data-linenumber="76">
3942
+
3943
+
3944
+ <code class="ruby"> /\d/,</code>
3945
+ </li>
3946
+
3947
+ <li class="never" data-hits="" data-linenumber="77">
3948
+
3949
+
3950
+ <code class="ruby"> /\D/,</code>
3951
+ </li>
3952
+
3953
+ <li class="never" data-hits="" data-linenumber="78">
3954
+
3955
+
3956
+ <code class="ruby"> /\h/,</code>
3957
+ </li>
3958
+
3959
+ <li class="never" data-hits="" data-linenumber="79">
3960
+
3961
+
3962
+ <code class="ruby"> /\H/,</code>
3963
+ </li>
3964
+
3965
+ <li class="never" data-hits="" data-linenumber="80">
3966
+
3967
+
3968
+ <code class="ruby"> /\t/,</code>
3969
+ </li>
3970
+
3971
+ <li class="never" data-hits="" data-linenumber="81">
3972
+
3973
+
3974
+ <code class="ruby"> /\n/,</code>
3975
+ </li>
3976
+
3977
+ <li class="never" data-hits="" data-linenumber="82">
3978
+
3979
+
3980
+ <code class="ruby"> /\f/,</code>
3981
+ </li>
3982
+
3983
+ <li class="never" data-hits="" data-linenumber="83">
3984
+
3985
+
3986
+ <code class="ruby"> /\a/,</code>
3987
+ </li>
3988
+
3989
+ <li class="never" data-hits="" data-linenumber="84">
3990
+
3991
+
3992
+ <code class="ruby"> /\v/,</code>
3993
+ </li>
3994
+
3995
+ <li class="never" data-hits="" data-linenumber="85">
3996
+
3997
+
3998
+ <code class="ruby"> /\e/</code>
3999
+ </li>
4000
+
4001
+ <li class="never" data-hits="" data-linenumber="86">
4002
+
4003
+
4004
+ <code class="ruby"> )</code>
4005
+ </li>
4006
+
4007
+ <li class="never" data-hits="" data-linenumber="87">
4008
+
4009
+
4010
+ <code class="ruby"> end</code>
4011
+ </li>
4012
+
4013
+ <li class="never" data-hits="" data-linenumber="88">
4014
+
4015
+
4016
+ <code class="ruby"></code>
4017
+ </li>
4018
+
4019
+ <li class="covered" data-hits="1" data-linenumber="89">
4020
+ <span class="hits">1</span>
4021
+
4022
+ <code class="ruby"> context &quot;for backreferences&quot; do</code>
4023
+ </li>
4024
+
4025
+ <li class="covered" data-hits="1" data-linenumber="90">
4026
+ <span class="hits">1</span>
4027
+
4028
+ <code class="ruby"> examples_exist_and_match(</code>
4029
+ </li>
4030
+
4031
+ <li class="never" data-hits="" data-linenumber="91">
4032
+
4033
+
4034
+ <code class="ruby"> /(repeat) \1/,</code>
4035
+ </li>
4036
+
4037
+ <li class="never" data-hits="" data-linenumber="92">
4038
+
4039
+
4040
+ <code class="ruby"> /(ref1) (ref2) \1 \2/,</code>
4041
+ </li>
4042
+
4043
+ <li class="never" data-hits="" data-linenumber="93">
4044
+
4045
+
4046
+ <code class="ruby"> /((ref2)ref1) \1 \2/,</code>
4047
+ </li>
4048
+
4049
+ <li class="never" data-hits="" data-linenumber="94">
4050
+
4051
+
4052
+ <code class="ruby"> /((ref1and2)) \1 \2/,</code>
4053
+ </li>
4054
+
4055
+ <li class="never" data-hits="" data-linenumber="95">
4056
+
4057
+
4058
+ <code class="ruby"> /(one)(two)(three)(four)(five)(six)(seven)(eight)(nine)(ten) \10\9\8\7\6\5\4\3\2\1/,</code>
4059
+ </li>
4060
+
4061
+ <li class="never" data-hits="" data-linenumber="96">
4062
+
4063
+
4064
+ <code class="ruby"> /(a?(b?(c?(d?(e?)))))/</code>
4065
+ </li>
4066
+
4067
+ <li class="never" data-hits="" data-linenumber="97">
4068
+
4069
+
4070
+ <code class="ruby"> )</code>
4071
+ </li>
4072
+
4073
+ <li class="never" data-hits="" data-linenumber="98">
4074
+
4075
+
4076
+ <code class="ruby"> end</code>
4077
+ </li>
4078
+
4079
+ <li class="never" data-hits="" data-linenumber="99">
4080
+
4081
+
4082
+ <code class="ruby"></code>
4083
+ </li>
4084
+
4085
+ <li class="covered" data-hits="1" data-linenumber="100">
4086
+ <span class="hits">1</span>
4087
+
4088
+ <code class="ruby"> context &quot;for complex patterns&quot; do</code>
4089
+ </li>
4090
+
4091
+ <li class="never" data-hits="" data-linenumber="101">
4092
+
4093
+
4094
+ <code class="ruby"> # Longer combinations of the above</code>
4095
+ </li>
4096
+
4097
+ <li class="covered" data-hits="1" data-linenumber="102">
4098
+ <span class="hits">1</span>
4099
+
4100
+ <code class="ruby"> examples_exist_and_match(</code>
4101
+ </li>
4102
+
4103
+ <li class="never" data-hits="" data-linenumber="103">
4104
+
4105
+
4106
+ <code class="ruby"> /https?:\/\/(www\.)github\.com/,</code>
4107
+ </li>
4108
+
4109
+ <li class="never" data-hits="" data-linenumber="104">
4110
+
4111
+
4112
+ <code class="ruby"> /(I(N(C(E(P(T(I(O(N)))))))))*/,</code>
4113
+ </li>
4114
+
4115
+ <li class="never" data-hits="" data-linenumber="105">
4116
+
4117
+
4118
+ <code class="ruby"> /[\w]{1}/,</code>
4119
+ </li>
4120
+
4121
+ <li class="never" data-hits="" data-linenumber="106">
4122
+
4123
+
4124
+ <code class="ruby"> /((a?b*c+)) \1/,</code>
4125
+ </li>
4126
+
4127
+ <li class="never" data-hits="" data-linenumber="107">
4128
+
4129
+
4130
+ <code class="ruby"> /((a?b*c+)?) \1/,</code>
4131
+ </li>
4132
+
4133
+ <li class="never" data-hits="" data-linenumber="108">
4134
+
4135
+
4136
+ <code class="ruby"> /a|b|c|d/,</code>
4137
+ </li>
4138
+
4139
+ <li class="never" data-hits="" data-linenumber="109">
4140
+
4141
+
4142
+ <code class="ruby"> /a+|b*|c?/</code>
4143
+ </li>
4144
+
4145
+ <li class="never" data-hits="" data-linenumber="110">
4146
+
4147
+
4148
+ <code class="ruby"> )</code>
4149
+ </li>
4150
+
4151
+ <li class="never" data-hits="" data-linenumber="111">
4152
+
4153
+
4154
+ <code class="ruby"> end</code>
4155
+ </li>
4156
+
4157
+ <li class="never" data-hits="" data-linenumber="112">
4158
+
4159
+
4160
+ <code class="ruby"> end</code>
4161
+ </li>
4162
+
4163
+ <li class="never" data-hits="" data-linenumber="113">
4164
+
4165
+
4166
+ <code class="ruby">end</code>
4167
+ </li>
4168
+
4169
+ </ol>
4170
+ </pre>
4171
+ </div>
4172
+
4173
+ </div>
4174
+ </div>
4175
+ </body>
4176
+ </html>