csv_decision 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/README.md +11 -8
  4. data/benchmarks/rufus_decision.rb +9 -1
  5. data/csv_decision.gemspec +1 -1
  6. data/doc/CSVDecision/CellValidationError.html +1 -1
  7. data/doc/CSVDecision/Columns/Dictionary.html +29 -29
  8. data/doc/CSVDecision/Columns.html +394 -47
  9. data/doc/CSVDecision/Data.html +2 -2
  10. data/doc/CSVDecision/Decide.html +23 -159
  11. data/doc/CSVDecision/Decision.html +370 -32
  12. data/doc/CSVDecision/Defaults.html +1 -1
  13. data/doc/CSVDecision/Dictionary/Entry.html +157 -55
  14. data/doc/CSVDecision/Dictionary.html +37 -21
  15. data/doc/CSVDecision/Error.html +1 -1
  16. data/doc/CSVDecision/FileError.html +1 -1
  17. data/doc/CSVDecision/Header.html +142 -1
  18. data/doc/CSVDecision/Index.html +741 -0
  19. data/doc/CSVDecision/Input.html +14 -61
  20. data/doc/CSVDecision/Load.html +1 -1
  21. data/doc/CSVDecision/Matchers/Constant.html +1 -1
  22. data/doc/CSVDecision/Matchers/Function.html +1 -1
  23. data/doc/CSVDecision/Matchers/Guard.html +13 -147
  24. data/doc/CSVDecision/Matchers/Matcher.html +13 -13
  25. data/doc/CSVDecision/Matchers/Numeric.html +1 -1
  26. data/doc/CSVDecision/Matchers/Pattern.html +1 -1
  27. data/doc/CSVDecision/Matchers/Proc.html +147 -14
  28. data/doc/CSVDecision/Matchers/Range.html +1 -1
  29. data/doc/CSVDecision/Matchers/Symbol.html +1 -1
  30. data/doc/CSVDecision/Matchers.html +55 -162
  31. data/doc/CSVDecision/Options.html +21 -21
  32. data/doc/CSVDecision/Parse.html +2 -180
  33. data/doc/CSVDecision/Result.html +220 -38
  34. data/doc/CSVDecision/ScanRow.html +69 -325
  35. data/doc/CSVDecision/Table.html +128 -40
  36. data/doc/CSVDecision/TableValidationError.html +1 -1
  37. data/doc/CSVDecision/Validate.html +1 -1
  38. data/doc/CSVDecision.html +4 -4
  39. data/doc/_index.html +8 -8
  40. data/doc/class_list.html +1 -1
  41. data/doc/file.README.html +13 -11
  42. data/doc/index.html +13 -11
  43. data/doc/method_list.html +206 -150
  44. data/doc/top-level-namespace.html +1 -1
  45. data/lib/csv_decision/columns.rb +87 -1
  46. data/lib/csv_decision/decision.rb +54 -29
  47. data/lib/csv_decision/defaults.rb +1 -1
  48. data/lib/csv_decision/dictionary.rb +32 -22
  49. data/lib/csv_decision/header.rb +17 -0
  50. data/lib/csv_decision/index.rb +107 -0
  51. data/lib/csv_decision/input.rb +45 -13
  52. data/lib/csv_decision/matchers/guard.rb +2 -0
  53. data/lib/csv_decision/matchers.rb +14 -8
  54. data/lib/csv_decision/options.rb +7 -19
  55. data/lib/csv_decision/parse.rb +12 -96
  56. data/lib/csv_decision/result.rb +10 -9
  57. data/lib/csv_decision/scan_row.rb +20 -44
  58. data/lib/csv_decision/table.rb +7 -4
  59. data/lib/csv_decision.rb +1 -1
  60. data/spec/csv_decision/columns_spec.rb +6 -6
  61. data/spec/csv_decision/data_spec.rb +0 -5
  62. data/spec/csv_decision/index_spec.rb +58 -0
  63. data/spec/csv_decision/input_spec.rb +7 -2
  64. data/spec/csv_decision/options_spec.rb +16 -1
  65. data/spec/csv_decision/parse_spec.rb +4 -5
  66. data/spec/csv_decision/table_spec.rb +70 -0
  67. data/spec/data/{valid → invalid}/empty.csv +0 -0
  68. data/spec/data/valid/index_example.csv +12 -0
  69. data/spec/data/valid/multi_column_index.csv +10 -0
  70. data/spec/data/valid/multi_column_index2.csv +12 -0
  71. data/spec/data/valid/options_in_file3.csv +13 -0
  72. metadata +16 -5
  73. data/lib/csv_decision/decide.rb +0 -45
