csv_decision 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/benchmarks/rufus_decision.rb +1 -1
- data/csv_decision.gemspec +1 -1
- data/doc/CSVDecision.html +1 -1
- data/doc/CSVDecision/CellValidationError.html +1 -1
- data/doc/CSVDecision/Columns.html +1 -1
- data/doc/CSVDecision/Columns/Dictionary.html +1 -1
- data/doc/CSVDecision/Data.html +1 -1
- data/doc/CSVDecision/Decision.html +42 -34
- data/doc/CSVDecision/Defaults.html +1 -1
- data/doc/CSVDecision/Dictionary.html +1 -1
- data/doc/CSVDecision/Dictionary/Entry.html +1 -1
- data/doc/CSVDecision/Error.html +1 -1
- data/doc/CSVDecision/FileError.html +1 -1
- data/doc/CSVDecision/Header.html +1 -1
- data/doc/CSVDecision/Index.html +1 -1
- data/doc/CSVDecision/Input.html +65 -47
- data/doc/CSVDecision/Load.html +1 -1
- data/doc/CSVDecision/Matchers.html +1 -1
- data/doc/CSVDecision/Matchers/Constant.html +1 -1
- data/doc/CSVDecision/Matchers/Function.html +1 -1
- data/doc/CSVDecision/Matchers/Guard.html +1 -1
- data/doc/CSVDecision/Matchers/Matcher.html +1 -1
- data/doc/CSVDecision/Matchers/Numeric.html +1 -1
- data/doc/CSVDecision/Matchers/Pattern.html +1 -1
- data/doc/CSVDecision/Matchers/Proc.html +1 -1
- data/doc/CSVDecision/Matchers/Range.html +1 -1
- data/doc/CSVDecision/Matchers/Symbol.html +1 -1
- data/doc/CSVDecision/Options.html +1 -1
- data/doc/CSVDecision/Parse.html +1 -1
- data/doc/CSVDecision/Result.html +5 -5
- data/doc/CSVDecision/ScanRow.html +1 -1
- data/doc/CSVDecision/Table.html +2 -12
- data/doc/CSVDecision/TableValidationError.html +1 -1
- data/doc/CSVDecision/Validate.html +1 -1
- data/doc/_index.html +1 -1
- data/doc/file.README.html +1 -1
- data/doc/index.html +1 -1
- data/doc/top-level-namespace.html +1 -1
- data/lib/csv_decision/decision.rb +56 -33
- data/lib/csv_decision/input.rb +4 -27
- data/lib/csv_decision/result.rb +5 -5
- data/lib/csv_decision/table.rb +0 -5
- data/spec/csv_decision/input_spec.rb +0 -2
- data/spec/csv_decision/table_spec.rb +3 -0
- data/spec/data/valid/index_example.csv +11 -11
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 40af539bd889c1b4bba0b9cced1c517121dd331d
|
|
4
|
+
data.tar.gz: 60e3f727ad24252bd78ccfc3f6b69be77d2c7b4b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 22aae99d06ad663ebc6bed44d19c54a3e55b059f58e8dab1a9b1cb72114a104297d8513911afde5cec738dd3237034e8a55e8097f85e67991d79d647b78ea434
|
|
7
|
+
data.tar.gz: e869bc5eaccbe556cd9e76b3ef5c0bc3d10daa2cc7f47ec4e8ec2151d0c8c4dbf2166dc4eed34357875ca2335aca3fe74957e1a16f6ff1ddefc474baf50505c8
|
data/CHANGELOG.md
CHANGED
data/csv_decision.gemspec
CHANGED
|
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = 'csv_decision'
|
|
8
|
-
spec.version = '0.3.
|
|
8
|
+
spec.version = '0.3.1'
|
|
9
9
|
spec.authors = ['Brett Vickers']
|
|
10
10
|
spec.email = ['brett@phillips-vickers.com']
|
|
11
11
|
spec.description = 'CSV based Ruby decision tables.'
|
data/doc/CSVDecision.html
CHANGED
|
@@ -606,7 +606,7 @@ table.decide(topic: 'finance', region: 'Europe') #=> team_mem
|
|
|
606
606
|
</div>
|
|
607
607
|
|
|
608
608
|
<div id="footer">
|
|
609
|
-
Generated on
|
|
609
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
610
610
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
611
611
|
0.9.12 (ruby-2.4.0).
|
|
612
612
|
</div>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<div id="footer">
|
|
136
|
-
Generated on
|
|
136
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
137
137
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
138
138
|
0.9.12 (ruby-2.4.0).
|
|
139
139
|
</div>
|
|
@@ -1167,7 +1167,7 @@
|
|
|
1167
1167
|
</div>
|
|
1168
1168
|
|
|
1169
1169
|
<div id="footer">
|
|
1170
|
-
Generated on
|
|
1170
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
1171
1171
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1172
1172
|
0.9.12 (ruby-2.4.0).
|
|
1173
1173
|
</div>
|
|
@@ -697,7 +697,7 @@ of :outs.</p>
|
|
|
697
697
|
</div>
|
|
698
698
|
|
|
699
699
|
<div id="footer">
|
|
700
|
-
Generated on
|
|
700
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
701
701
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
702
702
|
0.9.12 (ruby-2.4.0).
|
|
703
703
|
</div>
|
data/doc/CSVDecision/Data.html
CHANGED
|
@@ -469,7 +469,7 @@ array of arrays. Strips out empty columns/rows and comment cells.</p>
|
|
|
469
469
|
</div>
|
|
470
470
|
|
|
471
471
|
<div id="footer">
|
|
472
|
-
Generated on
|
|
472
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
473
473
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
474
474
|
0.9.12 (ruby-2.4.0).
|
|
475
475
|
</div>
|
|
@@ -308,6 +308,7 @@
|
|
|
308
308
|
<pre class="lines">
|
|
309
309
|
|
|
310
310
|
|
|
311
|
+
34
|
|
311
312
|
35
|
|
312
313
|
36
|
|
313
314
|
37
|
|
@@ -317,24 +318,21 @@
|
|
|
317
318
|
41
|
|
318
319
|
42
|
|
319
320
|
43
|
|
320
|
-
44
|
|
321
|
-
45
|
|
322
|
-
46</pre>
|
|
321
|
+
44</pre>
|
|
323
322
|
</td>
|
|
324
323
|
<td>
|
|
325
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line
|
|
324
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line 34</span>
|
|
326
325
|
|
|
327
326
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='rparen'>)</span>
|
|
328
327
|
<span class='comment'># The result object is a hash of values, and each value will be an array if this is
|
|
329
328
|
</span> <span class='comment'># a multi-row result for the +first_match: false+ option.
|
|
330
329
|
</span> <span class='ivar'>@result</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Result.html" title="CSVDecision::Result (class)">Result</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Result.html#initialize-instance_method" title="CSVDecision::Result#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_input'>input</span><span class='rparen'>)</span>
|
|
331
330
|
|
|
332
|
-
<span class='comment'># All rows picked by the matching process. An array if +first_match: false+,
|
|
333
|
-
</span> <span class='comment'># a single row.
|
|
331
|
+
<span class='comment'># All rows picked by the matching process. An array if +first_match: false+,
|
|
332
|
+
</span> <span class='comment'># otherwise a single row.
|
|
334
333
|
</span> <span class='ivar'>@rows_picked</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
|
335
334
|
|
|
336
|
-
<span class='
|
|
337
|
-
</span> <span class='ivar'>@first_match</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:first_match</span><span class='rbracket'>]</span>
|
|
335
|
+
<span class='ivar'>@first_match</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:first_match</span><span class='rbracket'>]</span>
|
|
338
336
|
<span class='kw'>end</span></pre>
|
|
339
337
|
</td>
|
|
340
338
|
</tr>
|
|
@@ -461,8 +459,7 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
461
459
|
27
|
|
462
460
|
28
|
|
463
461
|
29
|
|
464
|
-
30
|
|
465
|
-
31</pre>
|
|
462
|
+
30</pre>
|
|
466
463
|
</td>
|
|
467
464
|
<td>
|
|
468
465
|
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line 18</span>
|
|
@@ -475,11 +472,10 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
475
472
|
</span> <span class='comment'># calculates the final result
|
|
476
473
|
</span> <span class='id identifier rubyid_decision'>decision</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="" title="CSVDecision::Decision (class)">Decision</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#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_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
|
477
474
|
|
|
478
|
-
<span class='
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
<span class='kw'>end</span>
|
|
475
|
+
<span class='comment'># Use the table's index if present
|
|
476
|
+
</span> <span class='kw'>return</span> <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'>input:</span> <span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span> <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>
|
|
477
|
+
|
|
478
|
+
<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_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</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>
|
|
483
479
|
<span class='kw'>end</span></pre>
|
|
484
480
|
</td>
|
|
485
481
|
</tr>
|
|
@@ -592,21 +588,41 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
592
588
|
<pre class="lines">
|
|
593
589
|
|
|
594
590
|
|
|
591
|
+
62
|
|
592
|
+
63
|
|
593
|
+
64
|
|
594
|
+
65
|
|
595
|
+
66
|
|
596
|
+
67
|
|
595
597
|
68
|
|
596
598
|
69
|
|
597
599
|
70
|
|
598
600
|
71
|
|
599
601
|
72
|
|
600
|
-
73
|
|
602
|
+
73
|
|
603
|
+
74
|
|
604
|
+
75
|
|
605
|
+
76
|
|
606
|
+
77</pre>
|
|
601
607
|
</td>
|
|
602
608
|
<td>
|
|
603
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line
|
|
609
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line 62</span>
|
|
604
610
|
|
|
605
611
|
<span class='kw'>def</span> <span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='rparen'>)</span>
|
|
606
612
|
<span class='comment'># If the index lookup fails, there's no match
|
|
607
|
-
</span> <span class='kw'>return</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='lparen'>(</span><span class='id identifier
|
|
613
|
+
</span> <span class='kw'>return</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='lparen'>(</span><span class='id identifier rubyid_index_rows'>index_rows</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='period'>.</span><span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
|
608
614
|
|
|
609
|
-
<span class='
|
|
615
|
+
<span class='kw'>if</span> <span class='ivar'>@first_match</span>
|
|
616
|
+
<span class='id identifier rubyid_index_scan_first_match'>index_scan_first_match</span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span>
|
|
617
|
+
<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='comma'>,</span>
|
|
618
|
+
<span class='label'>hash:</span> <span class='id identifier rubyid_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
619
|
+
<span class='label'>index_rows:</span> <span class='const'>Array</span><span class='lparen'>(</span><span class='id identifier rubyid_index_rows'>index_rows</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
|
620
|
+
<span class='kw'>else</span>
|
|
621
|
+
<span class='id identifier rubyid_index_scan_accumulate'>index_scan_accumulate</span><span class='lparen'>(</span><span class='label'>table:</span> <span class='id identifier rubyid_table'>table</span><span class='comma'>,</span>
|
|
622
|
+
<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='comma'>,</span>
|
|
623
|
+
<span class='label'>hash:</span> <span class='id identifier rubyid_input'>input</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
624
|
+
<span class='label'>index_rows:</span> <span class='const'>Array</span><span class='lparen'>(</span><span class='id identifier rubyid_index_rows'>index_rows</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
|
625
|
+
<span class='kw'>end</span>
|
|
610
626
|
<span class='kw'>end</span></pre>
|
|
611
627
|
</td>
|
|
612
628
|
</tr>
|
|
@@ -713,25 +729,17 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
713
729
|
<pre class="lines">
|
|
714
730
|
|
|
715
731
|
|
|
732
|
+
52
|
|
733
|
+
53
|
|
716
734
|
54
|
|
717
|
-
55
|
|
718
|
-
56
|
|
719
|
-
57
|
|
720
|
-
58
|
|
721
|
-
59
|
|
722
|
-
60
|
|
723
|
-
61</pre>
|
|
735
|
+
55</pre>
|
|
724
736
|
</td>
|
|
725
737
|
<td>
|
|
726
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line
|
|
738
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/decision.rb', line 52</span>
|
|
727
739
|
|
|
728
740
|
<span class='kw'>def</span> <span class='id identifier rubyid_scan'>scan</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>hash:</span><span class='comma'>,</span> <span class='label'>scan_cols:</span><span class='rparen'>)</span>
|
|
729
|
-
<span class='id identifier
|
|
730
|
-
|
|
731
|
-
<span class='kw'>return</span> <span class='ivar'>@result</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span> <span class='kw'>if</span> <span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span><span class='id identifier rubyid_row'>row</span><span class='rparen'>)</span>
|
|
732
|
-
<span class='kw'>end</span>
|
|
733
|
-
|
|
734
|
-
<span class='ivar'>@rows_picked</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='op'>?</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='op'>:</span> <span class='id identifier rubyid_accumulated_result'>accumulated_result</span>
|
|
741
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_scan_first_match'>scan_first_match</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> <span class='kw'>if</span> <span class='ivar'>@first_match</span>
|
|
742
|
+
<span class='id identifier rubyid_scan_accumulate'>scan_accumulate</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>
|
|
735
743
|
<span class='kw'>end</span></pre>
|
|
736
744
|
</td>
|
|
737
745
|
</tr>
|
|
@@ -743,7 +751,7 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
743
751
|
</div>
|
|
744
752
|
|
|
745
753
|
<div id="footer">
|
|
746
|
-
Generated on
|
|
754
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
747
755
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
748
756
|
0.9.12 (ruby-2.4.0).
|
|
749
757
|
</div>
|
|
@@ -281,7 +281,7 @@ We have already determined that this row must be present.</p>
|
|
|
281
281
|
</div>
|
|
282
282
|
|
|
283
283
|
<div id="footer">
|
|
284
|
-
Generated on
|
|
284
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
285
285
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
286
286
|
0.9.12 (ruby-2.4.0).
|
|
287
287
|
</div>
|
|
@@ -416,7 +416,7 @@ the header row.</p>
|
|
|
416
416
|
</div>
|
|
417
417
|
|
|
418
418
|
<div id="footer">
|
|
419
|
-
Generated on
|
|
419
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
420
420
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
421
421
|
0.9.12 (ruby-2.4.0).
|
|
422
422
|
</div>
|
|
@@ -1137,7 +1137,7 @@ type, which is looked up in the above table.</p>
|
|
|
1137
1137
|
</div>
|
|
1138
1138
|
|
|
1139
1139
|
<div id="footer">
|
|
1140
|
-
Generated on
|
|
1140
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
1141
1141
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1142
1142
|
0.9.12 (ruby-2.4.0).
|
|
1143
1143
|
</div>
|
data/doc/CSVDecision/Error.html
CHANGED
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
</div>
|
|
130
130
|
|
|
131
131
|
<div id="footer">
|
|
132
|
-
Generated on
|
|
132
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
133
133
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
134
134
|
0.9.12 (ruby-2.4.0).
|
|
135
135
|
</div>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<div id="footer">
|
|
136
|
-
Generated on
|
|
136
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
137
137
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
138
138
|
0.9.12 (ruby-2.4.0).
|
|
139
139
|
</div>
|
data/doc/CSVDecision/Header.html
CHANGED
|
@@ -637,7 +637,7 @@ method name - note any spaces will have been replaced with underscores.</p>
|
|
|
637
637
|
</div>
|
|
638
638
|
|
|
639
639
|
<div id="footer">
|
|
640
|
-
Generated on
|
|
640
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
641
641
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
642
642
|
0.9.12 (ruby-2.4.0).
|
|
643
643
|
</div>
|
data/doc/CSVDecision/Index.html
CHANGED
|
@@ -731,7 +731,7 @@ indexes.</p>
|
|
|
731
731
|
</div>
|
|
732
732
|
|
|
733
733
|
<div id="footer">
|
|
734
|
-
Generated on
|
|
734
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
735
735
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
736
736
|
0.9.12 (ruby-2.4.0).
|
|
737
737
|
</div>
|
data/doc/CSVDecision/Input.html
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<li class="public ">
|
|
117
117
|
<span class="summary_signature">
|
|
118
118
|
|
|
119
|
-
<a href="#parse-class_method" title="parse (class method)">.<strong>parse</strong>(table:, input:, symbolize_keys:) ⇒ Hash{Symbol
|
|
119
|
+
<a href="#parse-class_method" title="parse (class method)">.<strong>parse</strong>(table:, input:, symbolize_keys:) ⇒ Hash{Symbol=>Object} </a>
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
|
|
@@ -130,11 +130,7 @@
|
|
|
130
130
|
<span class="private note title">private</span>
|
|
131
131
|
|
|
132
132
|
|
|
133
|
-
<span class="summary_desc"><div class='inline'>
|
|
134
|
-
<p>Returns a hash of two hashes: * hash: either a copy with keys symbolized
|
|
135
|
-
or the original input object * scan_cols: Picks out the value in the input
|
|
136
|
-
hash for each table input column.</p>
|
|
137
|
-
</div></span>
|
|
133
|
+
<span class="summary_desc"><div class='inline'></div></span>
|
|
138
134
|
|
|
139
135
|
</li>
|
|
140
136
|
|
|
@@ -151,7 +147,7 @@ hash for each table input column.</p>
|
|
|
151
147
|
<div class="method_details first">
|
|
152
148
|
<h3 class="signature first" id="parse-class_method">
|
|
153
149
|
|
|
154
|
-
.<strong>parse</strong>(table:, input:, symbolize_keys:) ⇒ <tt>Hash{Symbol
|
|
150
|
+
.<strong>parse</strong>(table:, input:, symbolize_keys:) ⇒ <tt>Hash{Symbol=>Object}</tt>
|
|
155
151
|
|
|
156
152
|
|
|
157
153
|
|
|
@@ -164,81 +160,103 @@ hash for each table input column.</p>
|
|
|
164
160
|
You should avoid using this method if possible, as it may be removed or be changed in the future.
|
|
165
161
|
</p>
|
|
166
162
|
|
|
167
|
-
<p>Returns a hash of two hashes:</p>
|
|
168
|
-
<ul><li>
|
|
169
|
-
<p>hash: either a copy with keys symbolized or the original input object</p>
|
|
170
|
-
</li><li>
|
|
171
|
-
<p>scan_cols: Picks out the value in the input hash for each table input
|
|
172
|
-
column. Defaults to nil if the key is missing in the input hash.</p>
|
|
173
|
-
</li></ul>
|
|
174
|
-
|
|
175
163
|
|
|
176
164
|
</div>
|
|
177
165
|
</div>
|
|
178
166
|
<div class="tags">
|
|
167
|
+
<p class="tag_title">Parameters:</p>
|
|
168
|
+
<ul class="param">
|
|
179
169
|
|
|
180
|
-
<
|
|
181
|
-
|
|
170
|
+
<li>
|
|
171
|
+
|
|
172
|
+
<span class='name'>table</span>
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
<span class='type'>(<tt><span class='object_link'><a href="Table.html" title="CSVDecision::Table (class)">CSVDecision::Table</a></span></tt>)</span>
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
—
|
|
180
|
+
<div class='inline'>
|
|
181
|
+
<p>Decision table.</p>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
</li>
|
|
185
|
+
|
|
186
|
+
<li>
|
|
187
|
+
|
|
188
|
+
<span class='name'>input</span>
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
—
|
|
196
|
+
<div class='inline'>
|
|
197
|
+
<p>Input hash (keys may or may not be symbolized)</p>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
</li>
|
|
182
201
|
|
|
183
202
|
<li>
|
|
184
203
|
|
|
204
|
+
<span class='name'>symbolize_keys</span>
|
|
205
|
+
|
|
185
206
|
|
|
186
|
-
<span class='type'>(<tt>
|
|
207
|
+
<span class='type'>(<tt>true</tt>, <tt>false</tt>)</span>
|
|
187
208
|
|
|
188
209
|
|
|
189
210
|
|
|
190
211
|
—
|
|
191
212
|
<div class='inline'>
|
|
192
|
-
<p>
|
|
193
|
-
|
|
194
|
-
<p>hash: either a copy with keys symbolized or the original input object</p>
|
|
195
|
-
</li><li>
|
|
196
|
-
<p>scan_cols: Picks out the value in the input hash for each table input
|
|
197
|
-
column. Defaults to nil if the key is missing in the input hash.</p>
|
|
198
|
-
</li></ul>
|
|
213
|
+
<p>Set to false if keys are symbolized and it's OK to mutate the input
|
|
214
|
+
hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
199
215
|
</div>
|
|
200
216
|
|
|
201
217
|
</li>
|
|
202
218
|
|
|
203
219
|
</ul>
|
|
204
220
|
|
|
221
|
+
<p class="tag_title">Returns:</p>
|
|
222
|
+
<ul class="return">
|
|
223
|
+
|
|
224
|
+
<li>
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
<span class='type'>(<tt>Hash{Symbol=>Object}</tt>)</span>
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
</li>
|
|
232
|
+
|
|
233
|
+
</ul>
|
|
234
|
+
|
|
205
235
|
</div><table class="source_code">
|
|
206
236
|
<tr>
|
|
207
237
|
<td>
|
|
208
238
|
<pre class="lines">
|
|
209
239
|
|
|
210
240
|
|
|
241
|
+
13
|
|
242
|
+
14
|
|
243
|
+
15
|
|
244
|
+
16
|
|
211
245
|
17
|
|
212
246
|
18
|
|
213
247
|
19
|
|
214
|
-
20
|
|
215
|
-
21
|
|
216
|
-
22
|
|
217
|
-
23
|
|
218
|
-
24
|
|
219
|
-
25
|
|
220
|
-
26
|
|
221
|
-
27
|
|
222
|
-
28
|
|
223
|
-
29
|
|
224
|
-
30</pre>
|
|
248
|
+
20</pre>
|
|
225
249
|
</td>
|
|
226
250
|
<td>
|
|
227
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/input.rb', line
|
|
251
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/input.rb', line 13</span>
|
|
228
252
|
|
|
229
253
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</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>
|
|
230
254
|
<span class='id identifier rubyid_validate'>validate</span><span class='lparen'>(</span><span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span>
|
|
231
255
|
|
|
232
|
-
<span class='id identifier
|
|
233
|
-
<span class='id identifier rubyid_parse_input'>parse_input</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_symbolize_keys'>symbolize_keys</span> <span class='op'>?</span> <span class='id identifier rubyid_input'>input</span><span class='period'>.</span><span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span> <span class='op'>:</span> <span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span>
|
|
256
|
+
<span class='id identifier rubyid_parsed_input'>parsed_input</span> <span class='op'>=</span> <span class='id identifier rubyid_parse_input'>parse_input</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_symbolize_keys'>symbolize_keys</span> <span class='op'>?</span> <span class='id identifier rubyid_input'>input</span><span class='period'>.</span><span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span> <span class='op'>:</span> <span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span>
|
|
234
257
|
|
|
235
|
-
<span class='
|
|
236
|
-
|
|
237
|
-
</span> <span class='label'>hash:</span> <span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span> <span class='op'>?</span> <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span> <span class='op'>:</span> <span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span>
|
|
238
|
-
<span class='label'>scan_cols:</span> <span class='id identifier rubyid_scan_cols'>scan_cols</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span><span class='comma'>,</span>
|
|
239
|
-
<span class='comment'># Build the index key if this table is indexed.
|
|
240
|
-
</span> <span class='label'>key:</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span> <span class='op'>?</span> <span class='id identifier rubyid_parse_key'>parse_key</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='rparen'>)</span> <span class='op'>:</span> <span class='kw'>nil</span>
|
|
241
|
-
<span class='rbrace'>}</span>
|
|
258
|
+
<span class='id identifier rubyid_parsed_input'>parsed_input</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_parse_key'>parse_key</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_parsed_input'>parsed_input</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span> <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>
|
|
259
|
+
<span class='id identifier rubyid_parsed_input'>parsed_input</span>
|
|
242
260
|
<span class='kw'>end</span></pre>
|
|
243
261
|
</td>
|
|
244
262
|
</tr>
|
|
@@ -250,7 +268,7 @@ column. Defaults to nil if the key is missing in the input hash.</p>
|
|
|
250
268
|
</div>
|
|
251
269
|
|
|
252
270
|
<div id="footer">
|
|
253
|
-
Generated on
|
|
271
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
254
272
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
255
273
|
0.9.12 (ruby-2.4.0).
|
|
256
274
|
</div>
|
data/doc/CSVDecision/Load.html
CHANGED
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
</div>
|
|
282
282
|
|
|
283
283
|
<div id="footer">
|
|
284
|
-
Generated on
|
|
284
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
285
285
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
286
286
|
0.9.12 (ruby-2.4.0).
|
|
287
287
|
</div>
|
|
@@ -1350,7 +1350,7 @@ nil.</p>
|
|
|
1350
1350
|
</div>
|
|
1351
1351
|
|
|
1352
1352
|
<div id="footer">
|
|
1353
|
-
Generated on
|
|
1353
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
1354
1354
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1355
1355
|
0.9.12 (ruby-2.4.0).
|
|
1356
1356
|
</div>
|
|
@@ -474,7 +474,7 @@ some type of function.</p>
|
|
|
474
474
|
</div>
|
|
475
475
|
|
|
476
476
|
<div id="footer">
|
|
477
|
-
Generated on
|
|
477
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
478
478
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
479
479
|
0.9.12 (ruby-2.4.0).
|
|
480
480
|
</div>
|
|
@@ -501,7 +501,7 @@ some type of function.</p>
|
|
|
501
501
|
</div>
|
|
502
502
|
|
|
503
503
|
<div id="footer">
|
|
504
|
-
Generated on
|
|
504
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
505
505
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
506
506
|
0.9.12 (ruby-2.4.0).
|
|
507
507
|
</div>
|
|
@@ -493,7 +493,7 @@ some type of function.</p>
|
|
|
493
493
|
</div>
|
|
494
494
|
|
|
495
495
|
<div id="footer">
|
|
496
|
-
Generated on
|
|
496
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
497
497
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
498
498
|
0.9.12 (ruby-2.4.0).
|
|
499
499
|
</div>
|
|
@@ -497,7 +497,7 @@ some type of function.</p>
|
|
|
497
497
|
</div>
|
|
498
498
|
|
|
499
499
|
<div id="footer">
|
|
500
|
-
Generated on
|
|
500
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
501
501
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
502
502
|
0.9.12 (ruby-2.4.0).
|
|
503
503
|
</div>
|
|
@@ -411,7 +411,7 @@ some type of function.</p>
|
|
|
411
411
|
</div>
|
|
412
412
|
|
|
413
413
|
<div id="footer">
|
|
414
|
-
Generated on
|
|
414
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
415
415
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
416
416
|
0.9.12 (ruby-2.4.0).
|
|
417
417
|
</div>
|
|
@@ -481,7 +481,7 @@ some type of function.</p>
|
|
|
481
481
|
</div>
|
|
482
482
|
|
|
483
483
|
<div id="footer">
|
|
484
|
-
Generated on
|
|
484
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
485
485
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
486
486
|
0.9.12 (ruby-2.4.0).
|
|
487
487
|
</div>
|
|
@@ -694,7 +694,7 @@ hash keys (which are always symbolized).</p>
|
|
|
694
694
|
</div>
|
|
695
695
|
|
|
696
696
|
<div id="footer">
|
|
697
|
-
Generated on
|
|
697
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
698
698
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
699
699
|
0.9.12 (ruby-2.4.0).
|
|
700
700
|
</div>
|
|
@@ -369,7 +369,7 @@ some type of function.</p>
|
|
|
369
369
|
</div>
|
|
370
370
|
|
|
371
371
|
<div id="footer">
|
|
372
|
-
Generated on
|
|
372
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
373
373
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
374
374
|
0.9.12 (ruby-2.4.0).
|
|
375
375
|
</div>
|
|
@@ -415,7 +415,7 @@ some type of function.</p>
|
|
|
415
415
|
</div>
|
|
416
416
|
|
|
417
417
|
<div id="footer">
|
|
418
|
-
Generated on
|
|
418
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
419
419
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
420
420
|
0.9.12 (ruby-2.4.0).
|
|
421
421
|
</div>
|
|
@@ -433,7 +433,7 @@ set.</p>
|
|
|
433
433
|
</div>
|
|
434
434
|
|
|
435
435
|
<div id="footer">
|
|
436
|
-
Generated on
|
|
436
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
437
437
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
438
438
|
0.9.12 (ruby-2.4.0).
|
|
439
439
|
</div>
|
data/doc/CSVDecision/Parse.html
CHANGED
|
@@ -272,7 +272,7 @@
|
|
|
272
272
|
</div>
|
|
273
273
|
|
|
274
274
|
<div id="footer">
|
|
275
|
-
Generated on
|
|
275
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
276
276
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
277
277
|
0.9.12 (ruby-2.4.0).
|
|
278
278
|
</div>
|
data/doc/CSVDecision/Result.html
CHANGED
|
@@ -483,6 +483,9 @@ result, along with the partial result required to evaluate functions.</p>
|
|
|
483
483
|
<pre class="code"><span class="info file"># File 'lib/csv_decision/result.rb', line 25</span>
|
|
484
484
|
|
|
485
485
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>table:</span><span class='comma'>,</span> <span class='label'>input:</span><span class='rparen'>)</span>
|
|
486
|
+
<span class='comment'># Attributes hash contains the output decision key value pairs
|
|
487
|
+
</span> <span class='ivar'>@attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
|
488
|
+
|
|
486
489
|
<span class='ivar'>@outs</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_outs'>outs</span>
|
|
487
490
|
<span class='ivar'>@outs_functions</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_outs_functions'>outs_functions</span>
|
|
488
491
|
<span class='ivar'>@if_columns</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_ifs'>ifs</span>
|
|
@@ -492,10 +495,7 @@ result, along with the partial result required to evaluate functions.</p>
|
|
|
492
495
|
</span> <span class='comment'># have the same symbol as an input hash key.
|
|
493
496
|
</span> <span class='comment'># However, the rest of this hash is mutated as output column evaluation results
|
|
494
497
|
</span> <span class='comment'># are accumulated.
|
|
495
|
-
</span> <span class='ivar'>@partial_result</span> <span class='op'>=</span> <span class='id identifier rubyid_input'>input</span><span class='
|
|
496
|
-
|
|
497
|
-
<span class='comment'># Attributes hash contains the output decision key value pairs
|
|
498
|
-
</span> <span class='ivar'>@attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
|
498
|
+
</span> <span class='ivar'>@partial_result</span> <span class='op'>=</span> <span class='id identifier rubyid_input'>input</span><span class='period'>.</span><span class='id identifier rubyid_slice'>slice</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_input_keys'>input_keys</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@outs_functions</span>
|
|
499
499
|
<span class='kw'>end</span></pre>
|
|
500
500
|
</td>
|
|
501
501
|
</tr>
|
|
@@ -1134,7 +1134,7 @@ result, along with the partial result required to evaluate functions.</p>
|
|
|
1134
1134
|
</div>
|
|
1135
1135
|
|
|
1136
1136
|
<div id="footer">
|
|
1137
|
-
Generated on
|
|
1137
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
1138
1138
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1139
1139
|
0.9.12 (ruby-2.4.0).
|
|
1140
1140
|
</div>
|
|
@@ -858,7 +858,7 @@ non-string constant.</p>
|
|
|
858
858
|
</div>
|
|
859
859
|
|
|
860
860
|
<div id="footer">
|
|
861
|
-
Generated on
|
|
861
|
+
Generated on Sun Jan 21 08:56:47 2018 by
|
|
862
862
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
863
863
|
0.9.12 (ruby-2.4.0).
|
|
864
864
|
</div>
|
data/doc/CSVDecision/Table.html
CHANGED
|
@@ -514,22 +514,12 @@ and last row index given.</p>
|
|
|
514
514
|
81
|
|
515
515
|
82
|
|
516
516
|
83
|
|
517
|
-
84
|
|
518
|
-
85
|
|
519
|
-
86
|
|
520
|
-
87
|
|
521
|
-
88
|
|
522
|
-
89</pre>
|
|
517
|
+
84</pre>
|
|
523
518
|
</td>
|
|
524
519
|
<td>
|
|
525
520
|
<pre class="code"><span class="info file"># File 'lib/csv_decision/table.rb', line 79</span>
|
|
526
521
|
|
|
527
522
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
|
|
528
|
-
<span class='ivar'>@columns</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
|
529
|
-
<span class='ivar'>@file</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
|
530
|
-
<span class='ivar'>@index</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
|
531
|
-
<span class='ivar'>@options</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
|
532
|
-
<span class='ivar'>@outs_functions</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
|
533
523
|
<span class='ivar'>@outs_rows</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
|
534
524
|
<span class='ivar'>@if_rows</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
|
535
525
|
<span class='ivar'>@rows</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
|
@@ -1380,7 +1370,7 @@ and last row index given.</p>
|
|
|
1380
1370
|
</div>
|
|
1381
1371
|
|
|
1382
1372
|
<div id="footer">
|
|
1383
|
-
Generated on
|
|
1373
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
1384
1374
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1385
1375
|
0.9.12 (ruby-2.4.0).
|
|
1386
1376
|
</div>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<div id="footer">
|
|
136
|
-
Generated on
|
|
136
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
137
137
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
138
138
|
0.9.12 (ruby-2.4.0).
|
|
139
139
|
</div>
|
|
@@ -412,7 +412,7 @@ only required at table load time.</p>
|
|
|
412
412
|
</div>
|
|
413
413
|
|
|
414
414
|
<div id="footer">
|
|
415
|
-
Generated on
|
|
415
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
416
416
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
417
417
|
0.9.12 (ruby-2.4.0).
|
|
418
418
|
</div>
|
data/doc/_index.html
CHANGED
|
@@ -440,7 +440,7 @@
|
|
|
440
440
|
</div>
|
|
441
441
|
|
|
442
442
|
<div id="footer">
|
|
443
|
-
Generated on
|
|
443
|
+
Generated on Sun Jan 21 08:56:44 2018 by
|
|
444
444
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
445
445
|
0.9.12 (ruby-2.4.0).
|
|
446
446
|
</div>
|
data/doc/file.README.html
CHANGED
|
@@ -385,7 +385,7 @@ href="./LICENSE">LICENSE</a> document for more information.</p>
|
|
|
385
385
|
</div></div>
|
|
386
386
|
|
|
387
387
|
<div id="footer">
|
|
388
|
-
Generated on
|
|
388
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
389
389
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
390
390
|
0.9.12 (ruby-2.4.0).
|
|
391
391
|
</div>
|
data/doc/index.html
CHANGED
|
@@ -385,7 +385,7 @@ href="./LICENSE">LICENSE</a> document for more information.</p>
|
|
|
385
385
|
</div></div>
|
|
386
386
|
|
|
387
387
|
<div id="footer">
|
|
388
|
-
Generated on
|
|
388
|
+
Generated on Sun Jan 21 08:56:45 2018 by
|
|
389
389
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
390
390
|
0.9.12 (ruby-2.4.0).
|
|
391
391
|
</div>
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
</div>
|
|
101
101
|
|
|
102
102
|
<div id="footer">
|
|
103
|
-
Generated on
|
|
103
|
+
Generated on Sun Jan 21 08:56:46 2018 by
|
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
105
105
|
0.9.12 (ruby-2.4.0).
|
|
106
106
|
</div>
|
|
@@ -23,11 +23,10 @@ module CSVDecision
|
|
|
23
23
|
# calculates the final result
|
|
24
24
|
decision = Decision.new(table: table, input: input[:hash])
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
26
|
+
# Use the table's index if present
|
|
27
|
+
return decision.index(table: table, input: input) if table.index
|
|
28
|
+
|
|
29
|
+
decision.scan(table: table, hash: input[:hash], scan_cols: input[:scan_cols])
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
# @param table [CSVDecision::Table] Decision table being processed.
|
|
@@ -37,11 +36,10 @@ module CSVDecision
|
|
|
37
36
|
# a multi-row result for the +first_match: false+ option.
|
|
38
37
|
@result = Result.new(table: table, input: input)
|
|
39
38
|
|
|
40
|
-
# All rows picked by the matching process. An array if +first_match: false+,
|
|
41
|
-
# a single row.
|
|
39
|
+
# All rows picked by the matching process. An array if +first_match: false+,
|
|
40
|
+
# otherwise a single row.
|
|
42
41
|
@rows_picked = []
|
|
43
42
|
|
|
44
|
-
# Relevant table attributes
|
|
45
43
|
@first_match = table.options[:first_match]
|
|
46
44
|
end
|
|
47
45
|
|
|
@@ -52,12 +50,8 @@ module CSVDecision
|
|
|
52
50
|
# @param scan_cols [Hash{Index=>Object}] Input column values to scan.
|
|
53
51
|
# @return [Hash{Symbol=>Object}] Decision result.
|
|
54
52
|
def scan(table:, hash:, scan_cols:)
|
|
55
|
-
table
|
|
56
|
-
|
|
57
|
-
return @result.attributes if add(row)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
@rows_picked.empty? ? {} : accumulated_result
|
|
53
|
+
return scan_first_match(table: table, hash: hash, scan_cols: scan_cols) if @first_match
|
|
54
|
+
scan_accumulate(table: table, hash: hash, scan_cols: scan_cols)
|
|
61
55
|
end
|
|
62
56
|
|
|
63
57
|
# Use an index to scan the decision table up against the input hash.
|
|
@@ -67,37 +61,66 @@ module CSVDecision
|
|
|
67
61
|
# @return [{Symbol=>Object}] Decision result.
|
|
68
62
|
def index(table:, input:)
|
|
69
63
|
# If the index lookup fails, there's no match
|
|
70
|
-
return {} unless (
|
|
64
|
+
return {} unless (index_rows = table.index.hash[input[:key]])
|
|
71
65
|
|
|
72
|
-
|
|
66
|
+
if @first_match
|
|
67
|
+
index_scan_first_match(table: table,
|
|
68
|
+
scan_cols: input[:scan_cols],
|
|
69
|
+
hash: input[:hash],
|
|
70
|
+
index_rows: Array(index_rows))
|
|
71
|
+
else
|
|
72
|
+
index_scan_accumulate(table: table,
|
|
73
|
+
scan_cols: input[:scan_cols],
|
|
74
|
+
hash: input[:hash],
|
|
75
|
+
index_rows: Array(index_rows))
|
|
76
|
+
end
|
|
73
77
|
end
|
|
74
78
|
|
|
75
79
|
private
|
|
76
80
|
|
|
77
|
-
def
|
|
78
|
-
|
|
81
|
+
def scan_first_match(table:, hash:, scan_cols:)
|
|
82
|
+
table.each do |row, index|
|
|
83
|
+
next unless table.scan_rows[index].match?(row: row, hash: hash, scan_cols: scan_cols)
|
|
84
|
+
|
|
85
|
+
return @result.attributes if first_match(row)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
{}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def scan_accumulate(table:, hash:, scan_cols:)
|
|
92
|
+
table.each do |row, index|
|
|
93
|
+
next unless table.scan_rows[index].match?(row: row, hash: hash, scan_cols: scan_cols)
|
|
94
|
+
# Accumulate output rows
|
|
95
|
+
@rows_picked << row
|
|
96
|
+
@result.accumulate_outs(row)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
@rows_picked.empty? ? {} : accumulated_result
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def index_scan_first_match(table:, scan_cols:, hash:, index_rows:)
|
|
103
|
+
index_rows.each do |start_row, end_row|
|
|
79
104
|
table.each(start_row, end_row || start_row) do |row, index|
|
|
80
105
|
next unless table.scan_rows[index].match?(row: row, hash: hash, scan_cols: scan_cols)
|
|
81
|
-
return @result.attributes if
|
|
106
|
+
return @result.attributes if first_match(row)
|
|
82
107
|
end
|
|
83
108
|
end
|
|
84
109
|
|
|
85
|
-
|
|
110
|
+
{}
|
|
86
111
|
end
|
|
87
112
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
@result.accumulate_outs(row)
|
|
113
|
+
def index_scan_accumulate(table:, scan_cols:, hash:, index_rows:)
|
|
114
|
+
index_rows.each do |start_row, end_row|
|
|
115
|
+
table.each(start_row, end_row || start_row) do |row, index|
|
|
116
|
+
next unless table.scan_rows[index].match?(row: row, hash: hash, scan_cols: scan_cols)
|
|
117
|
+
# Accumulate output rows
|
|
118
|
+
@rows_picked << row
|
|
119
|
+
@result.accumulate_outs(row)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
98
122
|
|
|
99
|
-
|
|
100
|
-
false
|
|
123
|
+
@rows_picked.empty? ? {} : accumulated_result
|
|
101
124
|
end
|
|
102
125
|
|
|
103
126
|
def accumulated_result
|
|
@@ -124,7 +147,7 @@ module CSVDecision
|
|
|
124
147
|
end
|
|
125
148
|
end
|
|
126
149
|
|
|
127
|
-
def
|
|
150
|
+
def first_match(row)
|
|
128
151
|
# This decision row may contain procs, which if present will need to be evaluated.
|
|
129
152
|
# If this row contains if: columns then this row may be filtered out, in which case
|
|
130
153
|
# this method call will return false.
|
data/lib/csv_decision/input.rb
CHANGED
|
@@ -8,33 +8,16 @@ module CSVDecision
|
|
|
8
8
|
# Parse the input hash.
|
|
9
9
|
# @api private
|
|
10
10
|
module Input
|
|
11
|
-
# @param (see
|
|
12
|
-
# @return [Hash{Symbol
|
|
13
|
-
# Returns a hash of two hashes:
|
|
14
|
-
# * hash: either a copy with keys symbolized or the original input object
|
|
15
|
-
# * scan_cols: Picks out the value in the input hash for each table input column.
|
|
16
|
-
# Defaults to nil if the key is missing in the input hash.
|
|
11
|
+
# @param (see Decision.make)
|
|
12
|
+
# @return [Hash{Symbol=>Object}]
|
|
17
13
|
def self.parse(table:, input:, symbolize_keys:)
|
|
18
14
|
validate(input)
|
|
19
15
|
|
|
20
16
|
parsed_input = parse_input(table: table, input: symbolize_keys ? input.symbolize_keys : input)
|
|
21
17
|
|
|
22
|
-
key =
|
|
23
|
-
|
|
24
|
-
result(symbolize_keys: symbolize_keys, input: parsed_input, key: key)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.result(symbolize_keys:, input:, key:)
|
|
28
|
-
hash = input[:hash]
|
|
29
|
-
{
|
|
30
|
-
# We can freeze the input hash for safety if we made our own copy.
|
|
31
|
-
hash: symbolize_keys ? hash.freeze : hash,
|
|
32
|
-
scan_cols: input[:scan_cols].freeze,
|
|
33
|
-
# Build the index key if this table is indexed.
|
|
34
|
-
key: key
|
|
35
|
-
}
|
|
18
|
+
parsed_input[:key] = parse_key(table: table, hash: parsed_input[:hash]) if table.index
|
|
19
|
+
parsed_input
|
|
36
20
|
end
|
|
37
|
-
private_class_method :result
|
|
38
21
|
|
|
39
22
|
def self.parse_key(table:, hash:)
|
|
40
23
|
return scan_key(table: table, hash: hash) if table.index.columns.count == 1
|
|
@@ -74,7 +57,6 @@ module CSVDecision
|
|
|
74
57
|
|
|
75
58
|
parse_defaulted(table: table, input: input, defaulted_columns: defaulted_columns)
|
|
76
59
|
end
|
|
77
|
-
|
|
78
60
|
private_class_method :parse_input
|
|
79
61
|
|
|
80
62
|
def self.parse_cells(table:, input:)
|
|
@@ -87,7 +69,6 @@ module CSVDecision
|
|
|
87
69
|
|
|
88
70
|
{ hash: input, scan_cols: scan_cols }
|
|
89
71
|
end
|
|
90
|
-
|
|
91
72
|
private_class_method :parse_cells
|
|
92
73
|
|
|
93
74
|
def self.parse_defaulted(table:, input:, defaulted_columns:)
|
|
@@ -105,7 +86,6 @@ module CSVDecision
|
|
|
105
86
|
|
|
106
87
|
{ hash: input, scan_cols: scan_cols }
|
|
107
88
|
end
|
|
108
|
-
|
|
109
89
|
private_class_method :parse_defaulted
|
|
110
90
|
|
|
111
91
|
def self.default_value(default:, input:, column:)
|
|
@@ -121,13 +101,11 @@ module CSVDecision
|
|
|
121
101
|
# or else a constant.
|
|
122
102
|
eval_default(default.function, input)
|
|
123
103
|
end
|
|
124
|
-
|
|
125
104
|
private_class_method :default_value
|
|
126
105
|
|
|
127
106
|
def self.default_if?(set_if, value)
|
|
128
107
|
set_if == true || (value.respond_to?(set_if) && value.send(set_if))
|
|
129
108
|
end
|
|
130
|
-
|
|
131
109
|
private_class_method :default_if?
|
|
132
110
|
|
|
133
111
|
# Expression may be a Proc that needs evaluating against the input hash,
|
|
@@ -135,7 +113,6 @@ module CSVDecision
|
|
|
135
113
|
def self.eval_default(expression, input)
|
|
136
114
|
expression.is_a?(::Proc) ? expression[input] : expression
|
|
137
115
|
end
|
|
138
|
-
|
|
139
116
|
private_class_method :eval_default
|
|
140
117
|
end
|
|
141
118
|
end
|
data/lib/csv_decision/result.rb
CHANGED
|
@@ -23,6 +23,9 @@ module CSVDecision
|
|
|
23
23
|
|
|
24
24
|
# (see Decision.initialize)
|
|
25
25
|
def initialize(table:, input:)
|
|
26
|
+
# Attributes hash contains the output decision key value pairs
|
|
27
|
+
@attributes = {}
|
|
28
|
+
|
|
26
29
|
@outs = table.columns.outs
|
|
27
30
|
@outs_functions = table.outs_functions
|
|
28
31
|
@if_columns = table.columns.ifs
|
|
@@ -32,10 +35,7 @@ module CSVDecision
|
|
|
32
35
|
# have the same symbol as an input hash key.
|
|
33
36
|
# However, the rest of this hash is mutated as output column evaluation results
|
|
34
37
|
# are accumulated.
|
|
35
|
-
@partial_result = input
|
|
36
|
-
|
|
37
|
-
# Attributes hash contains the output decision key value pairs
|
|
38
|
-
@attributes = {}
|
|
38
|
+
@partial_result = input.slice(*table.columns.input_keys) if @outs_functions
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Common case for building a single row result is just copying output column values to the
|
|
@@ -92,7 +92,7 @@ module CSVDecision
|
|
|
92
92
|
# or filtered by the if: column conditions.
|
|
93
93
|
def single_row_result
|
|
94
94
|
@if_columns.each_key do |col|
|
|
95
|
-
return
|
|
95
|
+
return false unless @attributes[col]
|
|
96
96
|
|
|
97
97
|
# Remove the if: column from the final result hash.
|
|
98
98
|
@attributes.delete(col)
|
data/lib/csv_decision/table.rb
CHANGED
|
@@ -30,7 +30,6 @@ describe CSVDecision::Input do
|
|
|
30
30
|
|
|
31
31
|
expect(result).to eql expected
|
|
32
32
|
expect(result[:hash]).not_to equal expected[:hash]
|
|
33
|
-
expect(result[:hash].frozen?).to eq true
|
|
34
33
|
end
|
|
35
34
|
|
|
36
35
|
it 'processes input hash with symbolize_keys: false' do
|
|
@@ -52,6 +51,5 @@ describe CSVDecision::Input do
|
|
|
52
51
|
|
|
53
52
|
expect(result).to eql expected
|
|
54
53
|
expect(result[:hash]).to equal expected[:hash]
|
|
55
|
-
expect(result[:hash].frozen?).to eq false
|
|
56
54
|
end
|
|
57
55
|
end
|
|
@@ -522,6 +522,8 @@ describe CSVDecision::Table do
|
|
|
522
522
|
|
|
523
523
|
expect(table.send(method, topic: 'politics', region: 'Arctic'))
|
|
524
524
|
.to eq(team_member: %w[Henry Zach])
|
|
525
|
+
expect(table.send(method, topic: 'culture', region: 'America'))
|
|
526
|
+
.to eq({})
|
|
525
527
|
end
|
|
526
528
|
end
|
|
527
529
|
end
|
|
@@ -556,6 +558,7 @@ describe CSVDecision::Table do
|
|
|
556
558
|
expect(table.send(method, number: 1, type: 'integer', input: 'none')).to eq(output: 0)
|
|
557
559
|
expect(table.send(method, number: nil, type: 'string', input: 'one')).to eq(output: nil)
|
|
558
560
|
expect(table.send(method, string: '1', type: 'string', input: 'one')).to eq(output: '1')
|
|
561
|
+
expect(table.send(method, number: '1', type: 'string', input: 'one')).to eq({})
|
|
559
562
|
end
|
|
560
563
|
end
|
|
561
564
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
in:topic,in:region,out:team_member
|
|
2
|
-
sports,Europe,Alice
|
|
3
|
-
sports,,Bob
|
|
4
|
-
finance,America,Charlie
|
|
5
|
-
finance,Europe,Donald
|
|
6
|
-
finance,,Ernest
|
|
7
|
-
politics,Asia,Fujio
|
|
8
|
-
politics,America,Gilbert
|
|
9
|
-
politics,,Henry
|
|
10
|
-
sports,,Zach
|
|
11
|
-
finance,,Zach
|
|
1
|
+
in:topic,in:region,out:team_member
|
|
2
|
+
sports,Europe,Alice
|
|
3
|
+
sports,,Bob
|
|
4
|
+
finance,America,Charlie
|
|
5
|
+
finance,Europe,Donald
|
|
6
|
+
finance,,Ernest
|
|
7
|
+
politics,Asia,Fujio
|
|
8
|
+
politics,America,Gilbert
|
|
9
|
+
politics,,Henry
|
|
10
|
+
sports,,Zach
|
|
11
|
+
finance,,Zach
|
|
12
12
|
politics,,Zach
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: csv_decision
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brett Vickers
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-01-
|
|
11
|
+
date: 2018-01-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|