dh_easy-test 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +7 -0
  4. data/.yardopts +1 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +21 -0
  8. data/README.md +20 -0
  9. data/Rakefile +22 -0
  10. data/dh_easy-test.gemspec +49 -0
  11. data/doc/DhEasy.html +117 -0
  12. data/doc/DhEasy/Core.html +117 -0
  13. data/doc/DhEasy/Core/Mock.html +115 -0
  14. data/doc/DhEasy/Core/Mock/FakeExecutor.html +2114 -0
  15. data/doc/DhEasy/Core/Modk.html +105 -0
  16. data/doc/DhEasy/Core/Plugin.html +117 -0
  17. data/doc/DhEasy/Core/Plugin/ExecutorBehavior.html +196 -0
  18. data/doc/DhEasy/Test.html +616 -0
  19. data/doc/DhEasy/Test/Helper.html +1710 -0
  20. data/doc/DhEasy/Test/RecordTask.html +2493 -0
  21. data/doc/_index.html +237 -0
  22. data/doc/class_list.html +51 -0
  23. data/doc/css/common.css +1 -0
  24. data/doc/css/full_list.css +58 -0
  25. data/doc/css/style.css +496 -0
  26. data/doc/file.README.html +91 -0
  27. data/doc/file_list.html +56 -0
  28. data/doc/frames.html +17 -0
  29. data/doc/index.html +91 -0
  30. data/doc/js/app.js +303 -0
  31. data/doc/js/full_list.js +216 -0
  32. data/doc/js/jquery.js +4 -0
  33. data/doc/method_list.html +427 -0
  34. data/doc/top-level-namespace.html +110 -0
  35. data/lib/dh_easy/test.rb +52 -0
  36. data/lib/dh_easy/test/helper.rb +225 -0
  37. data/lib/dh_easy/test/rake.rb +335 -0
  38. data/lib/dh_easy/test/version.rb +6 -0
  39. data/lib/dh_easy_override/core.rb +7 -0
  40. data/lib/dh_easy_override/core/mock.rb +8 -0
  41. data/lib/dh_easy_override/core/mock/fake_executor.rb +338 -0
  42. data/lib/dh_easy_override/core/plugin.rb +8 -0
  43. data/lib/dh_easy_override/core/plugin/executor_behavior.rb +11 -0
  44. metadata +200 -0
