csv_decision 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +43 -19
  4. data/csv_decision.gemspec +1 -1
  5. data/doc/CSVDecision.html +6 -6
  6. data/doc/CSVDecision/CellValidationError.html +1 -1
  7. data/doc/CSVDecision/Columns.html +124 -42
  8. data/doc/CSVDecision/Columns/Dictionary.html +101 -7
  9. data/doc/CSVDecision/Data.html +1 -1
  10. data/doc/CSVDecision/Decision.html +444 -98
  11. data/doc/CSVDecision/Defaults.html +1 -1
  12. data/doc/CSVDecision/Dictionary.html +4 -4
  13. data/doc/CSVDecision/Dictionary/Entry.html +31 -31
  14. data/doc/CSVDecision/Error.html +1 -1
  15. data/doc/CSVDecision/FileError.html +1 -1
  16. data/doc/CSVDecision/Header.html +2 -2
  17. data/doc/CSVDecision/Index.html +1 -1
  18. data/doc/CSVDecision/Input.html +129 -3
  19. data/doc/CSVDecision/Load.html +1 -1
  20. data/doc/CSVDecision/Matchers.html +168 -41
  21. data/doc/CSVDecision/Matchers/Constant.html +7 -7
  22. data/doc/CSVDecision/Matchers/Function.html +1 -1
  23. data/doc/CSVDecision/Matchers/Guard.html +16 -16
  24. data/doc/CSVDecision/Matchers/Matcher.html +13 -13
  25. data/doc/CSVDecision/Matchers/Numeric.html +8 -14
  26. data/doc/CSVDecision/Matchers/Pattern.html +10 -10
  27. data/doc/CSVDecision/Matchers/Proc.html +1 -1
  28. data/doc/CSVDecision/Matchers/Range.html +1 -1
  29. data/doc/CSVDecision/Matchers/Symbol.html +19 -29
  30. data/doc/CSVDecision/Options.html +1 -1
  31. data/doc/CSVDecision/Parse.html +4 -4
  32. data/doc/CSVDecision/Paths.html +742 -0
  33. data/doc/CSVDecision/Result.html +139 -70
  34. data/doc/CSVDecision/Scan.html +313 -0
  35. data/doc/CSVDecision/Scan/InputHashes.html +369 -0
  36. data/doc/CSVDecision/ScanRow.html +1 -1
  37. data/doc/CSVDecision/Table.html +134 -52
  38. data/doc/CSVDecision/TableValidationError.html +1 -1
  39. data/doc/CSVDecision/Validate.html +1 -1
  40. data/doc/_index.html +26 -5
  41. data/doc/class_list.html +1 -1
  42. data/doc/file.README.html +50 -28
  43. data/doc/index.html +50 -28
  44. data/doc/method_list.html +234 -98
  45. data/doc/top-level-namespace.html +1 -1
  46. data/lib/csv_decision.rb +3 -0
  47. data/lib/csv_decision/columns.rb +11 -0
  48. data/lib/csv_decision/decision.rb +82 -56
  49. data/lib/csv_decision/dictionary.rb +5 -1
  50. data/lib/csv_decision/header.rb +1 -1
  51. data/lib/csv_decision/input.rb +14 -11
  52. data/lib/csv_decision/parse.rb +6 -2
  53. data/lib/csv_decision/paths.rb +78 -0
  54. data/lib/csv_decision/result.rb +42 -35
  55. data/lib/csv_decision/scan.rb +116 -0
  56. data/lib/csv_decision/table.rb +18 -7
  57. data/lib/csv_decision/validate.rb +1 -1
  58. data/spec/csv_decision/columns_spec.rb +14 -0
  59. data/spec/csv_decision/decision_spec.rb +1 -3
  60. data/spec/csv_decision/examples_spec.rb +25 -0
  61. data/spec/csv_decision/table_spec.rb +87 -0
  62. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fc2bc37813bc6b1bf8cff959e559b808dc5125b