@@ -135,30 +135,6 @@ matches</p>
135
135
  <p>Main method for making decisions.</p>
136
136
  </div></span>
137
137
 
138
- </li>
139
-
140
-
141
- <li class="public ">
142
- <span class="summary_signature">
143
-
144
- <a href="#matches%3F-class_method" title="matches? (class method)">.<strong>matches?</strong>(row:, input:, scan_row:) &#x21d2; Boolean </a>
145
-
146
-
147
-
148
- </span>
149
-
150
-
151
-
152
-
153
-
154
-
155
- <span class="private note title">private</span>
156
-
157
-
158
- <span class="summary_desc"><div class='inline'>
159
- <p>Match the table row against the input hash.</p>
160
- </div></span>
161
-
162
138
  </li>
163
139
 
164
140
 
@@ -272,151 +248,39 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
272
248
  <pre class="lines">
273
249
 
274
250
 
275
- 33
276
- 34
277
- 35
278
- 36
279
- 37
280
- 38
281
- 39
282
- 40
283
- 41
284
- 42
285
- 43</pre>
286
- </td>
287
- <td>
288
- <pre class="code"><span class="info file"># File 'lib/csv_decision/decide.rb', line 33</span>
289
-
290
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_decide'>decide</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='comma'>,</span> <span class='label'>symbolize_keys:</span><span class='rparen'>)</span>
291
- <span class='comment'># Parse and transform the hash supplied as input
292
- </span> <span class='id identifier rubyid_parsed_input'>parsed_input</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Input.html" title="CSVDecision::Input (module)">Input</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="Input.html#parse-class_method" title="CSVDecision::Input.parse (method)">parse</a></span></span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_input'>input</span><span class='comma'>,</span> <span class='label'>symbolize_keys:</span> <span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span><span class='rparen'>)</span>
293
-
294
- <span class='comment'># The decision object collects the results of the search and
295
- </span> <span class='comment'># calculates the final result
296
- </span> <span class='id identifier rubyid_decision'>decision</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Decision.html" title="CSVDecision::Decision (class)">Decision</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Decision.html#initialize-instance_method" title="CSVDecision::Decision#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_parsed_input'>parsed_input</span><span class='rparen'>)</span>
297
-
298
- <span class='comment'># table_scan(table: table, input: parsed_input, decision: decision)
299
- </span> <span class='id identifier rubyid_decision'>decision</span><span class='period'>.</span><span class='id identifier rubyid_scan'>scan</span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_parsed_input'>parsed_input</span><span class='rparen'>)</span>
300
- <span class='kw'>end</span></pre>
301
- </td>
302
- </tr>
303
- </table>
304
- </div>
305
-
306
- <div class="method_details ">
307
- <h3 class="signature " id="matches?-class_method">
308
-
309
- .<strong>matches?</strong>(row:, input:, scan_row:) &#x21d2; <tt>Boolean</tt>
310
-
311
-
312
-
313
-
314
-
315
- </h3><div class="docstring">
316
- <div class="discussion">
317
- <p class="note private">
318
- <strong>This method is part of a private API.</strong>
319
- You should avoid using this method if possible, as it may be removed or be changed in the future.
320
- </p>
321
-
322
- <p>Match the table row against the input hash.</p>
323
-
324
-
325
- </div>
326
- </div>
327
- <div class="tags">
328
- <p class="tag_title">Parameters:</p>
329
- <ul class="param">
330
-
331
- <li>
332
-
333
- <span class='name'>row</span>
334
-
335
-
336
- <span class='type'>(<tt>Array</tt>)</span>
337
-
338
-
339
-
340
- &mdash;
341
- <div class='inline'>
342
- <p>Table row.</p>
343
- </div>
344
-
345
- </li>
346
-
347
- <li>
348
-
349
- <span class='name'>input</span>
350
-
351
-
352
- <span class='type'>(<tt>Hash{Symbol=&gt;Object}</tt>)</span>
353
-
354
-
355
-
356
- &mdash;
357
- <div class='inline'>
358
- <p>Input hash data structure.</p>
359
- </div>
360
-
361
- </li>
362
-
363
- <li>
364
-
365
- <span class='name'>scan_row</span>
366
-
367
-
368
- <span class='type'>(<tt><span class='object_link'><a href="ScanRow.html" title="CSVDecision::ScanRow (class)">ScanRow</a></span></tt>)</span>
369
-
370
-
371
-
372
- </li>
373
-
374
- </ul>
375
-
376
- <p class="tag_title">Returns:</p>
377
- <ul class="return">
378
-
379
- <li>
380
-
381
-
382
- <span class='type'>(<tt>Boolean</tt>)</span>
383
-
384
-
385
-
386
- &mdash;
387
- <div class='inline'>
388
- <p>Returns true if a match, false otherwise.</p>
389
- </div>
390
-
391
- </li>
392
-
393
- </ul>
394
-
395
- </div><table class="source_code">
396
- <tr>
397
- <td>
398
- <pre class="lines">
399
-
400
-
401
- 17
402
251
  18