@@ -0,0 +1,1710 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: DhEasy::Test::Helper
8
+
9
+ &mdash; Documentation by YARD 0.9.20
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "DhEasy::Test::Helper";
19
+ relpath = '../../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../../_index.html">Index (H)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../../DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Test.html" title="DhEasy::Test (module)">Test</a></span></span>
41
+ &raquo;
42
+ <span class="title">Helper</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Module: DhEasy::Test::Helper
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ <dl>
80
+ <dt>Defined in:</dt>
81
+ <dd>lib/dh_easy/test/helper.rb</dd>
82
+ </dl>
83
+
84
+ </div>
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ <h2>
95
+ Class Method Summary
96
+ <small><a href="#" class="summary_toggle">collapse</a></small>
97
+ </h2>
98
+
99
+ <ul class="summary">
100
+
101
+ <li class="public ">
102
+ <span class="summary_signature">
103
+
104
+ <a href="#collection_diff-class_method" title="collection_diff (class method)">.<strong>collection_diff</strong>(items_a, items_b, opts = {}) &#x21d2; Hash </a>
105
+
106
+
107
+
108
+ </span>
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+ <span class="summary_desc"><div class='inline'>
119
+ <p>Generate a diff over 2 collections.</p>
120
+ </div></span>
121
+
122
+ </li>
123
+
124
+
125
+ <li class="public ">
126
+ <span class="summary_signature">
127
+
128
+ <a href="#collection_match%3F-class_method" title="collection_match? (class method)">.<strong>collection_match?</strong>(fragment, universe, opts = {}) &#x21d2; Boolean </a>
129
+
130
+
131
+
132
+ </span>
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+ <span class="summary_desc"><div class='inline'>
143
+ <p>Validate when an item collection match universe item collection.</p>
144
+ </div></span>
145
+
146
+ </li>
147
+
148
+
149
+ <li class="public ">
150
+ <span class="summary_signature">
151
+
152
+ <a href="#delete_keys_from!-class_method" title="delete_keys_from! (class method)">.<strong>delete_keys_from!</strong>(hash, keys) &#x21d2; Hash </a>
153
+
154
+
155
+
156
+ </span>
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+ <span class="summary_desc"><div class='inline'>
167
+ <p>Delete keys from a hash.</p>
168
+ </div></span>
169
+
170
+ </li>
171
+
172
+
173
+ <li class="public ">
174
+ <span class="summary_signature">
175
+
176
+ <a href="#load_file-class_method" title="load_file (class method)">.<strong>load_file</strong>(file_path, should_exists = false) &#x21d2; String<sup>?</sup> </a>
177
+
178
+
179
+
180
+ </span>
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+ <span class="summary_desc"><div class='inline'>
191
+ <p>Load and return file contents when exists.</p>
192
+ </div></span>
193
+
194
+ </li>
195
+
196
+
197
+ <li class="public ">
198
+ <span class="summary_signature">
199
+
200
+ <a href="#load_json_file-class_method" title="load_json_file (class method)">.<strong>load_json_file</strong>(file_path, should_exists = false) &#x21d2; Hash<sup>?</sup> </a>
201
+
202
+
203
+
204
+ </span>
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+ <span class="summary_desc"><div class='inline'>
215
+ <p>Load and return file contents as json when exists.</p>
216
+ </div></span>
217
+
218
+ </li>
219
+
220
+
221
+ <li class="public ">
222
+ <span class="summary_signature">
223
+
224
+ <a href="#match%3F-class_method" title="match? (class method)">.<strong>match?</strong>(element, filter, opts = {}) &#x21d2; Boolean </a>
225
+
226
+
227
+
228
+ </span>
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+ <span class="summary_desc"><div class='inline'>
239
+ <p>Check if an hash element match the filter.</p>
240
+ </div></span>
241
+
242
+ </li>
243
+
244
+
245
+ <li class="public ">
246
+ <span class="summary_signature">
247
+
248
+ <a href="#match_collections-class_method" title="match_collections (class method)">.<strong>match_collections</strong>(items_a, items_b, opts = {}) &#x21d2; Hash </a>
249
+
250
+
251
+
252
+ </span>
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <span class="summary_desc"><div class='inline'>
263
+ <p>Match two collections and calculate diff.</p>
264
+ </div></span>
265
+
266
+ </li>
267
+
268
+
269
+ <li class="public ">
270
+ <span class="summary_signature">
271
+
272
+ <a href="#sanitize-class_method" title="sanitize (class method)">.<strong>sanitize</strong>(raw_hash, opts) &#x21d2; Hash </a>
273
+
274
+
275
+
276
+ </span>
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+ <span class="summary_desc"><div class='inline'>
287
+ <p>Sanitize a copy of the hash provided.</p>
288
+ </div></span>
289
+
290
+ </li>
291
+
292
+
293
+ </ul>
294
+
295
+
296
+
297
+
298
+ <div id="class_method_details" class="method_details_list">
299
+ <h2>Class Method Details</h2>
300
+
301
+
302
+ <div class="method_details first">
303
+ <h3 class="signature first" id="collection_diff-class_method">
304
+
305
+ .<strong>collection_diff</strong>(items_a, items_b, opts = {}) &#x21d2; <tt>Hash</tt>
306
+
307
+
308
+
309
+
310
+
311
+ </h3><div class="docstring">
312
+ <div class="discussion">
313
+
314
+ <p>Generate a diff over 2 collections.</p>
315
+
316
+
317
+ </div>
318
+ </div>
319
+ <div class="tags">
320
+ <p class="tag_title">Parameters:</p>
321
+ <ul class="param">
322
+
323
+ <li>
324
+
325
+ <span class='name'>items_a</span>
326
+
327
+
328
+ <span class='type'>(<tt>Array</tt>)</span>
329
+
330
+
331
+
332
+ &mdash;
333
+ <div class='inline'>
334
+ <p>List of items to diff.</p>
335
+ </div>
336
+
337
+ </li>
338
+
339
+ <li>
340
+
341
+ <span class='name'>items_b</span>
342
+
343
+
344
+ <span class='type'>(<tt>Array</tt>)</span>
345
+
346
+
347
+
348
+ &mdash;
349
+ <div class='inline'>
350
+ <p>List of items to diff.</p>
351
+ </div>
352
+
353
+ </li>
354
+
355
+ <li>
356
+
357
+ <span class='name'>opts</span>
358
+
359
+
360
+ <span class='type'>(<tt>Hash</tt>)</span>
361
+
362
+
363
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
364
+
365
+
366
+ &mdash;
367
+ <div class='inline'>
368
+ <p>({}) Configuration options.</p>
369
+ </div>
370
+
371
+ </li>
372
+
373
+ </ul>
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
383
+ <ul class="option">
384
+
385
+ <li>
386
+ <span class="name">:exact_match</span>
387
+ <span class="type">(<tt>Boolean</tt>)</span>
388
+ <span class="default">
389
+
390
+ &mdash; default:
391
+ <tt>true</tt>
392
+
393
+ </span>
394
+
395
+ &mdash; <div class='inline'>
396
+ <p>Fragmenent should match element exactly.</p>
397
+ </div>
398
+
399
+ </li>
400
+
401
+ <li>
402
+ <span class="name">:deep_stringify</span>
403
+ <span class="type">(<tt>Boolean</tt>)</span>
404
+ <span class="default">
405
+
406
+ </span>
407
+
408
+ &mdash; <div class='inline'>
409
+ <p>If `true` then stringify all hash keys including sublevels before matching.</p>
410
+ </div>
411
+
412
+ </li>
413
+
414
+ <li>
415
+ <span class="name">:sanitize</span>
416
+ <span class="type">(<tt>Boolean</tt>)</span>
417
+ <span class="default">
418
+
419
+ &mdash; default:
420
+ <tt>true</tt>
421
+
422
+ </span>
423
+
424
+ &mdash; <div class='inline'>
425
+ <p>Sanitize element and filters when `true`.</p>
426
+ </div>
427
+
428
+ </li>
429
+
430
+ <li>
431
+ <span class="name">:skip_keys</span>
432
+ <span class="type">(<tt>Array</tt>, <tt>nil</tt>)</span>
433
+ <span class="default">
434
+
435
+ &mdash; default:
436
+ <tt>nil</tt>
437
+
438
+ </span>
439
+
440
+ &mdash; <div class='inline'>
441
+ <p>Keys to skip on match.</p>
442
+ </div>
443
+
444
+ </li>
445
+
446
+ <li>
447
+ <span class="name">:compare_way</span>
448
+ <span class="type">(<tt>Symbol</tt>)</span>
449
+ <span class="default">
450
+
451
+ &mdash; default:
452
+ <tt>:both</tt>
453
+
454
+ </span>
455
+
456
+ &mdash; <div class='inline'>
457
+ <p>Comparison way sense:</p>
458
+ <ul><li>
459
+ <p>`:both` Compare left and right.</p>
460
+ </li><li>
461
+ <p>`:right` Compare if `items_a` are inside `items_b`.</p>
462
+ </li><li>
463
+ <p>`:left` Compare if `items_b` are inside `items_a`.</p>
464
+ </li></ul>
465
+ </div>
466
+
467
+ </li>
468
+
469
+ </ul>
470
+
471
+
472
+ <p class="tag_title">Returns:</p>
473
+ <ul class="return">
474
+
475
+ <li>
476
+
477
+
478
+ <span class='type'>(<tt>Hash</tt>)</span>
479
+
480
+
481
+
482
+ &mdash;
483
+ <div class='inline'>
484
+ <p>Diff results as follows:</p>
485
+ <ul><li>
486
+ <p>`[Array] :items_a` Diff items on `items_a` collection.</p>
487
+ </li><li>
488
+ <p>`[Array] :items_b` Diff items on `items_b` collection.</p>
489
+ </li><li>
490
+ <p>`[Boolean] :match` `true` when all items match else `false`.</p>
491
+ </li></ul>
492
+ </div>
493
+
494
+ </li>
495
+
496
+ </ul>
497
+
498
+ </div><table class="source_code">
499
+ <tr>
500
+ <td>
501
+ <pre class="lines">
502
+
503
+
504
+ 121
505
+ 122
506
+ 123
507
+ 124
508
+ 125
509
+ 126
510
+ 127
511
+ 128
512
+ 129
513
+ 130
514
+ 131
515
+ 132
516
+ 133
517
+ 134
518
+ 135
519
+ 136
520
+ 137
521
+ 138
522
+ 139
523
+ 140
524
+ 141
525
+ 142
526
+ 143
527
+ 144
528
+ 145
529
+ 146
530
+ 147
531
+ 148
532
+ 149
533
+ 150
534
+ 151
535
+ 152
536
+ 153
537
+ 154
538
+ 155
539
+ 156
540
+ 157
541
+ 158
542
+ 159</pre>
543
+ </td>
544
+ <td>
545
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 121</span>
546
+
547
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_collection_diff'>collection_diff</span> <span class='id identifier rubyid_items_a'>items_a</span><span class='comma'>,</span> <span class='id identifier rubyid_items_b'>items_b</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
548
+ <span class='comment'># TODO: Improve this function
549
+ </span> <span class='comment'>#raise NotImplementedError.new(&#39;Current status WIP, don\&#39;t use it for now.&#39;)
550
+ </span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
551
+ <span class='label'>exact_match:</span> <span class='kw'>true</span><span class='comma'>,</span>
552
+ <span class='label'>deep_stringify:</span> <span class='kw'>true</span><span class='comma'>,</span>
553
+ <span class='label'>sanitize:</span> <span class='kw'>true</span><span class='comma'>,</span>
554
+ <span class='label'>skip_keys:</span> <span class='kw'>nil</span><span class='comma'>,</span>
555
+ <span class='label'>compare_way:</span> <span class='symbol'>:both</span>
556
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span> <span class='id identifier rubyid_opts'>opts</span>
557
+
558
+ <span class='comment'># Match collections items
559
+ </span> <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='kw'>nil</span>
560
+ <span class='id identifier rubyid_compare_right'>compare_right</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:compare_way</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:right</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:compare_way</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:both</span>
561
+ <span class='id identifier rubyid_compare_left'>compare_left</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:compare_way</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:left</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:compare_way</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:both</span>
562
+ <span class='id identifier rubyid_items_a'>items_a</span> <span class='op'>=</span> <span class='id identifier rubyid_items_a'>items_a</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_a'>a</span><span class='comma'>,</span><span class='id identifier rubyid_b'>b</span><span class='op'>|</span><span class='id identifier rubyid_b'>b</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;=&gt;</span> <span class='id identifier rubyid_a'>a</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='rbrace'>}</span>
563
+ <span class='id identifier rubyid_items_b'>items_b</span> <span class='op'>=</span> <span class='id identifier rubyid_items_b'>items_b</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_a'>a</span><span class='comma'>,</span><span class='id identifier rubyid_b'>b</span><span class='op'>|</span><span class='id identifier rubyid_b'>b</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;=&gt;</span> <span class='id identifier rubyid_a'>a</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='rbrace'>}</span>
564
+ <span class='id identifier rubyid_remaining_items'>remaining_items</span> <span class='op'>=</span> <span class='id identifier rubyid_items_b'>items_b</span> <span class='op'>+</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
565
+ <span class='id identifier rubyid_not_found'>not_found</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
566
+ <span class='id identifier rubyid_items_a'>items_a</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item_a'>item_a</span><span class='op'>|</span>
567
+ <span class='id identifier rubyid_found'>found</span> <span class='op'>=</span> <span class='id identifier rubyid_remaining_items'>remaining_items</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item_b'>item_b</span><span class='op'>|</span>
568
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='kw'>false</span>
569
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>||=</span> <span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='id identifier rubyid_item_a'>item_a</span><span class='comma'>,</span> <span class='id identifier rubyid_item_b'>item_b</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_compare_left'>compare_left</span>
570
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>||=</span> <span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='id identifier rubyid_item_b'>item_b</span><span class='comma'>,</span> <span class='id identifier rubyid_item_a'>item_a</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_compare_right'>compare_right</span>
571
+ <span class='id identifier rubyid_match'>match</span>
572
+ <span class='kw'>end</span>
573
+
574
+ <span class='comment'># Save diff
575
+ </span> <span class='id identifier rubyid_not_found'>not_found</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_item_a'>item_a</span> <span class='kw'>if</span> <span class='id identifier rubyid_found'>found</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
576
+ <span class='id identifier rubyid_remaining_items'>remaining_items</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_found'>found</span>
577
+ <span class='kw'>end</span>
578
+
579
+ <span class='comment'># Send diff results
580
+ </span> <span class='lbrace'>{</span>
581
+ <span class='label'>items_a:</span> <span class='id identifier rubyid_not_found'>not_found</span><span class='comma'>,</span>
582
+ <span class='label'>items_b:</span> <span class='id identifier rubyid_remaining_items'>remaining_items</span><span class='comma'>,</span>
583
+ <span class='label'>match:</span> <span class='lparen'>(</span><span class='id identifier rubyid_not_found'>not_found</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_remaining_items'>remaining_items</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span><span class='rparen'>)</span>
584
+ <span class='rbrace'>}</span>
585
+ <span class='kw'>end</span></pre>
586
+ </td>
587
+ </tr>
588
+ </table>
589
+ </div>
590
+
591
+ <div class="method_details ">
592
+ <h3 class="signature " id="collection_match?-class_method">
593
+
594
+ .<strong>collection_match?</strong>(fragment, universe, opts = {}) &#x21d2; <tt>Boolean</tt>
595
+
596
+
597
+
598
+
599
+
600
+ </h3><div class="docstring">
601
+ <div class="discussion">
602
+
603
+ <p>Validate when an item collection match universe item collection.</p>
604
+
605
+
606
+ </div>
607
+ </div>
608
+ <div class="tags">
609
+ <p class="tag_title">Parameters:</p>
610
+ <ul class="param">
611
+
612
+ <li>
613
+
614
+ <span class='name'>fragment</span>
615
+
616
+
617
+ <span class='type'>(<tt>Array</tt>)</span>
618
+
619
+
620
+
621
+ &mdash;
622
+ <div class='inline'>
623
+ <p>Fragment of universe items to match.</p>
624
+ </div>
625
+
626
+ </li>
627
+
628
+ <li>
629
+
630
+ <span class='name'>universe</span>
631
+
632
+
633
+ <span class='type'>(<tt>Array</tt>)</span>
634
+
635
+
636
+
637
+ &mdash;
638
+ <div class='inline'>
639
+ <p>List of items.</p>
640
+ </div>
641
+
642
+ </li>
643
+
644
+ <li>
645
+
646
+ <span class='name'>opts</span>
647
+
648
+
649
+ <span class='type'>(<tt>Hash</tt>)</span>
650
+
651
+
652
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
653
+
654
+
655
+ &mdash;
656
+ <div class='inline'>
657
+ <p>({}) Configuration options.</p>
658
+ </div>
659
+
660
+ </li>
661
+
662
+ </ul>
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
672
+ <ul class="option">
673
+
674
+ <li>
675
+ <span class="name">:exact_match</span>
676
+ <span class="type">(<tt>Boolean</tt>)</span>
677
+ <span class="default">
678
+
679
+ &mdash; default:
680
+ <tt>true</tt>
681
+
682
+ </span>
683
+
684
+ &mdash; <div class='inline'>
685
+ <p>Fragmenent should match element exactly.</p>
686
+ </div>
687
+
688
+ </li>
689
+
690
+ <li>
691
+ <span class="name">:same_count</span>
692
+ <span class="type">(<tt>Boolean</tt>)</span>
693
+ <span class="default">
694
+
695
+ &mdash; default:
696
+ <tt>true</tt>
697
+
698
+ </span>
699
+
700
+ &mdash; <div class='inline'>
701
+ <p>Fragment item count should match universe item count exactly.</p>
702
+ </div>
703
+
704
+ </li>
705
+
706
+ <li>
707
+ <span class="name">:deep_stringify</span>
708
+ <span class="type">(<tt>Boolean</tt>)</span>
709
+ <span class="default">
710
+
711
+ </span>
712
+
713
+ &mdash; <div class='inline'>
714
+ <p>If `true` then stringify all hash keys including sublevels before matching.</p>
715
+ </div>
716
+
717
+ </li>
718
+
719
+ <li>
720
+ <span class="name">:sanitize</span>
721
+ <span class="type">(<tt>Boolean</tt>)</span>
722
+ <span class="default">
723
+
724
+ &mdash; default:
725
+ <tt>true</tt>
726
+
727
+ </span>
728
+
729
+ &mdash; <div class='inline'>
730
+ <p>Sanitize element and filters when `true`.</p>
731
+ </div>
732
+
733
+ </li>
734
+
735
+ <li>
736
+ <span class="name">:skip_keys</span>
737
+ <span class="type">(<tt>Array</tt>, <tt>nil</tt>)</span>
738
+ <span class="default">
739
+
740
+ &mdash; default:
741
+ <tt>nil</tt>
742
+
743
+ </span>
744
+
745
+ &mdash; <div class='inline'>
746
+ <p>Keys to skip on match.</p>
747
+ </div>
748
+
749
+ </li>
750
+
751
+ <li>
752
+ <span class="name">:compare_way</span>
753
+ <span class="type">(<tt>Symbol</tt>)</span>
754
+ <span class="default">
755
+
756
+ &mdash; default:
757
+ <tt>:both</tt>
758
+
759
+ </span>
760
+
761
+ &mdash; <div class='inline'>
762
+ <p>Comparison way sense:</p>
763
+ <ul><li>
764
+ <p>`:both` Compare left and right.</p>
765
+ </li><li>
766
+ <p>`:right` Compare if `items_a` are inside `items_b`.</p>
767
+ </li><li>
768
+ <p>`:left` Compare if `items_b` are inside `items_a`.</p>
769
+ </li></ul>
770
+ </div>
771
+
772
+ </li>
773
+
774
+ </ul>
775
+
776
+
777
+ <p class="tag_title">Returns:</p>
778
+ <ul class="return">
779
+
780
+ <li>
781
+
782
+
783
+ <span class='type'>(<tt>Boolean</tt>)</span>
784
+
785
+
786
+
787
+ </li>
788
+
789
+ </ul>
790
+
791
+ </div><table class="source_code">
792
+ <tr>
793
+ <td>
794
+ <pre class="lines">
795
+
796
+
797
+ 181
798
+ 182
799
+ 183
800
+ 184
801
+ 185
802
+ 186
803
+ 187
804
+ 188
805
+ 189
806
+ 190
807
+ 191
808
+ 192
809
+ 193
810
+ 194
811
+ 195
812
+ 196
813
+ 197</pre>
814
+ </td>
815
+ <td>
816
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 181</span>
817
+
818
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_collection_match?'>collection_match?</span> <span class='id identifier rubyid_fragment'>fragment</span><span class='comma'>,</span> <span class='id identifier rubyid_universe'>universe</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
819
+ <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
820
+ <span class='label'>exact_match:</span> <span class='kw'>true</span><span class='comma'>,</span>
821
+ <span class='label'>same_count:</span> <span class='kw'>true</span><span class='comma'>,</span>
822
+ <span class='label'>deep_stringify:</span> <span class='kw'>true</span><span class='comma'>,</span>
823
+ <span class='label'>sanitize:</span> <span class='kw'>true</span><span class='comma'>,</span>
824
+ <span class='label'>skip_keys:</span> <span class='kw'>nil</span><span class='comma'>,</span>
825
+ <span class='label'>compare_way:</span> <span class='symbol'>:both</span>
826
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span> <span class='id identifier rubyid_opts'>opts</span>
827
+
828
+ <span class='comment'># False when item collections count are different
829
+ </span> <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:match_quantity</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_fragment'>fragment</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>!=</span> <span class='id identifier rubyid_universe'>universe</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span>
830
+
831
+ <span class='id identifier rubyid_diff'>diff</span> <span class='op'>=</span> <span class='id identifier rubyid_collection_diff'>collection_diff</span> <span class='id identifier rubyid_fragment'>fragment</span><span class='comma'>,</span> <span class='id identifier rubyid_universe'>universe</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span>
832
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='id identifier rubyid_diff'>diff</span><span class='lbracket'>[</span><span class='symbol'>:items_a</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_diff'>diff</span><span class='lbracket'>[</span><span class='symbol'>:items_b</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span>
833
+ <span class='id identifier rubyid_match'>match</span>
834
+ <span class='kw'>end</span></pre>
835
+ </td>
836
+ </tr>
837
+ </table>
838
+ </div>
839
+
840
+ <div class="method_details ">
841
+ <h3 class="signature " id="delete_keys_from!-class_method">
842
+
843
+ .<strong>delete_keys_from!</strong>(hash, keys) &#x21d2; <tt>Hash</tt>
844
+
845
+
846
+
847
+
848
+
849
+ </h3><div class="docstring">
850
+ <div class="discussion">
851
+
852
+ <p>Delete keys from a hash.</p>
853
+
854
+
855
+ </div>
856
+ </div>
857
+ <div class="tags">
858
+ <p class="tag_title">Parameters:</p>
859
+ <ul class="param">
860
+
861
+ <li>
862
+
863
+ <span class='name'>hash</span>
864
+
865
+
866
+ <span class='type'>(<tt>Hash</tt>)</span>
867
+
868
+
869
+
870
+ &mdash;
871
+ <div class='inline'>
872
+ <p>Base hash to exclude from.</p>
873
+ </div>
874
+
875
+ </li>
876
+
877
+ <li>
878
+
879
+ <span class='name'>keys</span>
880
+
881
+
882
+ <span class='type'>(<tt>Array</tt>)</span>
883
+
884
+
885
+
886
+ &mdash;
887
+ <div class='inline'>
888
+ <p>Keys to exclude.</p>
889
+ </div>
890
+
891
+ </li>
892
+
893
+ </ul>
894
+
895
+ <p class="tag_title">Returns:</p>
896
+ <ul class="return">
897
+
898
+ <li>
899
+
900
+
901
+ <span class='type'>(<tt>Hash</tt>)</span>
902
+
903
+
904
+
905
+ </li>
906
+
907
+ </ul>
908
+
909
+ </div><table class="source_code">
910
+ <tr>
911
+ <td>
912
+ <pre class="lines">
913
+
914
+
915
+ 33
916
+ 34
917
+ 35
918
+ 36
919
+ 37</pre>
920
+ </td>
921
+ <td>
922
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 33</span>
923
+
924
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_delete_keys_from!'>delete_keys_from!</span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_keys'>keys</span>
925
+ <span class='kw'>return</span> <span class='id identifier rubyid_hash'>hash</span> <span class='kw'>if</span> <span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
926
+ <span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_k'>k</span><span class='rbrace'>}</span>
927
+ <span class='id identifier rubyid_hash'>hash</span>
928
+ <span class='kw'>end</span></pre>
929
+ </td>
930
+ </tr>
931
+ </table>
932
+ </div>
933
+
934
+ <div class="method_details ">
935
+ <h3 class="signature " id="load_file-class_method">
936
+
937
+ .<strong>load_file</strong>(file_path, should_exists = false) &#x21d2; <tt>String</tt><sup>?</sup>
938
+
939
+
940
+
941
+
942
+
943
+ </h3><div class="docstring">
944
+ <div class="discussion">
945
+
946
+ <p>Load and return file contents when exists.</p>
947
+
948
+
949
+ </div>
950
+ </div>
951
+ <div class="tags">
952
+ <p class="tag_title">Parameters:</p>
953
+ <ul class="param">
954
+
955
+ <li>
956
+
957
+ <span class='name'>file_path</span>
958
+
959
+
960
+ <span class='type'>(<tt>String</tt>)</span>
961
+
962
+
963
+
964
+ &mdash;
965
+ <div class='inline'>
966
+ <p>File path to load.</p>
967
+ </div>
968
+
969
+ </li>
970
+
971
+ <li>
972
+
973
+ <span class='name'>should_exists</span>
974
+
975
+
976
+ <span class='type'>(<tt>Boolean</tt>)</span>
977
+
978
+
979
+ <em class="default">(defaults to: <tt>false</tt>)</em>
980
+
981
+
982
+ &mdash;
983
+ <div class='inline'>
984
+ <p>(false) Enforce file existance validation.</p>
985
+ </div>
986
+
987
+ </li>
988
+
989
+ </ul>
990
+
991
+ <p class="tag_title">Returns:</p>
992
+ <ul class="return">
993
+
994
+ <li>
995
+
996
+
997
+ <span class='type'>(<tt>String</tt>, <tt>nil</tt>)</span>
998
+
999
+
1000
+
1001
+ &mdash;
1002
+ <div class='inline'>
1003
+ <p>File contents.</p>
1004
+ </div>
1005
+
1006
+ </li>
1007
+
1008
+ </ul>
1009
+
1010
+ </div><table class="source_code">
1011
+ <tr>
1012
+ <td>
1013
+ <pre class="lines">
1014
+
1015
+
1016
+ 10
1017
+ 11
1018
+ 12
1019
+ 13</pre>
1020
+ </td>
1021
+ <td>
1022
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 10</span>
1023
+
1024
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_load_file'>load_file</span> <span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='id identifier rubyid_should_exists'>should_exists</span> <span class='op'>=</span> <span class='kw'>false</span>
1025
+ <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_should_exists'>should_exists</span> <span class='op'>||</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='rparen'>)</span>
1026
+ <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>r</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>encoding:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>UTF-8</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span>
1027
+ <span class='kw'>end</span></pre>
1028
+ </td>
1029
+ </tr>
1030
+ </table>
1031
+ </div>
1032
+
1033
+ <div class="method_details ">
1034
+ <h3 class="signature " id="load_json_file-class_method">
1035
+
1036
+ .<strong>load_json_file</strong>(file_path, should_exists = false) &#x21d2; <tt>Hash</tt><sup>?</sup>
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+ </h3><div class="docstring">
1043
+ <div class="discussion">
1044
+
1045
+ <p>Load and return file contents as json when exists.</p>
1046
+
1047
+
1048
+ </div>
1049
+ </div>
1050
+ <div class="tags">
1051
+ <p class="tag_title">Parameters:</p>
1052
+ <ul class="param">
1053
+
1054
+ <li>
1055
+
1056
+ <span class='name'>file_path</span>
1057
+
1058
+
1059
+ <span class='type'>(<tt>String</tt>)</span>
1060
+
1061
+
1062
+
1063
+ &mdash;
1064
+ <div class='inline'>
1065
+ <p>File path to load.</p>
1066
+ </div>
1067
+
1068
+ </li>
1069
+
1070
+ <li>
1071
+
1072
+ <span class='name'>should_exists</span>
1073
+
1074
+
1075
+ <span class='type'>(<tt>Boolean</tt>)</span>
1076
+
1077
+
1078
+ <em class="default">(defaults to: <tt>false</tt>)</em>
1079
+
1080
+
1081
+ &mdash;
1082
+ <div class='inline'>
1083
+ <p>(false) Enforce file existance validation.</p>
1084
+ </div>
1085
+
1086
+ </li>
1087
+
1088
+ </ul>
1089
+
1090
+ <p class="tag_title">Returns:</p>
1091
+ <ul class="return">
1092
+
1093
+ <li>
1094
+
1095
+
1096
+ <span class='type'>(<tt>Hash</tt>, <tt>nil</tt>)</span>
1097
+
1098
+
1099
+
1100
+ &mdash;
1101
+ <div class='inline'>
1102
+ <p>Json file contents.</p>
1103
+ </div>
1104
+
1105
+ </li>
1106
+
1107
+ </ul>
1108
+
1109
+ </div><table class="source_code">
1110
+ <tr>
1111
+ <td>
1112
+ <pre class="lines">
1113
+
1114
+
1115
+ 21
1116
+ 22
1117
+ 23
1118
+ 24
1119
+ 25</pre>
1120
+ </td>
1121
+ <td>
1122
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 21</span>
1123
+
1124
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_load_json_file'>load_json_file</span> <span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='id identifier rubyid_should_exists'>should_exists</span> <span class='op'>=</span> <span class='kw'>false</span>
1125
+ <span class='id identifier rubyid_file_content'>file_content</span> <span class='op'>=</span> <span class='id identifier rubyid_load_file'>load_file</span> <span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='id identifier rubyid_should_exists'>should_exists</span>
1126
+ <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_file_content'>file_content</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_file_content'>file_content</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
1127
+ <span class='const'>JSON</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_file_content'>file_content</span><span class='rparen'>)</span>
1128
+ <span class='kw'>end</span></pre>
1129
+ </td>
1130
+ </tr>
1131
+ </table>
1132
+ </div>
1133
+
1134
+ <div class="method_details ">
1135
+ <h3 class="signature " id="match?-class_method">
1136
+
1137
+ .<strong>match?</strong>(element, filter, opts = {}) &#x21d2; <tt>Boolean</tt>
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+ </h3><div class="docstring">
1144
+ <div class="discussion">
1145
+
1146
+ <p>Check if an hash element match the filter.</p>
1147
+
1148
+
1149
+ </div>
1150
+ </div>
1151
+ <div class="tags">
1152
+ <p class="tag_title">Parameters:</p>
1153
+ <ul class="param">
1154
+
1155
+ <li>
1156
+
1157
+ <span class='name'>element</span>
1158
+
1159
+
1160
+ <span class='type'>(<tt>Hash</tt>)</span>
1161
+
1162
+
1163
+
1164
+ &mdash;
1165
+ <div class='inline'>
1166
+ <p>Element to match.</p>
1167
+ </div>
1168
+
1169
+ </li>
1170
+
1171
+ <li>
1172
+
1173
+ <span class='name'>filter</span>
1174
+
1175
+
1176
+ <span class='type'>(<tt>Hash</tt>)</span>
1177
+
1178
+
1179
+
1180
+ &mdash;
1181
+ <div class='inline'>
1182
+ <p>Filters to apply.</p>
1183
+ </div>
1184
+
1185
+ </li>
1186
+
1187
+ <li>
1188
+
1189
+ <span class='name'>opts</span>
1190
+
1191
+
1192
+ <span class='type'>(<tt>Hash</tt>)</span>
1193
+
1194
+
1195
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
1196
+
1197
+
1198
+ &mdash;
1199
+ <div class='inline'>
1200
+ <p>({}) Configuration options.</p>
1201
+ </div>
1202
+
1203
+ </li>
1204
+
1205
+ </ul>
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
1215
+ <ul class="option">
1216
+
1217
+ <li>
1218
+ <span class="name">:sanitize</span>
1219
+ <span class="type">(<tt>Boolean</tt>)</span>
1220
+ <span class="default">
1221
+
1222
+ &mdash; default:
1223
+ <tt>true</tt>
1224
+
1225
+ </span>
1226
+
1227
+ &mdash; <div class='inline'>
1228
+ <p>Sanitize element and filters when `true`.</p>
1229
+ </div>
1230
+
1231
+ </li>
1232
+
1233
+ <li>
1234
+ <span class="name">:deep_stringify</span>
1235
+ <span class="type">(<tt>Boolean</tt>)</span>
1236
+ <span class="default">
1237
+
1238
+ </span>
1239
+
1240
+ &mdash; <div class='inline'>
1241
+ <p>If `true` then stringify all hash keys including sublevels before matching.</p>
1242
+ </div>
1243
+
1244
+ </li>
1245
+
1246
+ <li>
1247
+ <span class="name">:exact_match</span>
1248
+ <span class="type">(<tt>Boolean</tt>)</span>
1249
+ <span class="default">
1250
+
1251
+ &mdash; default:
1252
+ <tt>true</tt>
1253
+
1254
+ </span>
1255
+
1256
+ &mdash; <div class='inline'>
1257
+ <p>Filter should match element exactly.</p>
1258
+ </div>
1259
+
1260
+ </li>
1261
+
1262
+ <li>
1263
+ <span class="name">:skip_keys</span>
1264
+ <span class="type">(<tt>Array</tt>, <tt>nil</tt>)</span>
1265
+ <span class="default">
1266
+
1267
+ &mdash; default:
1268
+ <tt>nil</tt>
1269
+
1270
+ </span>
1271
+
1272
+ &mdash; <div class='inline'>
1273
+ <p>Keys to skip on match.</p>
1274
+ </div>
1275
+
1276
+ </li>
1277
+
1278
+ </ul>
1279
+
1280
+
1281
+ <p class="tag_title">Returns:</p>
1282
+ <ul class="return">
1283
+
1284
+ <li>
1285
+
1286
+
1287
+ <span class='type'>(<tt>Boolean</tt>)</span>
1288
+
1289
+
1290
+
1291
+ &mdash;
1292
+ <div class='inline'>
1293
+ <p>`true` when element match filters, else `false`.</p>
1294
+ </div>
1295
+
1296
+ </li>
1297
+
1298
+ </ul>
1299
+
1300
+ </div><table class="source_code">
1301
+ <tr>
1302
+ <td>
1303
+ <pre class="lines">
1304
+
1305
+
1306
+ 74
1307
+ 75
1308
+ 76
1309
+ 77
1310
+ 78
1311
+ 79
1312
+ 80
1313
+ 81
1314
+ 82
1315
+ 83
1316
+ 84
1317
+ 85
1318
+ 86
1319
+ 87
1320
+ 88
1321
+ 89
1322
+ 90
1323
+ 91
1324
+ 92
1325
+ 93
1326
+ 94
1327
+ 95
1328
+ 96
1329
+ 97
1330
+ 98</pre>
1331
+ </td>
1332
+ <td>
1333
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 74</span>
1334
+
1335
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_match?'>match?</span> <span class='id identifier rubyid_element'>element</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1336
+ <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
1337
+ <span class='label'>sanitize:</span> <span class='kw'>true</span><span class='comma'>,</span>
1338
+ <span class='label'>deep_stringify:</span> <span class='kw'>true</span><span class='comma'>,</span>
1339
+ <span class='label'>exact_match:</span> <span class='kw'>true</span><span class='comma'>,</span>
1340
+ <span class='label'>skip_keys:</span> <span class='kw'>nil</span>
1341
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span> <span class='id identifier rubyid_opts'>opts</span>
1342
+
1343
+ <span class='comment'># Sanitize element and filter when need
1344
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:sanitize</span><span class='rbracket'>]</span>
1345
+ <span class='id identifier rubyid_element'>element</span> <span class='op'>=</span> <span class='id identifier rubyid_sanitize'>sanitize</span> <span class='id identifier rubyid_element'>element</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span>
1346
+ <span class='id identifier rubyid_filter'>filter</span> <span class='op'>=</span> <span class='id identifier rubyid_sanitize'>sanitize</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span>
1347
+ <span class='kw'>end</span>
1348
+
1349
+ <span class='comment'># Validate exact match when need
1350
+ </span> <span class='id identifier rubyid_exact_match'>exact_match</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:exact_match</span><span class='rbracket'>]</span>
1351
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_exact_match'>exact_match</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>!=</span> <span class='id identifier rubyid_filter'>filter</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span>
1352
+
1353
+ <span class='comment'># Match element filter
1354
+ </span> <span class='id identifier rubyid_filter'>filter</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span>
1355
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_exact_match'>exact_match</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='rparen'>)</span>
1356
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_element'>element</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='id identifier rubyid_v'>v</span>
1357
+ <span class='kw'>end</span>
1358
+ <span class='kw'>true</span>
1359
+ <span class='kw'>end</span></pre>
1360
+ </td>
1361
+ </tr>
1362
+ </table>
1363
+ </div>
1364
+
1365
+ <div class="method_details ">
1366
+ <h3 class="signature " id="match_collections-class_method">
1367
+
1368
+ .<strong>match_collections</strong>(items_a, items_b, opts = {}) &#x21d2; <tt>Hash</tt>
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+ </h3><div class="docstring">
1375
+ <div class="discussion">
1376
+
1377
+ <p>Match two collections and calculate diff.</p>
1378
+
1379
+
1380
+ </div>
1381
+ </div>
1382
+ <div class="tags">
1383
+ <p class="tag_title">Parameters:</p>
1384
+ <ul class="param">
1385
+
1386
+ <li>
1387
+
1388
+ <span class='name'>items_a</span>
1389
+
1390
+
1391
+ <span class='type'>(<tt>Array</tt>)</span>
1392
+
1393
+
1394
+
1395
+ &mdash;
1396
+ <div class='inline'>
1397
+ <p>Item collection to match.</p>
1398
+ </div>
1399
+
1400
+ </li>
1401
+
1402
+ <li>
1403
+
1404
+ <span class='name'>items_b</span>
1405
+
1406
+
1407
+ <span class='type'>(<tt>Array</tt>)</span>
1408
+
1409
+
1410
+
1411
+ &mdash;
1412
+ <div class='inline'>
1413
+ <p>Item collection to match.</p>
1414
+ </div>
1415
+
1416
+ </li>
1417
+
1418
+ <li>
1419
+
1420
+ <span class='name'>opts</span>
1421
+
1422
+
1423
+ <span class='type'>(<tt>Hash</tt>)</span>
1424
+
1425
+
1426
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
1427
+
1428
+
1429
+ &mdash;
1430
+ <div class='inline'>
1431
+ <p>({}) Configuration options.</p>
1432
+ </div>
1433
+
1434
+ </li>
1435
+
1436
+ </ul>
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
1446
+ <ul class="option">
1447
+
1448
+ <li>
1449
+ <span class="name">:skip</span>
1450
+ <span class="type">(<tt>Array</tt>)</span>
1451
+ <span class="default">
1452
+
1453
+ &mdash; default:
1454
+ <tt>nil</tt>
1455
+
1456
+ </span>
1457
+
1458
+ &mdash; <div class='inline'>
1459
+ <p>Keys to skip on match.</p>
1460
+ </div>
1461
+
1462
+ </li>
1463
+
1464
+ <li>
1465
+ <span class="name">:compare_way</span>
1466
+ <span class="type">(<tt>Symbol</tt>)</span>
1467
+ <span class="default">
1468
+
1469
+ &mdash; default:
1470
+ <tt>:left</tt>
1471
+
1472
+ </span>
1473
+
1474
+ &mdash; <div class='inline'>
1475
+ <p>Comparison way sense:</p>
1476
+ <ul><li>
1477
+ <p>`:both` Compare left and right.</p>
1478
+ </li><li>
1479
+ <p>`:right` Compare if `items_a` are inside `items_b`.</p>
1480
+ </li><li>
1481
+ <p>`:left` Compare if `items_b` are inside `items_a`.</p>
1482
+ </li></ul>
1483
+ </div>
1484
+
1485
+ </li>
1486
+
1487
+ </ul>
1488
+
1489
+
1490
+ <p class="tag_title">Returns:</p>
1491
+ <ul class="return">
1492
+
1493
+ <li>
1494
+
1495
+
1496
+ <span class='type'>(<tt>Hash</tt>)</span>
1497
+
1498
+
1499
+
1500
+ &mdash;
1501
+ <div class='inline'>
1502
+ <p>A hash with the following key pairs:</p>
1503
+ <ul><li>
1504
+ <p>`[Hash] :diff` Diff results with `:items_a` and `:items_b` keys.</p>
1505
+ </li><li>
1506
+ <p>`[Boolean] :match` `true` when match else `false`.</p>
1507
+ </li></ul>
1508
+ </div>
1509
+
1510
+ </li>
1511
+
1512
+ </ul>
1513
+
1514
+ </div><table class="source_code">
1515
+ <tr>
1516
+ <td>
1517
+ <pre class="lines">
1518
+
1519
+
1520
+ 213
1521
+ 214
1522
+ 215
1523
+ 216
1524
+ 217
1525
+ 218
1526
+ 219
1527
+ 220
1528
+ 221
1529
+ 222</pre>
1530
+ </td>
1531
+ <td>
1532
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 213</span>
1533
+
1534
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_match_collections'>match_collections</span> <span class='id identifier rubyid_items_a'>items_a</span><span class='comma'>,</span> <span class='id identifier rubyid_items_b'>items_b</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1535
+ <span class='id identifier rubyid_diff'>diff</span> <span class='op'>=</span> <span class='id identifier rubyid_collection_diff'>collection_diff</span><span class='lparen'>(</span>
1536
+ <span class='id identifier rubyid_items_a'>items_a</span><span class='comma'>,</span>
1537
+ <span class='id identifier rubyid_items_b'>items_b</span><span class='comma'>,</span>
1538
+ <span class='label'>skip_keys:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:skip</span><span class='rbracket'>]</span><span class='comma'>,</span>
1539
+ <span class='label'>compare_way:</span> <span class='symbol'>:both</span>
1540
+ <span class='rparen'>)</span>
1541
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_diff'>diff</span><span class='lbracket'>[</span><span class='symbol'>:items_a</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_diff'>diff</span><span class='lbracket'>[</span><span class='symbol'>:items_b</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span><span class='rparen'>)</span>
1542
+ <span class='lbrace'>{</span><span class='label'>diff:</span> <span class='id identifier rubyid_diff'>diff</span><span class='comma'>,</span> <span class='label'>match:</span> <span class='id identifier rubyid_diff'>diff</span><span class='lbracket'>[</span><span class='symbol'>:match</span><span class='rbracket'>]</span><span class='rbrace'>}</span>
1543
+ <span class='kw'>end</span></pre>
1544
+ </td>
1545
+ </tr>
1546
+ </table>
1547
+ </div>
1548
+
1549
+ <div class="method_details ">
1550
+ <h3 class="signature " id="sanitize-class_method">
1551
+
1552
+ .<strong>sanitize</strong>(raw_hash, opts) &#x21d2; <tt>Hash</tt>
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+ </h3><div class="docstring">
1559
+ <div class="discussion">
1560
+
1561
+ <p>Sanitize a copy of the hash provided.</p>
1562
+
1563
+
1564
+ </div>
1565
+ </div>
1566
+ <div class="tags">
1567
+ <p class="tag_title">Parameters:</p>
1568
+ <ul class="param">
1569
+
1570
+ <li>
1571
+
1572
+ <span class='name'>raw_hash</span>
1573
+
1574
+
1575
+ <span class='type'>(<tt>Hash</tt>)</span>
1576
+
1577
+
1578
+
1579
+ &mdash;
1580
+ <div class='inline'>
1581
+ <p>Hash to sanitize.</p>
1582
+ </div>
1583
+
1584
+ </li>
1585
+
1586
+ <li>
1587
+
1588
+ <span class='name'>opts</span>
1589
+
1590
+
1591
+ <span class='type'>(<tt>Hash</tt>)</span>
1592
+
1593
+
1594
+
1595
+ &mdash;
1596
+ <div class='inline'>
1597
+ <p>({}) Configuration options.</p>
1598
+ </div>
1599
+
1600
+ </li>
1601
+
1602
+ </ul>
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
1610
+ <ul class="option">
1611
+
1612
+ <li>
1613
+ <span class="name">:deep_stringify</span>
1614
+ <span class="type">(<tt>Boolean</tt>)</span>
1615
+ <span class="default">
1616
+
1617
+ </span>
1618
+
1619
+ &mdash; <div class='inline'>
1620
+ <p>If `true` then stringify all hash keys including sublevels.</p>
1621
+ </div>
1622
+
1623
+ </li>
1624
+
1625
+ <li>
1626
+ <span class="name">:skip_keys</span>
1627
+ <span class="type">(<tt>Array</tt>, <tt>nil</tt>)</span>
1628
+ <span class="default">
1629
+
1630
+ &mdash; default:
1631
+ <tt>nil</tt>
1632
+
1633
+ </span>
1634
+
1635
+ &mdash; <div class='inline'>
1636
+ <p>Key array to delete from sanitized hash clone.</p>
1637
+ </div>
1638
+
1639
+ </li>
1640
+
1641
+ </ul>
1642
+
1643
+
1644
+ <p class="tag_title">Returns:</p>
1645
+ <ul class="return">
1646
+
1647
+ <li>
1648
+
1649
+
1650
+ <span class='type'>(<tt>Hash</tt>)</span>
1651
+
1652
+
1653
+
1654
+ &mdash;
1655
+ <div class='inline'>
1656
+ <p>Sanitized hash clone.</p>
1657
+ </div>
1658
+
1659
+ </li>
1660
+
1661
+ </ul>
1662
+
1663
+ </div><table class="source_code">
1664
+ <tr>
1665
+ <td>
1666
+ <pre class="lines">
1667
+
1668
+
1669
+ 49
1670
+ 50
1671
+ 51
1672
+ 52
1673
+ 53
1674
+ 54
1675
+ 55
1676
+ 56
1677
+ 57
1678
+ 58</pre>
1679
+ </td>
1680
+ <td>
1681
+ <pre class="code"><span class="info file"># File 'lib/dh_easy/test/helper.rb', line 49</span>
1682
+
1683
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_sanitize'>sanitize</span> <span class='id identifier rubyid_raw_hash'>raw_hash</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span>
1684
+ <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
1685
+ <span class='label'>deep_stringify:</span> <span class='kw'>true</span><span class='comma'>,</span>
1686
+ <span class='label'>skip_keys:</span> <span class='kw'>nil</span>
1687
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span> <span class='id identifier rubyid_opts'>opts</span>
1688
+ <span class='id identifier rubyid_hash'>hash</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:deep_stringify</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>?</span>
1689
+ <span class='const'><span class='object_link'><a href="../../DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Core.html" title="DhEasy::Core (module)">Core</a></span></span><span class='period'>.</span><span class='id identifier rubyid_deep_stringify_keys'>deep_stringify_keys</span><span class='lparen'>(</span><span class='id identifier rubyid_raw_hash'>raw_hash</span><span class='rparen'>)</span> <span class='op'>:</span>
1690
+ <span class='const'><span class='object_link'><a href="../../DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Core.html" title="DhEasy::Core (module)">Core</a></span></span><span class='period'>.</span><span class='id identifier rubyid_deep_clone'>deep_clone</span><span class='lparen'>(</span><span class='id identifier rubyid_raw_hash'>raw_hash</span><span class='rparen'>)</span>
1691
+ <span class='id identifier rubyid_delete_keys_from!'>delete_keys_from!</span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:skip_keys</span><span class='rbracket'>]</span>
1692
+ <span class='kw'>end</span></pre>
1693
+ </td>
1694
+ </tr>
1695
+ </table>
1696
+ </div>
1697
+
1698
+ </div>
1699
+
1700
+ </div>
1701
+
1702
+ <div id="footer">
1703
+ Generated on Wed Dec 4 23:16:05 2019 by
1704
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1705
+ 0.9.20 (ruby-2.5.3).
1706
+ </div>
1707
+
1708
+ </div>
1709
+ </body>
1710
+ </html>