4
- data.tar.gz: 75446892df8690d268627583c46df139b0fea96c
3
+ metadata.gz: ff2fef716b98e6c7e35b1ff4e6d60adf92747295
4
+ data.tar.gz: bc4c0f940707518e82019b7aa0d16f0107ec01d1
5
5
  SHA512:
6
- metadata.gz: 2def585d31f8dc19baa761c9407520b74be312da434f3521fc7e27c64bf035572c1f174b7271a66159f0746253897681735f0102580ec25479eba5401fb21725
7
- data.tar.gz: 27084f128c9ccf26dd81b932e9f9498a165dca08530c9c064f862267ceaab147ded8918bea1a8d037c7ffd5ea30368e7cf4ce3e024485379cabe7988201dcd45
6
+ metadata.gz: fb2d0b990168df3597d3131e48fc1ee8c620fe3b886acb23ffa71eabde146d9e2f7425f927ac74c02fc3e3acfbd2f56eae1a46bbeaf2fef614669b9a28dc6e24
7
+ data.tar.gz: 2a7beb77db22e035bdb36cb34ad1a96e22078afdd4974e0f7b7ebcda9465d5c04999cb0882b47534b3fc372bb45b76c384df77363cfd71d00ab8a5c11dfbbd87
@@ -1,3 +1,7 @@
1
+ ## v0.5.0, 11 February 2018.
2
+ *Additions*
3
+ - Add the ability to specify an input hash path using path: column types.
4
+
1
5
  ## v0.4.1, 10 February 2018.
2
6
  *Additions*
3
7
  - For consistency, input columns may now use the form `!nil?` to negate 0-arity Ruby methods.
data/README.md CHANGED
@@ -47,8 +47,7 @@ To get started, just add `csv_decision` to your `Gemfile`, and then run `bundle`
47
47
  ### Simple example
48
48
 
49
49
  This table considers two input conditions: `topic` and `region`, labeled `in:`.
50
- Certain combinations yield an output value for `team_member`,
51
- labeled `out:`.
50
+ Certain combinations yield an output value for `team_member`, labeled `out:`.
52
51
 
53
52
  ```
54
53
  in:topic | in:region | out:team_member
@@ -65,10 +64,8 @@ politics | | Henry
65
64
  ```
66
65
 
67
66
  When the topic is `finance` and the region is `Europe` the team member `Donald`
68
- is selected.
69
-
70
- This is a "first match" decision table in that as soon as a match is made execution
71
- stops and a single output row (hash) is returned.
67
+ is selected. This is a "first match" decision table in that as soon as a match is made
68
+ execution stops and a single output row (hash) is returned.
72
69
 
73
70
  The ordering of rows matters. `Ernest`, who is in charge of `finance` for the rest of
74
71
  the world, except for `America` and `Europe`, *must* come after his colleagues
@@ -99,7 +96,7 @@ Here's the example as code:
99
96
  table.decide(topic: 'culture', region: 'America') #=> { team_member: 'Zach' }
100
97
  ```
101
98
 
102
- An empty `in:` cell means "matches any value", even nils.
99
+ An empty `in:` cell means "matches any value".
103
100
 
104
101
  Note that all column header names are symbolized, so it's actually more accurate to write
105
102
  `in :topic`; however spaces before and after the `:` do not matter.
@@ -124,23 +121,21 @@ Complete documentation of all table parameters is in the code - see
124
121
  `lib/csv_decision/parse.rb` and `lib/csv_decision/table.rb`.
125
122
 
126
123
  ### CSV Decision features
127
- * Either returns the first matching row as a hash (default), or accumulates all matches as an
128
- array of hashes (i.e., `parse` option `first_match: false` or CSV file option `accumulate`).
124
+ * Either returns the first matching row as a hash (default), or accumulates all matches
125
+ as an array of hashes (i.e., `parse` option `first_match: false` or CSV file option
126
+ `accumulate`).
129
127
  * Fast decision-time performance (see `benchmarks` folder). Automatically indexes all
130
128
  constants-only columns that do not contain any empty strings.
131
- * In addition to simple strings, `csv_decision` can match basic Ruby constants (e.g., `=nil`),
129
+ * In addition to strings, can match basic Ruby constants (e.g., `=nil`),
132
130
  regular expressions (e.g., `=~ on|off`), comparisons (e.g., `> 100.0` ) and
133
131
  Ruby-style ranges (e.g., `1..10`)
134
132
  * Can compare an input column versus another input hash key - e.g., `> :column`.
135
- * Any cell starting with `#` is treated as a comment, and comments may appear anywhere in the
136
- table. (Comment cells are always interpreted as the empty string.)
137
- * Can use column symbol expressions or Ruby methods (0-arity) in input columns for
133
+ * Any cell starting with `#` is treated as a comment, and comments may appear anywhere in
134
+ the table.
135
+ * Column symbol expressions or Ruby methods (0-arity) may be used in input columns for
138
136
  matching - e.g., `:column.zero?` or `:column == 0`.