403
252
  19
404
253
  20
405
254
  21
406
255
  22
407
256
  23
408
- 24</pre>
257
+ 24
258
+ 25
259
+ 26
260
+ 27
261
+ 28
262
+ 29
263
+ 30
264
+ 31
265
+ 32</pre>
409
266
  </td>
410
267
  <td>
411
- <pre class="code"><span class="info file"># File 'lib/csv_decision/decide.rb', line 17</span>
268
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/decide.rb', line 18</span>
412
269
 
413
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_matches?'>matches?</span><span class='lparen'>(</span><span class='label'>row:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='comma'>,</span> <span class='label'>scan_row:</span><span class='rparen'>)</span>
414
- <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='id identifier rubyid_scan_row'>scan_row</span><span class='period'>.</span><span class='id identifier rubyid_match_constants?'>match_constants?</span><span class='lparen'>(</span><span class='label'>row:</span> <span class='id identifier rubyid_row'>row</span><span class='comma'>,</span> <span class='label'>scan_cols:</span> <span class='id identifier rubyid_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:scan_cols</span><span class='rbracket'>]</span><span class='rparen'>)</span>
415
- <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>unless</span> <span class='id identifier rubyid_match'>match</span>
270
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_decide'>decide</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='comma'>,</span> <span class='label'>symbolize_keys:</span><span class='rparen'>)</span>
271
+ <span class='comment'># Parse and transform the hash supplied as input
272
+ </span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_scan_cols'>scan_cols</span><span class='comma'>,</span> <span class='id identifier rubyid_keys'>keys</span> <span class='op'>=</span>
273
+ <span class='const'><span class='object_link'><a href="Input.html" title="CSVDecision::Input (module)">Input</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="Input.html#parse-class_method" title="CSVDecision::Input.parse (method)">parse</a></span></span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_input'>input</span><span class='comma'>,</span> <span class='label'>symbolize_keys:</span> <span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span><span class='rparen'>)</span>
416
274
 
417
- <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_scan_row'>scan_row</span><span class='period'>.</span><span class='id identifier rubyid_procs'>procs</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
275
+ <span class='comment'># The decision object collects the results of the search and
276
+ </span> <span class='comment'># calculates the final result
277
+ </span> <span class='id identifier rubyid_decision'>decision</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Decision.html" title="CSVDecision::Decision (class)">Decision</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Decision.html#initialize-instance_method" title="CSVDecision::Decision#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_hash'>hash</span><span class='rparen'>)</span>
418
278
 
419
- <span class='id identifier rubyid_scan_row'>scan_row</span><span class='period'>.</span><span class='id identifier rubyid_match_procs?'>match_procs?</span><span class='lparen'>(</span><span class='label'>row:</span> <span class='id identifier rubyid_row'>row</span><span class='comma'>,</span> <span class='label'>input:</span> <span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span>
279
+ <span class='kw'>if</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span>
280
+ <span class='id identifier rubyid_decision'>decision</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>hash:</span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='label'>scan_cols:</span> <span class='id identifier rubyid_scan_cols'>scan_cols</span><span class='comma'>,</span> <span class='label'>keys:</span> <span class='id identifier rubyid_keys'>keys</span><span class='rparen'>)</span>
281
+ <span class='kw'>else</span>
282
+ <span class='id identifier rubyid_decision'>decision</span><span class='period'>.</span><span class='id identifier rubyid_scan'>scan</span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='label'>hash:</span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='label'>scan_cols:</span> <span class='id identifier rubyid_scan_cols'>scan_cols</span><span class='rparen'>)</span>
283
+ <span class='kw'>end</span>
420
284
  <span class='kw'>end</span></pre>
421
285
  </td>
422
286
  </tr>
@@ -428,7 +292,7 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
428
292
  </div>
429
293
 
430
294
  <div id="footer">
431
- Generated on Sat Jan 13 10:02:46 2018 by
295
+ Generated on Sat Jan 20 13:56:18 2018 by
432
296
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
433
297
  0.9.12 (ruby-2.4.0).
434
298
  </div>