qo 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +40 -84
- data/docs/Qo.html +4 -9
- data/docs/Qo/Exceptions.html +3 -3
- data/docs/Qo/Exceptions/MultipleElseClauses.html +257 -0
- data/docs/Qo/Exceptions/MultipleMatchersProvided.html +2 -2
- data/docs/Qo/Exceptions/NoMatchersProvided.html +2 -2
- data/docs/Qo/Exceptions/NotAllGuardMatchersProvided.html +2 -2
- data/docs/Qo/Helpers.html +2 -2
- data/docs/Qo/Matchers.html +4 -4
- data/docs/Qo/Matchers/ArrayMatcher.html +2 -2
- data/docs/Qo/Matchers/BaseMatcher.html +2 -2
- data/docs/Qo/Matchers/GuardBlockMatcher.html +2 -2
- data/docs/Qo/Matchers/HashMatcher.html +2 -2
- data/docs/Qo/Matchers/PatternMatch.html +2 -2
- data/docs/Qo/Matchers/PatternMatchBlock.html +832 -0
- data/docs/Qo/PublicApi.html +77 -19
- data/docs/_index.html +16 -2
- data/docs/class_list.html +1 -1
- data/docs/file.README.html +92 -78
- data/docs/img/qo_logo.png +0 -0
- data/docs/img/whoa_lemur.png +0 -0
- data/docs/index.html +92 -78
- data/docs/method_list.html +77 -29
- data/docs/top-level-namespace.html +2 -2
- data/img/qo_logo.png +0 -0
- data/lib/qo.rb +3 -2
- data/lib/qo/matchers/array_matcher.rb +0 -1
- data/lib/qo/matchers/base_matcher.rb +0 -12
- data/lib/qo/matchers/hash_matcher.rb +0 -2
- data/lib/qo/version.rb +1 -1
- data/performance_report.txt +37 -37
- data/qo.gemspec +2 -0
- metadata +19 -2
data/docs/Qo/PublicApi.html
CHANGED
@@ -180,7 +180,7 @@ disappointment from the creator.</p>
|
|
180
180
|
<li class="public ">
|
181
181
|
<span class="summary_signature">
|
182
182
|
|
183
|
-
<a href="#match-instance_method" title="#match (instance method)">#<strong>match</strong>(*args) ⇒ Qo::
|
183
|
+
<a href="#match-instance_method" title="#match (instance method)">#<strong>match</strong>(*args, &fn) ⇒ Qo::PatternMatchBlock, ... </a>
|
184
184
|
|
185
185
|
|
186
186
|
|
@@ -391,7 +391,7 @@ a false match.</p>
|
|
391
391
|
<pre class="code"><span class="info file"># File 'lib/qo/public_api.rb', line 23</span>
|
392
392
|
|
393
393
|
<span class='kw'>def</span> <span class='kw'>and</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
394
|
-
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>and</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='
|
394
|
+
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>and</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
395
395
|
<span class='kw'>end</span></pre>
|
396
396
|
</td>
|
397
397
|
</tr>
|
@@ -401,7 +401,7 @@ a false match.</p>
|
|
401
401
|
<div class="method_details ">
|
402
402
|
<h3 class="signature " id="match-instance_method">
|
403
403
|
|
404
|
-
#<strong>match</strong>(*args) ⇒ <tt>Qo::
|
404
|
+
#<strong>match</strong>(*args, &fn) ⇒ <tt>Qo::PatternMatchBlock</tt>, ...
|
405
405
|
|
406
406
|
|
407
407
|
|
@@ -423,6 +423,23 @@ associated matcher's block function.</p>
|
|
423
423
|
<p class="tag_title">Parameters:</p>
|
424
424
|
<ul class="param">
|
425
425
|
|
426
|
+
<li>
|
427
|
+
|
428
|
+
<span class='name'>fn</span>
|
429
|
+
|
430
|
+
|
431
|
+
<span class='type'>(<tt>Proc</tt>)</span>
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
—
|
436
|
+
<div class='inline'><p>If provided, the pattern match will become block-style, utilizing
|
437
|
+
PatternMatchBlock instead. If any args are provided, the first
|
438
|
+
will be treated as the target.</p>
|
439
|
+
</div>
|
440
|
+
|
441
|
+
</li>
|
442
|
+
|
426
443
|
<li>
|
427
444
|
|
428
445
|
<span class='name'>*args</span>
|
@@ -446,12 +463,41 @@ associated matcher's block function.</p>
|
|
446
463
|
<li>
|
447
464
|
|
448
465
|
|
449
|
-
<span class='type'>(<tt>Qo::
|
466
|
+
<span class='type'>(<tt>Qo::PatternMatchBlock</tt>)</span>
|
450
467
|
|
451
468
|
|
452
469
|
|
453
470
|
—
|
454
|
-
<div class='inline'><p>
|
471
|
+
<div class='inline'><p>If a value is not provided, a block style pattern match will be returned
|
472
|
+
that responds to proc coercion. It can be used for functions like <code>map</code>.</p>
|
473
|
+
</div>
|
474
|
+
|
475
|
+
</li>
|
476
|
+
|
477
|
+
<li>
|
478
|
+
|
479
|
+
|
480
|
+
<span class='type'>(<tt>Qo::PatternMatch</tt>)</span>
|
481
|
+
|
482
|
+
|
483
|
+
|
484
|
+
—
|
485
|
+
<div class='inline'><p>If a value is not provided and no function is present, a PatternMatch
|
486
|
+
will be returned, awaiting a value to match against.</p>
|
487
|
+
</div>
|
488
|
+
|
489
|
+
</li>
|
490
|
+
|
491
|
+
<li>
|
492
|
+
|
493
|
+
|
494
|
+
<span class='type'>(<tt>Any</tt>)</span>
|
495
|
+
|
496
|
+
|
497
|
+
|
498
|
+
—
|
499
|
+
<div class='inline'><p>If a value is provided, matchers will attempt to call through on it,
|
500
|
+
returning the result of the function.</p>
|
455
501
|
</div>
|
456
502
|
|
457
503
|
</li>
|
@@ -479,19 +525,31 @@ associated matcher's block function.</p>
|
|
479
525
|
<pre class="lines">
|
480
526
|
|
481
527
|
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
528
|
+
104
|
529
|
+
105
|
530
|
+
106
|
531
|
+
107
|
532
|
+
108
|
533
|
+
109
|
534
|
+
110
|
535
|
+
111
|
536
|
+
112
|
537
|
+
113
|
538
|
+
114
|
539
|
+
115
|
540
|
+
116
|
541
|
+
117</pre>
|
490
542
|
</td>
|
491
543
|
<td>
|
492
|
-
<pre class="code"><span class="info file"># File 'lib/qo/public_api.rb', line
|
544
|
+
<pre class="code"><span class="info file"># File 'lib/qo/public_api.rb', line 104</span>
|
545
|
+
|
546
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_fn'>fn</span><span class='rparen'>)</span>
|
547
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
|
548
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='op'>?</span>
|
549
|
+
<span class='const'><span class='object_link'><a href="../Qo.html" title="Qo (module)">Qo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers.html" title="Qo::Matchers (module)">Matchers</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers/PatternMatchBlock.html" title="Qo::Matchers::PatternMatchBlock (class)">PatternMatchBlock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Matchers/PatternMatchBlock.html#initialize-instance_method" title="Qo::Matchers::PatternMatchBlock#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='op'>&</span><span class='id identifier rubyid_fn'>fn</span><span class='rparen'>)</span> <span class='op'>:</span>
|
550
|
+
<span class='const'><span class='object_link'><a href="../Qo.html" title="Qo (module)">Qo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers.html" title="Qo::Matchers (module)">Matchers</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers/PatternMatchBlock.html" title="Qo::Matchers::PatternMatchBlock (class)">PatternMatchBlock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Matchers/PatternMatchBlock.html#initialize-instance_method" title="Qo::Matchers::PatternMatchBlock#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='op'>&</span><span class='id identifier rubyid_fn'>fn</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_call'><span class='object_link'><a href="Matchers/PatternMatchBlock.html#call-instance_method" title="Qo::Matchers::PatternMatchBlock#call (method)">call</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rparen'>)</span>
|
551
|
+
<span class='kw'>end</span>
|
493
552
|
|
494
|
-
<span class='kw'>def</span> <span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
495
553
|
<span class='kw'>if</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../Qo.html" title="Qo (module)">Qo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers.html" title="Qo::Matchers (module)">Matchers</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers/GuardBlockMatcher.html" title="Qo::Matchers::GuardBlockMatcher (class)">GuardBlockMatcher</a></span></span><span class='rparen'>)</span>
|
496
554
|
<span class='const'><span class='object_link'><a href="../Qo.html" title="Qo (module)">Qo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers.html" title="Qo::Matchers (module)">Matchers</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Matchers/PatternMatch.html" title="Qo::Matchers::PatternMatch (class)">PatternMatch</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Matchers/PatternMatch.html#initialize-instance_method" title="Qo::Matchers::PatternMatch#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
497
555
|
<span class='kw'>else</span>
|
@@ -737,7 +795,7 @@ a true match.</p>
|
|
737
795
|
<pre class="code"><span class="info file"># File 'lib/qo/public_api.rb', line 52</span>
|
738
796
|
|
739
797
|
<span class='kw'>def</span> <span class='kw'>not</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
740
|
-
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>not</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='
|
798
|
+
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>not</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
741
799
|
<span class='kw'>end</span></pre>
|
742
800
|
</td>
|
743
801
|
</tr>
|
@@ -845,7 +903,7 @@ a true match.</p>
|
|
845
903
|
<pre class="code"><span class="info file"># File 'lib/qo/public_api.rb', line 39</span>
|
846
904
|
|
847
905
|
<span class='kw'>def</span> <span class='kw'>or</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
848
|
-
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>or</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='
|
906
|
+
<span class='id identifier rubyid_create_matcher'>create_matcher</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>or</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='id identifier rubyid_array_matchers'>array_matchers</span><span class='comma'>,</span> <span class='id identifier rubyid_keyword_matchers'>keyword_matchers</span><span class='rparen'>)</span>
|
849
907
|
<span class='kw'>end</span></pre>
|
850
908
|
</td>
|
851
909
|
</tr>
|
@@ -857,9 +915,9 @@ a true match.</p>
|
|
857
915
|
</div>
|
858
916
|
|
859
917
|
<div id="footer">
|
860
|
-
Generated on Sun
|
918
|
+
Generated on Sun Aug 5 20:52:10 2018 by
|
861
919
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
862
|
-
0.9.12 (ruby-2.
|
920
|
+
0.9.12 (ruby-2.5.1).
|
863
921
|
</div>
|
864
922
|
|
865
923
|
</div>
|
data/docs/_index.html
CHANGED
@@ -169,6 +169,13 @@
|
|
169
169
|
|
170
170
|
</li>
|
171
171
|
|
172
|
+
<li>
|
173
|
+
<span class='object_link'><a href="Qo/Exceptions/MultipleElseClauses.html" title="Qo::Exceptions::MultipleElseClauses (class)">MultipleElseClauses</a></span>
|
174
|
+
|
175
|
+
<small>(Qo::Exceptions)</small>
|
176
|
+
|
177
|
+
</li>
|
178
|
+
|
172
179
|
<li>
|
173
180
|
<span class='object_link'><a href="Qo/Exceptions/MultipleMatchersProvided.html" title="Qo::Exceptions::MultipleMatchersProvided (class)">MultipleMatchersProvided</a></span>
|
174
181
|
|
@@ -216,6 +223,13 @@
|
|
216
223
|
|
217
224
|
</li>
|
218
225
|
|
226
|
+
<li>
|
227
|
+
<span class='object_link'><a href="Qo/Matchers/PatternMatchBlock.html" title="Qo::Matchers::PatternMatchBlock (class)">PatternMatchBlock</a></span>
|
228
|
+
|
229
|
+
<small>(Qo::Matchers)</small>
|
230
|
+
|
231
|
+
</li>
|
232
|
+
|
219
233
|
<li>
|
220
234
|
<span class='object_link'><a href="Qo/PublicApi.html" title="Qo::PublicApi (module)">PublicApi</a></span>
|
221
235
|
|
@@ -248,9 +262,9 @@
|
|
248
262
|
</div>
|
249
263
|
|
250
264
|
<div id="footer">
|
251
|
-
Generated on Sun
|
265
|
+
Generated on Sun Aug 5 20:52:09 2018 by
|
252
266
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
253
|
-
0.9.12 (ruby-2.
|
267
|
+
0.9.12 (ruby-2.5.1).
|
254
268
|
</div>
|
255
269
|
|
256
270
|
</div>
|
data/docs/class_list.html
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
<ul id="full_list" class="class">
|
45
45
|
<li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
|
46
|
-
<li id='object_Qo' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Qo::Exceptions' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Qo/Exceptions.html" title="Qo::Exceptions (module)">Exceptions</a></span><small class='search_info'>Qo</small></div><ul><li id='object_Qo::Exceptions::MultipleMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/MultipleMatchersProvided.html" title="Qo::Exceptions::MultipleMatchersProvided (class)">MultipleMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li><li id='object_Qo::Exceptions::NoMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/NoMatchersProvided.html" title="Qo::Exceptions::NoMatchersProvided (class)">NoMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li><li id='object_Qo::Exceptions::NotAllGuardMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/NotAllGuardMatchersProvided.html" title="Qo::Exceptions::NotAllGuardMatchersProvided (class)">NotAllGuardMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li></ul></li><li id='object_Qo::Helpers' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Qo/Helpers.html" title="Qo::Helpers (module)">Helpers</a></span><small class='search_info'>Qo</small></div></li><li id='object_Qo::Matchers' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Qo/Matchers.html" title="Qo::Matchers (module)">Matchers</a></span><small class='search_info'>Qo</small></div><ul><li id='object_Qo::Matchers::ArrayMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/ArrayMatcher.html" title="Qo::Matchers::ArrayMatcher (class)">ArrayMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::BaseMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/BaseMatcher.html" title="Qo::Matchers::BaseMatcher (class)">BaseMatcher</a></span> < Object<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::GuardBlockMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/GuardBlockMatcher.html" title="Qo::Matchers::GuardBlockMatcher (class)">GuardBlockMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::HashMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/HashMatcher.html" title="Qo::Matchers::HashMatcher (class)">HashMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::PatternMatch' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/PatternMatch.html" title="Qo::Matchers::PatternMatch (class)">PatternMatch</a></span> < Object<small class='search_info'>Qo::Matchers</small></div></li></ul></li><li id='object_Qo::PublicApi' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Qo/PublicApi.html" title="Qo::PublicApi (module)">PublicApi</a></span><small class='search_info'>Qo</small></div></li></ul></li>
|
46
|
+
<li id='object_Qo' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Qo::Exceptions' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Qo/Exceptions.html" title="Qo::Exceptions (module)">Exceptions</a></span><small class='search_info'>Qo</small></div><ul><li id='object_Qo::Exceptions::MultipleElseClauses' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/MultipleElseClauses.html" title="Qo::Exceptions::MultipleElseClauses (class)">MultipleElseClauses</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li><li id='object_Qo::Exceptions::MultipleMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/MultipleMatchersProvided.html" title="Qo::Exceptions::MultipleMatchersProvided (class)">MultipleMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li><li id='object_Qo::Exceptions::NoMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/NoMatchersProvided.html" title="Qo::Exceptions::NoMatchersProvided (class)">NoMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li><li id='object_Qo::Exceptions::NotAllGuardMatchersProvided' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Exceptions/NotAllGuardMatchersProvided.html" title="Qo::Exceptions::NotAllGuardMatchersProvided (class)">NotAllGuardMatchersProvided</a></span> < ArgumentError<small class='search_info'>Qo::Exceptions</small></div></li></ul></li><li id='object_Qo::Helpers' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Qo/Helpers.html" title="Qo::Helpers (module)">Helpers</a></span><small class='search_info'>Qo</small></div></li><li id='object_Qo::Matchers' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Qo/Matchers.html" title="Qo::Matchers (module)">Matchers</a></span><small class='search_info'>Qo</small></div><ul><li id='object_Qo::Matchers::ArrayMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/ArrayMatcher.html" title="Qo::Matchers::ArrayMatcher (class)">ArrayMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::BaseMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/BaseMatcher.html" title="Qo::Matchers::BaseMatcher (class)">BaseMatcher</a></span> < Object<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::GuardBlockMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/GuardBlockMatcher.html" title="Qo::Matchers::GuardBlockMatcher (class)">GuardBlockMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::HashMatcher' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/HashMatcher.html" title="Qo::Matchers::HashMatcher (class)">HashMatcher</a></span> < BaseMatcher<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::PatternMatch' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/PatternMatch.html" title="Qo::Matchers::PatternMatch (class)">PatternMatch</a></span> < Object<small class='search_info'>Qo::Matchers</small></div></li><li id='object_Qo::Matchers::PatternMatchBlock' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Qo/Matchers/PatternMatchBlock.html" title="Qo::Matchers::PatternMatchBlock (class)">PatternMatchBlock</a></span> < Object<small class='search_info'>Qo::Matchers</small></div></li></ul></li><li id='object_Qo::PublicApi' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Qo/PublicApi.html" title="Qo::PublicApi (module)">PublicApi</a></span><small class='search_info'>Qo</small></div></li></ul></li>
|
47
47
|
|
48
48
|
</ul>
|
49
49
|
</div>
|
data/docs/file.README.html
CHANGED
@@ -63,10 +63,12 @@
|
|
63
63
|
<a href="https://codeclimate.com/github/baweaver/qo/maintainability"><img src="https://api.codeclimate.com/v1/badges/186e9cbb7003842acaf0/maintainability" alt="Maintainability"></a>
|
64
64
|
<a href="https://badge.fury.io/rb/qo"><img src="https://badge.fury.io/rb/qo.svg" alt="Gem Version"></a></p>
|
65
65
|
|
66
|
-
<p>Short for Query Object, my play at Ruby pattern matching and fluent querying
|
66
|
+
<p>Short for Query Object, my play at Ruby pattern matching and fluent querying, <a href="img/whoa_lemur.png">pronounced "Q-whoah"</a>.</p>
|
67
67
|
|
68
68
|
<p><img src="img/qo_logo.png" alt="Qo Lemur logo"></p>
|
69
69
|
|
70
|
+
<p><a href="https://baweaver.github.io/qo/">Read the Docs for more detailed information</a></p>
|
71
|
+
|
70
72
|
<h2>How does it work?</h2>
|
71
73
|
|
72
74
|
<p>Mostly by using Ruby language features like <code>to_proc</code> and <code>===</code>.</p>
|
@@ -87,33 +89,60 @@
|
|
87
89
|
|
88
90
|
<h2>Usage</h2>
|
89
91
|
|
92
|
+
<p>Note that Qo uses the <a href="https://www.github.com/baweaver/any">Any</a> gem for wildcard matching. Any will respond true to any <code>==</code> or <code>===</code> query against it,
|
93
|
+
and is included in the gem.</p>
|
94
|
+
|
90
95
|
<h3>Quick Start</h3>
|
91
96
|
|
92
97
|
<p>Qo is used for pattern matching in Ruby. All Qo matchers respond to <code>===</code> and <code>to_proc</code> meaning they can be used with <code>case</code> and Enumerable functions alike:</p>
|
93
98
|
|
94
99
|
<pre class="code ruby"><code class="ruby"><span class='kw'>case</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Foo</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>42</span><span class='rbracket'>]</span>
|
95
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
100
|
+
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>42</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Truly the one answer</span><span class='tstring_end'>'</span></span>
|
96
101
|
<span class='kw'>else</span> <span class='kw'>nil</span>
|
97
102
|
<span class='kw'>end</span>
|
98
103
|
|
99
104
|
<span class='comment'># Run a select like an AR query, getting the age attribute against a range
|
100
105
|
</span><span class='id identifier rubyid_people'>people</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='label'>age:</span> <span class='int'>18</span><span class='op'>..</span><span class='int'>30</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
106
|
+
</code></pre>
|
107
|
+
|
108
|
+
<p>How about some pattern matching? There are two styles:</p>
|
109
|
+
|
110
|
+
<h4>Pattern Match</h4>
|
111
|
+
|
112
|
+
<p>The original style</p>
|
101
113
|
|
102
|
-
<span class='comment'># How about some "right-hand assignment" pattern matching
|
114
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'># How about some "right-hand assignment" pattern matching
|
103
115
|
</span><span class='id identifier rubyid_name_longer_than_three'>name_longer_than_three</span> <span class='op'>=</span> <span class='tlambda'>-></span> <span class='id identifier rubyid_person'>person</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>3</span> <span class='rbrace'>}</span>
|
104
116
|
<span class='id identifier rubyid_people_with_truncated_names'>people_with_truncated_names</span> <span class='op'>=</span> <span class='id identifier rubyid_people'>people</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span>
|
105
117
|
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='id identifier rubyid_name_longer_than_three'>name_longer_than_three</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='const'>Person</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
106
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
118
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span> <span class='comment'># Identity function, catch-all
|
107
119
|
</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
108
120
|
|
109
121
|
<span class='comment'># And standalone like a case:
|
110
122
|
</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_people'>people</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span>
|
111
123
|
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='label'>age:</span> <span class='int'>10</span><span class='op'>..</span><span class='int'>19</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is a teen that's </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
112
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
124
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
113
125
|
<span class='rparen'>)</span>
|
114
126
|
</code></pre>
|
115
127
|
|
116
|
-
<
|
128
|
+
<h4>Pattern Match Block</h4>
|
129
|
+
|
130
|
+
<p>The new style, likely to take over in <code>v1.0.0</code> after testing:</p>
|
131
|
+
|
132
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_name_longer_than_three'>name_longer_than_three</span> <span class='op'>=</span> <span class='tlambda'>-></span> <span class='id identifier rubyid_person'>person</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>3</span> <span class='rbrace'>}</span>
|
133
|
+
<span class='id identifier rubyid_people_with_truncated_names'>people_with_truncated_names</span> <span class='op'>=</span> <span class='id identifier rubyid_people'>people</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span>
|
134
|
+
<span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_when'>when</span><span class='lparen'>(</span><span class='id identifier rubyid_name_longer_than_three'>name_longer_than_three</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='const'>Person</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
135
|
+
<span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_else'>else</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:itself</span><span class='rparen'>)</span>
|
136
|
+
<span class='rbrace'>}</span><span class='rparen'>)</span>
|
137
|
+
|
138
|
+
<span class='comment'># And standalone like a case:
|
139
|
+
</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_people'>people</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span>
|
140
|
+
<span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_when'>when</span><span class='lparen'>(</span><span class='label'>age:</span> <span class='int'>10</span><span class='op'>..</span><span class='int'>19</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is a teen that's </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
141
|
+
<span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_else'>else</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
142
|
+
<span class='rbrace'>}</span>
|
143
|
+
</code></pre>
|
144
|
+
|
145
|
+
<p>(More details coming on the difference and planned 1.0.0 APIs)</p>
|
117
146
|
|
118
147
|
<h3>Qo'isms</h3>
|
119
148
|
|
@@ -157,14 +186,14 @@
|
|
157
186
|
|
158
187
|
<h3>1 - Wildcard Matching</h3>
|
159
188
|
|
160
|
-
<p>Qo has a concept of a Wildcard, <code
|
189
|
+
<p>Qo has a concept of a Wildcard, <code>Any</code>, which will match against any value</p>
|
161
190
|
|
162
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
191
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='const'>Any</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Robert</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span> <span class='comment'># true
|
163
192
|
</span></code></pre>
|
164
193
|
|
165
194
|
<p>A single wildcard will match anything, and can frequently be used as an always true:</p>
|
166
195
|
|
167
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
196
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='symbol'>:literally_anything_here</span>
|
168
197
|
</code></pre>
|
169
198
|
|
170
199
|
<h3>2 - Array Matching</h3>
|
@@ -181,62 +210,40 @@
|
|
181
210
|
<p>When an Array matcher is run against an Array, it will compare elements by index in the following priority:</p>
|
182
211
|
|
183
212
|
<ol>
|
184
|
-
<li>Was a wildcard provided?</li>
|
185
213
|
<li>Does it case match (<code>===</code>)?</li>
|
186
214
|
<li>Does it have a predicate method by that name that matches?</li>
|
187
215
|
</ol>
|
188
216
|
|
189
217
|
<p>This functionality is left biased and permissive, meaning that if the right side of the argument is longer it will ignore those items in the match. If it's shorter? Not so much.</p>
|
190
218
|
|
191
|
-
<h5>2.1.1 -
|
192
|
-
|
193
|
-
<pre class="code ruby"><code class="ruby"><span class='comment'># Standalone
|
194
|
-
</span>
|
195
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='symbol'>:*</span><span class='comma'>,</span> <span class='symbol'>:*</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Robert</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span>
|
196
|
-
<span class='comment'># => true
|
197
|
-
</span>
|
198
|
-
<span class='comment'># Case statement
|
199
|
-
</span>
|
200
|
-
<span class='kw'>case</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Roberta</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span>
|
201
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='symbol'>:*</span><span class='comma'>,</span> <span class='symbol'>:*</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>it matched</span><span class='tstring_end'>'</span></span>
|
202
|
-
<span class='kw'>else</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>will not ever be reached</span><span class='tstring_end'>'</span></span>
|
203
|
-
<span class='kw'>end</span>
|
204
|
-
<span class='comment'># => 'it matched'
|
205
|
-
</span>
|
206
|
-
<span class='comment'># Select
|
207
|
-
</span>
|
208
|
-
<span class='id identifier rubyid_people_arrays'>people_arrays</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='symbol'>:*</span><span class='comma'>,</span> <span class='symbol'>:*</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
209
|
-
<span class='comment'># => [['Robert', 22], ['Roberta', 22], ['Foo', 42], ['Bar', 18]]
|
210
|
-
</span></code></pre>
|
211
|
-
|
212
|
-
<h5>2.1.2 - Case Match present</h5>
|
219
|
+
<h5>2.1.1 - Case Match present</h5>
|
213
220
|
|
214
221
|
<p>We've seen some case matching so far with <code>Range</code> and <code>Regex</code>:</p>
|
215
222
|
|
216
223
|
<pre class="code ruby"><code class="ruby"><span class='comment'># Standalone
|
217
224
|
</span>
|
218
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Rob</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='
|
225
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Rob</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='const'>Any</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Robert</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span>
|
219
226
|
<span class='comment'># => true
|
220
227
|
</span>
|
221
228
|
<span class='comment'># Case statement
|
222
229
|
</span>
|
223
230
|
<span class='kw'>case</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Roberta</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span>
|
224
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
225
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
226
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
231
|
+
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>0</span><span class='op'>..</span><span class='int'>9</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>child</span><span class='tstring_end'>'</span></span>
|
232
|
+
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>10</span><span class='op'>..</span><span class='int'>19</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>teen</span><span class='tstring_end'>'</span></span>
|
233
|
+
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>20</span><span class='op'>..</span><span class='int'>99</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>adult</span><span class='tstring_end'>'</span></span>
|
227
234
|
<span class='kw'>else</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>not sure</span><span class='tstring_end'>'</span></span>
|
228
235
|
<span class='kw'>end</span>
|
229
236
|
<span class='comment'># => 'adult'
|
230
237
|
</span>
|
231
238
|
<span class='comment'># Select
|
232
239
|
</span>
|
233
|
-
<span class='id identifier rubyid_people_arrays'>people_arrays</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
240
|
+
<span class='id identifier rubyid_people_arrays'>people_arrays</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>10</span><span class='op'>..</span><span class='int'>19</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
234
241
|
<span class='comment'># => [['Bar', 18]]
|
235
242
|
</span></code></pre>
|
236
243
|
|
237
|
-
<h5>2.1.
|
244
|
+
<h5>2.1.2 - Predicate Method matched</h5>
|
238
245
|
|
239
|
-
<p>If no
|
246
|
+
<p>If no case match is found, it will attempt to see if a predicate method by the same name exists, call it, and check the result:</p>
|
240
247
|
|
241
248
|
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_dirty_values'>dirty_values</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span>
|
242
249
|
|
@@ -248,14 +255,14 @@
|
|
248
255
|
<span class='comment'># Case statement
|
249
256
|
</span>
|
250
257
|
<span class='kw'>case</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Roberta</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='kw'>nil</span><span class='rbracket'>]</span>
|
251
|
-
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
258
|
+
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='symbol'>:nil?</span><span class='rbracket'>]</span> <span class='kw'>then</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>no age</span><span class='tstring_end'>'</span></span>
|
252
259
|
<span class='kw'>else</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>not sure</span><span class='tstring_end'>'</span></span>
|
253
260
|
<span class='kw'>end</span>
|
254
261
|
<span class='comment'># => 'no age'
|
255
262
|
</span>
|
256
263
|
<span class='comment'># Select
|
257
264
|
</span>
|
258
|
-
<span class='id identifier rubyid_people_arrays'>people_arrays</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='
|
265
|
+
<span class='id identifier rubyid_people_arrays'>people_arrays</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='const'>Any</span><span class='comma'>,</span> <span class='symbol'>:even?</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
259
266
|
<span class='comment'># => [["Robert", 22], ["Roberta", 22], ["Foo", 42], ["Bar", 18]]
|
260
267
|
</span></code></pre>
|
261
268
|
|
@@ -264,21 +271,13 @@
|
|
264
271
|
<p>When an Array matcher is matched against anything other than an Array it will follow the priority:</p>
|
265
272
|
|
266
273
|
<ol>
|
267
|
-
<li>Was a wildcard provided?</li>
|
268
274
|
<li>Does it case match (<code>===</code>)?</li>
|
269
275
|
<li>Does it have a predicate method by that name that matches?</li>
|
270
276
|
</ol>
|
271
277
|
|
272
278
|
<p>Every argument provided will be run against the target object.</p>
|
273
279
|
|
274
|
-
<h5>2.2.1 -
|
275
|
-
|
276
|
-
<p>A wildcard in an Array to Object match is functionally an always true, but can be used as such:</p>
|
277
|
-
|
278
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='symbol'>:*</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='symbol'>:literally_anything_here</span>
|
279
|
-
</code></pre>
|
280
|
-
|
281
|
-
<h5>2.2.2 - Case Match present</h5>
|
280
|
+
<h5>2.2.1 - Case Match present</h5>
|
282
281
|
|
283
282
|
<pre class="code ruby"><code class="ruby"><span class='comment'># Standalone
|
284
283
|
</span>
|
@@ -293,7 +292,7 @@
|
|
293
292
|
<span class='comment'># => [10, "string"]
|
294
293
|
</span></code></pre>
|
295
294
|
|
296
|
-
<h5>2.2.
|
295
|
+
<h5>2.2.2 - Predicate Method matched</h5>
|
297
296
|
|
298
297
|
<p>Now this is where some of the fun starts in</p>
|
299
298
|
|
@@ -325,7 +324,6 @@
|
|
325
324
|
<ol>
|
326
325
|
<li>Does the key exist on the other hash?</li>
|
327
326
|
<li>Are the match value and match target hashes?</li>
|
328
|
-
<li>Was a wildcard value provided?</li>
|
329
327
|
<li>Does the target object's value case match against the match value?</li>
|
330
328
|
<li>Does the target object's value predicate match against the match value?</li>
|
331
329
|
<li>What about the String version of the match key? Abort if it can't coerce.</li>
|
@@ -375,15 +373,7 @@
|
|
375
373
|
<span class='rbrace'>}</span><span class='rparen'>)</span>
|
376
374
|
</code></pre>
|
377
375
|
|
378
|
-
<h5>3.1.3 -
|
379
|
-
|
380
|
-
<p>As with other wildcards, if the value matched against is a wildcard it'll always get through:</p>
|
381
|
-
|
382
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='lbracket'>[</span><span class='label'>name:</span> <span class='symbol'>:*</span><span class='rbracket'>]</span> <span class='op'>===</span> <span class='lbrace'>{</span><span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Foo</span><span class='tstring_end'>'</span></span><span class='rbrace'>}</span>
|
383
|
-
<span class='comment'># => true
|
384
|
-
</span></code></pre>
|
385
|
-
|
386
|
-
<h5>3.1.4 - Case match present</h5>
|
376
|
+
<h5>3.1.3 - Case match present</h5>
|
387
377
|
|
388
378
|
<p>If a case match is present for the key, it'll try and compare:</p>
|
389
379
|
|
@@ -407,7 +397,7 @@
|
|
407
397
|
<span class='comment'># => [{:name=>"Robert", :age=>22}, {:name=>"Roberta", :age=>22}, {:name=>"Bar", :age=>18}]
|
408
398
|
</span></code></pre>
|
409
399
|
|
410
|
-
<h5>3.1.
|
400
|
+
<h5>3.1.4 - Predicate match present</h5>
|
411
401
|
|
412
402
|
<p>Much like our array friend above, if a predicate style method is present see if it'll work</p>
|
413
403
|
|
@@ -433,7 +423,7 @@
|
|
433
423
|
|
434
424
|
<p>Careful though, if the key doesn't exist that won't match. I'll have to consider this one later.</p>
|
435
425
|
|
436
|
-
<h5>3.1.
|
426
|
+
<h5>3.1.5 - String variant present</h5>
|
437
427
|
|
438
428
|
<p>Coerces the key into a string if possible, and sees if that can provide a valid case match</p>
|
439
429
|
|
@@ -441,7 +431,6 @@
|
|
441
431
|
|
442
432
|
<ol>
|
443
433
|
<li>Does the object respond to the match key?</li>
|
444
|
-
<li>Was a wildcard value provided?</li>
|
445
434
|
<li>Does the result of sending the match key as a method case match the provided value?</li>
|
446
435
|
<li>Does a predicate method exist for it?</li>
|
447
436
|
</ol>
|
@@ -450,11 +439,7 @@
|
|
450
439
|
|
451
440
|
<p>If it doesn't know how to deal with it, false out.</p>
|
452
441
|
|
453
|
-
<h5>3.2.2 -
|
454
|
-
|
455
|
-
<p>Same as other wildcards, but if the object doesn't respond to the method you specify it'll have false'd out before it reaches here.</p>
|
456
|
-
|
457
|
-
<h5>3.2.3 - Case match present</h5>
|
442
|
+
<h5>3.2.2 - Case match present</h5>
|
458
443
|
|
459
444
|
<p>This is where we can get into some interesting code, much like the hash selections above</p>
|
460
445
|
|
@@ -477,7 +462,7 @@
|
|
477
462
|
<span class='comment'># => [Person(Robert, 22), Person(Roberta, 22)]
|
478
463
|
</span></code></pre>
|
479
464
|
|
480
|
-
<h5>3.2.
|
465
|
+
<h5>3.2.3 - Predicate match present</h5>
|
481
466
|
|
482
467
|
<pre class="code ruby"><code class="ruby"><span class='comment'># Standalone
|
483
468
|
</span>
|
@@ -503,15 +488,15 @@
|
|
503
488
|
<p>This is where I start going a bit off into the weeds. We're going to try and get RHA style pattern matching in Ruby.</p>
|
504
489
|
|
505
490
|
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Robert</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='int'>22</span><span class='rbracket'>]</span><span class='comma'>,</span>
|
506
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
507
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
491
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='comma'>,</span> <span class='int'>20</span><span class='op'>..</span><span class='int'>99</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='comma'>,</span> <span class='id identifier rubyid_a'>a</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_n'>n</span><span class='embexpr_end'>}</span><span class='tstring_content'> is an adult that is </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_a'>a</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
492
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span>
|
508
493
|
<span class='rparen'>)</span>
|
509
494
|
<span class='comment'># => "Robert is an adult that is 22 years old"
|
510
495
|
</span></code></pre>
|
511
496
|
|
512
497
|
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_people_objects'>people_objects</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span>
|
513
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='
|
514
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
498
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='const'>Any</span><span class='comma'>,</span> <span class='label'>age:</span> <span class='int'>20</span><span class='op'>..</span><span class='int'>99</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_person'>person</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is an adult that is </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_age'>age</span><span class='embexpr_end'>}</span><span class='tstring_content'> years old</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
499
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span>
|
515
500
|
<span class='rparen'>)</span>
|
516
501
|
</code></pre>
|
517
502
|
|
@@ -533,7 +518,7 @@
|
|
533
518
|
<span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_person'>person</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>2</span><span class='rbracket'>]</span>
|
534
519
|
<span class='id identifier rubyid_person'>person</span>
|
535
520
|
<span class='rbrace'>}</span><span class='comma'>,</span>
|
536
|
-
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='
|
521
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span>
|
537
522
|
<span class='rparen'>)</span><span class='rparen'>)</span>
|
538
523
|
|
539
524
|
<span class='comment'># => [Person(age: 22, name: "Rob"), Person(age: 22, name: "Rob"), Person(age: 42, name: "Foo"), Person(age: 17, name: "Bar")]
|
@@ -582,7 +567,7 @@
|
|
582
567
|
|
583
568
|
<p>These examples will grow over the next few weeks as I think of more fun things to do with Qo. PRs welcome if you find fun uses!</p>
|
584
569
|
|
585
|
-
<h4>5.1 - JSON</h4>
|
570
|
+
<h4>5.1 - JSON and HTTP</h4>
|
586
571
|
|
587
572
|
<blockquote>
|
588
573
|
<p>Note that Qo does not support deep querying of hashes (yet)</p>
|
@@ -627,6 +612,35 @@
|
|
627
612
|
|
628
613
|
<p>Nifty!</p>
|
629
614
|
|
615
|
+
<h5>Yield Self HTTP status matching</h5>
|
616
|
+
|
617
|
+
<p>You can even use <code>#yield_self</code> to pipe values into a pattern matching block. In
|
618
|
+
this particular case it'll let you check against the type signatures of the
|
619
|
+
HTTP responses.</p>
|
620
|
+
|
621
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_get_url'>get_url</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span>
|
622
|
+
<span class='const'>Net</span><span class='op'>::</span><span class='const'>HTTP</span><span class='period'>.</span><span class='id identifier rubyid_get_response'>get_response</span><span class='lparen'>(</span><span class='const'>URI</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_yield_self'>yield_self</span><span class='lparen'>(</span><span class='op'>&</span><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match'><span class='object_link'><a href="Qo/PublicApi.html#match-instance_method" title="Qo::PublicApi#match (method)">match</a></span></span><span class='lparen'>(</span>
|
623
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>HTTPSuccess</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span> <span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
624
|
+
<span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Any</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span> <span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span> <span class='rbrace'>}</span>
|
625
|
+
<span class='rparen'>)</span><span class='rparen'>)</span>
|
626
|
+
<span class='kw'>end</span>
|
627
|
+
|
628
|
+
<span class='id identifier rubyid_get_url'>get_url</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://github.com/baweaver/qo</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
629
|
+
<span class='comment'># => 142387
|
630
|
+
</span><span class='id identifier rubyid_get_url'>get_url</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://github.com/baweaver/qo/does_not_exist</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
631
|
+
<span class='comment'># => RuntimeError: Not Found
|
632
|
+
</span></code></pre>
|
633
|
+
|
634
|
+
<p>The difference between this and case? Well, the first is you can pass this to
|
635
|
+
<code>yield_self</code> for a more inline solution. The second is that any Qo matcher can
|
636
|
+
be used in there, including predicate and content checks on the body:</p>
|
637
|
+
|
638
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Qo.html" title="Qo (module)">Qo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_m'>m</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>HTTPSuccess</span><span class='comma'>,</span> <span class='label'>body:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Qo</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span>
|
639
|
+
</code></pre>
|
640
|
+
|
641
|
+
<p>You could put as many checks as you want in there, or use different Qo matchers
|
642
|
+
nested to get even further in.</p>
|
643
|
+
|
630
644
|
<h4>5.2 - Opsy Stuff</h4>
|
631
645
|
|
632
646
|
<h5>5.2.1 - NMap</h5>
|
@@ -691,9 +705,9 @@ hosts.select(&Qo[IPAddr.new('192.168.1.1/8')])
|
|
691
705
|
</div></div>
|
692
706
|
|
693
707
|
<div id="footer">
|
694
|
-
Generated on Sun
|
708
|
+
Generated on Sun Aug 5 20:52:09 2018 by
|
695
709
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
696
|
-
0.9.12 (ruby-2.
|
710
|
+
0.9.12 (ruby-2.5.1).
|
697
711
|
</div>
|
698
712
|
|
699
713
|
</div>
|