139
137
  * May also use Ruby methods in output columns - e.g., `:column.length`.
140
- * Accepts data as a file, CSV string or an array of arrays. (For safety all input data is
141
- force encoded to UTF-8, and non-ascii strings are converted to empty strings.)
142
- * All CSV cells are parsed for correctness, and helpful error messages generated for bad
143
- input.
138
+ * Accepts data as a file, CSV string or an array of arrays.
144
139
 
145
140
  #### Constants other than strings
146
141
  Although `csv_decision` is string oriented, it does recognise other types of constant
@@ -186,8 +181,8 @@ For example:
186
181
 
187
182
  Note that there is no need to include an input column for `:node` in the decision
188
183
  table - it just needs to be present in the input hash. The expression, `== :node` should be
189
- read as `:parent == :node`. It can also be shortened to just `:node`, so the above decision table
190
- may be simplified to:
184
+ read as `:parent == :node`. It can also be shortened to just `:node`, so the above decision
185
+ table may be simplified to:
191
186
 
192
187
  ```ruby
193
188
  data = <<~DATA
@@ -274,6 +269,35 @@ table.decide(ISIN: '123456789012', country: 'GB', class: 'private') #=> {PAID: '
274
269
 
275
270
  ```
276
271
 
272
+ #### Input `path` columns
273
+
274
+ For hashes that contain sub-hashes, it's possible to specify a path for the purposes
275
+ of matching. (Arrays are currently not supported.)
276
+
277
+ ```ruby
278
+ data = <<~DATA
279
+ path:, path:, out :value
280
+ header, , :source_name
281
+ header, metrics, :service_name
282
+ payload, , :amount
283
+ payload, ref_data, :account_id
284
+ DATA
285
+ table = CSVDecision.parse(data, first_match: false)
286
+
287
+ input = {
288
+ header: {
289
+ id: 1, type_cd: 'BUY', source_name: 'Client', client_name: 'AAPL',
290
+ metrics: { service_name: 'Trading', receive_time: '12:00' }
291
+ },
292
+ payload: {
293
+ tran_id: 9, amount: '100.00',
294
+ ref_data: { account_id: '5010', type_id: 'BUYL' }
295
+ }
296
+ }
297
+
298
+ table.decide(input) #=> { value: %w[Client Trading 100.00 5010] }
299
+ ```
300
+
277
301
  ### Testing
278
302
 
279
303
  `csv_decision` includes thorough [RSpec](http://rspec.info) tests:
@@ -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.4.1'
8
+ spec.version = '0.5.0'
9
9
  spec.authors = ['Brett Vickers']
10
10
  spec.email = ['brett@phillips-vickers.com']
11
11
  spec.description = 'CSV based Ruby decision tables.'
@@ -79,7 +79,7 @@
79
79
  <dl>
80
80
  <dt>Defined in:</dt>
81
81
  <dd>lib/csv_decision.rb<span class="defines">,<br />
82
- lib/csv_decision/data.rb,<br /> lib/csv_decision/load.rb,<br /> lib/csv_decision/index.rb,<br /> lib/csv_decision/input.rb,<br /> lib/csv_decision/parse.rb,<br /> lib/csv_decision/table.rb,<br /> lib/csv_decision/header.rb,<br /> lib/csv_decision/result.rb,<br /> lib/csv_decision/columns.rb,<br /> lib/csv_decision/options.rb,<br /> lib/csv_decision/decision.rb,<br /> lib/csv_decision/defaults.rb,<br /> lib/csv_decision/matchers.rb,<br /> lib/csv_decision/scan_row.rb,<br /> lib/csv_decision/validate.rb,<br /> lib/csv_decision/dictionary.rb,<br /> lib/csv_decision/matchers/guard.rb,<br /> lib/csv_decision/matchers/range.rb,<br /> lib/csv_decision/matchers/symbol.rb,<br /> lib/csv_decision/matchers/numeric.rb,<br /> lib/csv_decision/matchers/pattern.rb,<br /> lib/csv_decision/matchers/constant.rb,<br /> lib/csv_decision/matchers/function.rb</span>
82
+ lib/csv_decision/data.rb,<br /> lib/csv_decision/load.rb,<br /> lib/csv_decision/scan.rb,<br /> lib/csv_decision/index.rb,<br /> lib/csv_decision/input.rb,<br /> lib/csv_decision/parse.rb,<br /> lib/csv_decision/paths.rb,<br /> lib/csv_decision/table.rb,<br /> lib/csv_decision/header.rb,<br /> lib/csv_decision/result.rb,<br /> lib/csv_decision/columns.rb,<br /> lib/csv_decision/options.rb,<br /> lib/csv_decision/decision.rb,<br /> lib/csv_decision/defaults.rb,<br /> lib/csv_decision/matchers.rb,<br /> lib/csv_decision/scan_row.rb,<br /> lib/csv_decision/validate.rb,<br /> lib/csv_decision/dictionary.rb,<br /> lib/csv_decision/matchers/guard.rb,<br /> lib/csv_decision/matchers/range.rb,<br /> lib/csv_decision/matchers/symbol.rb,<br /> lib/csv_decision/matchers/numeric.rb,<br /> lib/csv_decision/matchers/pattern.rb,<br /> lib/csv_decision/matchers/constant.rb,<br /> lib/csv_decision/matchers/function.rb</span>
83
83
  </dd>
84
84
  </dl>
85
85
 
@@ -121,7 +121,7 @@ LICENSE and README.md for details.</p>
121
121
 
122
122
 
123
123
 
124
- <strong class="classes">Classes:</strong> <span class='object_link'><a href="CSVDecision/CellValidationError.html" title="CSVDecision::CellValidationError (class)">CellValidationError</a></span>, <span class='object_link'><a href="CSVDecision/Columns.html" title="CSVDecision::Columns (class)">Columns</a></span>, <span class='object_link'><a href="CSVDecision/Decision.html" title="CSVDecision::Decision (class)">Decision</a></span>, <span class='object_link'><a href="CSVDecision/Error.html" title="CSVDecision::Error (class)">Error</a></span>, <span class='object_link'><a href="CSVDecision/FileError.html" title="CSVDecision::FileError (class)">FileError</a></span>, <span class='object_link'><a href="CSVDecision/Index.html" title="CSVDecision::Index (class)">Index</a></span>, <span class='object_link'><a href="CSVDecision/Matchers.html" title="CSVDecision::Matchers (class)">Matchers</a></span>, <span class='object_link'><a href="CSVDecision/Result.html" title="CSVDecision::Result (class)">Result</a></span>, <span class='object_link'><a href="CSVDecision/ScanRow.html" title="CSVDecision::ScanRow (class)">ScanRow</a></span>, <span class='object_link'><a href="CSVDecision/Table.html" title="CSVDecision::Table (class)">Table</a></span>, <span class='object_link'><a href="CSVDecision/TableValidationError.html" title="CSVDecision::TableValidationError (class)">TableValidationError</a></span>
124
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="CSVDecision/CellValidationError.html" title="CSVDecision::CellValidationError (class)">CellValidationError</a></span>, <span class='object_link'><a href="CSVDecision/Columns.html" title="CSVDecision::Columns (class)">Columns</a></span>, <span class='object_link'><a href="CSVDecision/Decision.html" title="CSVDecision::Decision (class)">Decision</a></span>, <span class='object_link'><a href="CSVDecision/Error.html" title="CSVDecision::Error (class)">Error</a></span>, <span class='object_link'><a href="CSVDecision/FileError.html" title="CSVDecision::FileError (class)">FileError</a></span>, <span class='object_link'><a href="CSVDecision/Index.html" title="CSVDecision::Index (class)">Index</a></span>, <span class='object_link'><a href="CSVDecision/Matchers.html" title="CSVDecision::Matchers (class)">Matchers</a></span>, <span class='object_link'><a href="CSVDecision/Paths.html" title="CSVDecision::Paths (class)">Paths</a></span>, <span class='object_link'><a href="CSVDecision/Result.html" title="CSVDecision::Result (class)">Result</a></span>, <span class='object_link'><a href="CSVDecision/Scan.html" title="CSVDecision::Scan (class)">Scan</a></span>, <span class='object_link'><a href="CSVDecision/ScanRow.html" title="CSVDecision::ScanRow (class)">ScanRow</a></span>, <span class='object_link'><a href="CSVDecision/Table.html" title="CSVDecision::Table (class)">Table</a></span>, <span class='object_link'><a href="CSVDecision/TableValidationError.html" title="CSVDecision::TableValidationError (class)">TableValidationError</a></span>
125
125
 
126
126
 
127
127
  </p>
@@ -532,12 +532,12 @@ table.decide(topic: &#39;finance&#39;, region: &#39;Europe&#39;) #=&gt; team_mem
532
532
  <pre class="lines">
533
533
 
534
534
 
535
- 46
536
535
  47
537
- 48</pre>
536
+ 48
537
+ 49</pre>
538
538
  </td>
539
539
  <td>
540
- <pre class="code"><span class="info file"># File 'lib/csv_decision/parse.rb', line 46</span>
540
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/parse.rb', line 47</span>
541
541
 
542
542
  <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='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
543
543
  <span class='const'><span class='object_link'><a href="CSVDecision/Parse.html" title="CSVDecision::Parse (module)">Parse</a></span></span><span class='period'>.</span><span class='id identifier rubyid_table'><span class='object_link'><a href="CSVDecision/Parse.html#table-class_method" title="CSVDecision::Parse.table (method)">table</a></span></span><span class='lparen'>(</span><span class='label'>data:</span> <span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='const'><span class='object_link'><a href="CSVDecision/Options.html" title="CSVDecision::Options (module)">Options</a></span></span><span class='period'>.</span><span class='id identifier rubyid_normalize'><span class='object_link'><a href="CSVDecision/Options.html#normalize-class_method" title="CSVDecision::Options.normalize (method)">normalize</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='rparen'>)</span>
@@ -611,7 +611,7 @@ table.decide(topic: &#39;finance&#39;, region: &#39;Europe&#39;) #=&gt; team_mem
611
611
  </div>
612
612
 
613
613
  <div id="footer">
614
- Generated on Sun Jan 28 14:41:48 2018 by
614
+ Generated on Sun Feb 11 10:26:07 2018 by
615
615
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
616
616
  0.9.12 (ruby-2.4.0).
617
617
  </div>
@@ -133,7 +133,7 @@
133
133
  </div>
134
134
 
135
135
  <div id="footer">
136
- Generated on Sun Jan 28 14:41:48 2018 by
136
+ Generated on Sun Feb 11 10:26:07 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>
@@ -405,6 +405,30 @@
405
405
  <p>Output columns hash keyed by column index.</p>
406
406
  </div></span>
407
407
 
408
+ </li>
409
+
410
+
411
+ <li class="public ">
412
+ <span class="summary_signature">
413
+
414
+ <a href="#paths-instance_method" title="#paths (instance method)">#<strong>paths</strong> &#x21d2; Hash{Index=&gt;Entry} </a>
415
+
416
+
417
+
418
+ </span>
419
+
420
+
421
+
422
+
423
+
424
+
425
+ <span class="private note title">private</span>
426
+
427
+
428
+ <span class="summary_desc"><div class='inline'>
429
+ <p>path: columns hash keyed by column index.</p>
430
+ </div></span>
431
+
408
432
  </li>
409
433
 
410
434
 
@@ -477,22 +501,22 @@
477
501
  <pre class="lines">
478
502
 
479
503
 
480
- 167
481
- 168
482
- 169
483
- 170
484
- 171
485
- 172
486
- 173
487
- 174
488
- 175
489
- 176
490
- 177
491
504
  178
492
- 179</pre>
505
+ 179
506
+ 180
507
+ 181
508
+ 182
509
+ 183
510
+ 184
511
+ 185
512
+ 186
513
+ 187
514
+ 188
515
+ 189
516
+ 190</pre>
493
517
  </td>
494
518
  <td>
495
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 167</span>
519
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 178</span>
496
520
 
497
521
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='rparen'>)</span>
498
522
  <span class='comment'># If a column does not have a valid header cell, then it&#39;s empty of data.
@@ -802,12 +826,12 @@
802
826
  <pre class="lines">
803
827
 
804
828
 
805
- 128
806
- 129
807
- 130</pre>
829
+ 133
830
+ 134
831
+ 135</pre>
808
832
  </td>
809
833
  <td>
810
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 128</span>
834
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 133</span>
811
835
 
812
836
  <span class='kw'>def</span> <span class='id identifier rubyid_defaults'>defaults</span>
813
837
  <span class='ivar'>@dictionary</span><span class='op'>&amp;.</span><span class='id identifier rubyid_defaults'>defaults</span>
@@ -847,12 +871,12 @@
847
871
  <pre class="lines">
848
872
 
849
873
 
850
- 133
851
- 134
852
- 135</pre>
874
+ 138
875
+ 139
876
+ 140</pre>
853
877
  </td>
854
878
  <td>
855
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 133</span>
879
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 138</span>
856
880
 
857
881
  <span class='kw'>def</span> <span class='id identifier rubyid_defaults='>defaults=</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
858
882
  <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_defaults'>defaults</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
@@ -910,12 +934,12 @@
910
934
  <pre class="lines">
911
935
 
912
936
 
913
- 139
914
- 140
915
- 141</pre>
937
+ 144
938
+ 145
939
+ 146</pre>
916
940
  </td>
917
941
  <td>
918
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 139</span>
942
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 144</span>
919
943
 
920
944
  <span class='kw'>def</span> <span class='id identifier rubyid_dictionary'>dictionary</span>
921
945
  <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_columns'>columns</span>
@@ -968,12 +992,12 @@
968
992
  <pre class="lines">
969
993
 
970
994
 
971
- 157
972
- 158
973
- 159</pre>
995
+ 162
996
+ 163
997
+ 164</pre>
974
998
  </td>
975
999
  <td>
976
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 157</span>
1000
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 162</span>
977
1001
 
978
1002
  <span class='kw'>def</span> <span class='id identifier rubyid_ifs'>ifs</span>
979
1003
  <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_ifs'>ifs</span>
@@ -1031,12 +1055,12 @@
1031
1055
  <pre class="lines">
1032
1056
 
1033
1057
 
1034
- 162
1035
- 163
1036
- 164</pre>
1058
+ 173
1059
+ 174
1060
+ 175</pre>
1037
1061
  </td>
1038
1062
  <td>
1039
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 162</span>
1063
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 173</span>
1040
1064
 
1041
1065
  <span class='kw'>def</span> <span class='id identifier rubyid_input_keys'>input_keys</span>
1042
1066
  <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</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> <span class='id identifier rubyid_v'>v</span> <span class='op'>==</span> <span class='symbol'>:in</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span>
@@ -1089,12 +1113,12 @@
1089
1113
  <pre class="lines">
1090
1114
 
1091
1115
 
1092
- 145
1093
- 146
1094
- 147</pre>
1116
+ 150
1117
+ 151
1118
+ 152</pre>
1095
1119
  </td>
1096
1120
  <td>
1097
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 145</span>
1121
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 150</span>
1098
1122
 
1099
1123
  <span class='kw'>def</span> <span class='id identifier rubyid_ins'>ins</span>
1100
1124
  <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_ins'>ins</span>
@@ -1147,12 +1171,12 @@
1147
1171
  <pre class="lines">
1148
1172
 
1149
1173
 
1150
- 151
1151
- 152
1152
- 153</pre>
1174
+ 156
1175
+ 157
1176
+ 158</pre>
1153
1177
  </td>
1154
1178
  <td>
1155
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 151</span>
1179
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 156</span>
1156
1180
 
1157
1181
  <span class='kw'>def</span> <span class='id identifier rubyid_outs'>outs</span>
1158
1182
  <span class='ivar'>@dictionary</span><span class='op'>&amp;.</span><span class='id identifier rubyid_outs'>outs</span>
@@ -1160,6 +1184,64 @@
1160
1184
  </td>
1161
1185
  </tr>
1162
1186
  </table>
1187
+ </div>
1188
+
1189
+ <div class="method_details ">
1190
+ <h3 class="signature " id="paths-instance_method">
1191
+
1192
+ #<strong>paths</strong> &#x21d2; <tt>Hash{<span class='object_link'><a href="Index.html" title="CSVDecision::Index (class)">Index</a></span>=&gt;Entry}</tt>
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+ </h3><div class="docstring">
1199
+ <div class="discussion">
1200
+ <p class="note private">
1201
+ <strong>This method is part of a private API.</strong>
1202
+ You should avoid using this method if possible, as it may be removed or be changed in the future.
1203
+ </p>
1204
+
1205
+ <p>path: columns hash keyed by column index.</p>
1206
+
1207
+
1208
+ </div>
1209
+ </div>
1210
+ <div class="tags">
1211
+
1212
+ <p class="tag_title">Returns:</p>
1213
+ <ul class="return">
1214
+
1215
+ <li>
1216
+
1217
+
1218
+ <span class='type'>(<tt>Hash{<span class='object_link'><a href="Index.html" title="CSVDecision::Index (class)">Index</a></span>=&gt;Entry}</tt>)</span>
1219
+
1220
+
1221
+
1222
+ </li>
1223
+
1224
+ </ul>
1225
+
1226
+ </div><table class="source_code">
1227
+ <tr>
1228
+ <td>
1229
+ <pre class="lines">
1230
+
1231
+
1232
+ 168
1233
+ 169
1234
+ 170</pre>
1235
+ </td>
1236
+ <td>
1237
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 168</span>
1238
+
1239
+ <span class='kw'>def</span> <span class='id identifier rubyid_paths'>paths</span>
1240
+ <span class='ivar'>@dictionary</span><span class='period'>.</span><span class='id identifier rubyid_paths'>paths</span>
1241
+ <span class='kw'>end</span></pre>
1242
+ </td>
1243
+ </tr>
1244
+ </table>
1163
1245
  </div>
1164
1246
 
1165
1247
  </div>
@@ -1167,7 +1249,7 @@
1167
1249
  </div>
1168
1250
 
1169
1251
  <div id="footer">
1170
- Generated on Sun Jan 28 14:41:49 2018 by
1252
+ Generated on Sun Feb 11 10:26:08 2018 by
1171
1253
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1172
1254
  0.9.12 (ruby-2.4.0).
1173
1255
  </div>
@@ -257,6 +257,33 @@ overlap with input column symbols.</p>
257
257
  <p>All output column dictionary entries.</p>
258
258
  </div></span>
259
259
 
260
+ </li>
261
+
262
+
263
+ <li class="public ">
264
+ <span class="summary_signature">
265
+
266
+ <a href="#paths-instance_method" title="#paths (instance method)">#<strong>paths</strong> &#x21d2; Hash{Integer=&gt;Symbol} </a>
267
+
268
+
269
+
270
+ </span>
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+ <span class="private note title">private</span>
281
+
282
+
283
+ <span class="summary_desc"><div class='inline'>
284
+ <p>All path columns.</p>
285
+ </div></span>
286
+
260
287
  </li>
261
288
 
262
289
 
@@ -335,16 +362,17 @@ overlap with input column symbols.</p>
335
362
  <pre class="lines">
336
363
 
337
364
 
338
- 118
339
- 119
340
- 120
341
- 121
342
365
  122
343
366
  123
344
- 124</pre>
367
+ 124
368
+ 125
369
+ 126
370
+ 127
371
+ 128
372
+ 129</pre>
345
373
  </td>
346
374
  <td>
347
- <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 118</span>
375
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 122</span>
348
376
 
349
377
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
350
378
  <span class='ivar'>@columns</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
@@ -352,6 +380,7 @@ overlap with input column symbols.</p>
352
380
  <span class='ivar'>@ifs</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
353
381
  <span class='ivar'>@ins</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
354
382
  <span class='ivar'>@outs</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
383
+ <span class='ivar'>@paths</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
355
384
  <span class='kw'>end</span></pre>
356
385
  </td>
357
386
  </tr>
@@ -691,13 +720,78 @@ of :outs.</p>
691
720
  </table>
692
721
  </div>
693
722
 
723
+
724
+ <span id="paths=-instance_method"></span>
725
+ <div class="method_details ">
726
+ <h3 class="signature " id="paths-instance_method">
727
+
728
+ #<strong>paths</strong> &#x21d2; <tt>Hash{Integer=&gt;Symbol}</tt>
729
+
730
+
731
+
732
+
733
+
734
+ </h3><div class="docstring">
735
+ <div class="discussion">
736
+ <p class="note private">
737
+ <strong>This method is part of a private API.</strong>
738
+ You should avoid using this method if possible, as it may be removed or be changed in the future.
739
+ </p>
740
+
741
+ <p>Returns All path columns. This is actually just a subset of :outs.</p>
742
+
743
+
744
+ </div>
745
+ </div>
746
+ <div class="tags">
747
+
748
+ <p class="tag_title">Returns:</p>
749
+ <ul class="return">
750
+
751
+ <li>
752
+
753
+
754
+ <span class='type'>(<tt>Hash{Integer=&gt;Symbol}</tt>)</span>
755
+
756
+
757
+
758
+ &mdash;
759
+ <div class='inline'>
760
+ <p>All path columns. This is actually just a subset of :outs.</p>
761
+ </div>
762
+
763
+ </li>
764
+
765
+ </ul>
766
+
767
+ </div><table class="source_code">
768
+ <tr>
769
+ <td>
770
+ <pre class="lines">
771
+
772
+
773
+ 120
774
+ 121
775
+ 122</pre>
776
+ </td>
777
+ <td>
778
+ <pre class="code"><span class="info file"># File 'lib/csv_decision/columns.rb', line 120</span>
779
+
780
+ <span class='kw'>def</span> <span class='id identifier rubyid_paths'>paths</span>
781
+ <span class='ivar'>@paths</span>
782
+ <span class='kw'>end</span></pre>
783
+ </td>
784
+ </tr>
785
+ </table>
786
+ </div>
787
+
694
788
  </div>
695
789
 
696
790
 
697
791
  </div>
698
792
 
699
793
  <div id="footer">
700
- Generated on Sun Jan 28 14:41:49 2018 by
794
+ Generated on Sun Feb 11 10:26:08 2018 by
701
795
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
702
796
  0.9.12 (ruby-2.4.0).
703
797
  </div>