csv_decision 0.3.2 → 0.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +4 -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 +1 -1
- 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 +1 -1
- data/doc/CSVDecision/Load.html +1 -1
- data/doc/CSVDecision/Matchers.html +136 -56
- 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 +13 -13
- 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 +31 -20
- data/doc/CSVDecision/Options.html +1 -1
- data/doc/CSVDecision/Parse.html +1 -1
- data/doc/CSVDecision/Result.html +1 -1
- data/doc/CSVDecision/ScanRow.html +1 -1
- data/doc/CSVDecision/Table.html +1 -1
- 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 +7 -3
- data/doc/index.html +7 -3
- data/doc/top-level-namespace.html +1 -1
- data/lib/csv_decision/matchers.rb +12 -2
- data/lib/csv_decision/matchers/symbol.rb +57 -8
- data/spec/csv_decision/examples_spec.rb +17 -0
- data/spec/csv_decision/table_spec.rb +32 -4
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7238268643ad9dc69c91b0367550cd0ed2577b7d
|
|
4
|
+
data.tar.gz: d00d7a55a444b8026cb2bf477ce2812f16c2084d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 89b76ce96dd906ab748158e6a96bb0f02e40abf6b4df4a5fafa5809dac1663a1b7ea97cbbc1cdfad7e10456e5b78b3e674e9e2032dcd24ac6009d8dcc8467b82
|
|
7
|
+
data.tar.gz: bde8179729614e89c2fa5fa5861e5ca55fe34a2038b752e3d4e27968f9eb83fb8a5979d18bd5353089482e54315355190e28792a1008618d169267df15a7790c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## v0.4.0, 28 January 2018.
|
|
2
|
+
*Additions*
|
|
3
|
+
- Input columns may now use 0-arity Ruby methods to implement conditional logic.
|
|
4
|
+
For example `.present?` or `nil?`. Negation is also supported - e.g., `!.nil?`.
|
|
5
|
+
|
|
1
6
|
## v0.3.2, 28 January 2018.
|
|
2
7
|
*Changes*
|
|
3
8
|
- Refactor code and update documentation.
|
data/README.md
CHANGED
|
@@ -196,7 +196,10 @@ may be simplified to:
|
|
|
196
196
|
, no
|
|
197
197
|
DATA
|
|
198
198
|
```
|
|
199
|
-
These comparison operators are also supported: `!=`, `>`, `>=`, `<`, `<=`.
|
|
199
|
+
These comparison operators are also supported: `!=`, `>`, `>=`, `<`, `<=`.
|
|
200
|
+
In addition, you can also apply a Ruby 0-arity method - e.g., `.present?` or `.nil?`. Negation is
|
|
201
|
+
also supported - e.g., `!.nil?`.
|
|
202
|
+
|
|
200
203
|
For more simple examples see `spec/csv_decision/examples_spec.rb`.
|
|
201
204
|
|
|
202
205
|
#### Input `guard` conditions
|
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.
|
|
8
|
+
spec.version = '0.4.0'
|
|
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
|
@@ -611,7 +611,7 @@ table.decide(topic: 'finance', region: 'Europe') #=> team_mem
|
|
|
611
611
|
</div>
|
|
612
612
|
|
|
613
613
|
<div id="footer">
|
|
614
|
-
Generated on Sun Jan 28
|
|
614
|
+
Generated on Sun Jan 28 14:41:48 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
|
|
136
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
1170
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
700
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
472
|
+
Generated on Sun Jan 28 14:41:48 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>
|
|
@@ -655,7 +655,7 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
655
655
|
</div>
|
|
656
656
|
|
|
657
657
|
<div id="footer">
|
|
658
|
-
Generated on Sun Jan 28
|
|
658
|
+
Generated on Sun Jan 28 14:41:49 2018 by
|
|
659
659
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
660
660
|
0.9.12 (ruby-2.4.0).
|
|
661
661
|
</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 Sun Jan 28
|
|
284
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
419
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
1140
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
132
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
136
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
640
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
734
|
+
Generated on Sun Jan 28 14:41:48 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
|
@@ -268,7 +268,7 @@ hash. Otherwise a copy of the input hash is symbolized.</p>
|
|
|
268
268
|
</div>
|
|
269
269
|
|
|
270
270
|
<div id="footer">
|
|
271
|
-
Generated on Sun Jan 28
|
|
271
|
+
Generated on Sun Jan 28 14:41:48 2018 by
|
|
272
272
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
273
273
|
0.9.12 (ruby-2.4.0).
|
|
274
274
|
</div>
|
data/doc/CSVDecision/Load.html
CHANGED
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
</div>
|
|
287
287
|
|
|
288
288
|
<div id="footer">
|
|
289
|
-
Generated on Sun Jan 28
|
|
289
|
+
Generated on Sun Jan 28 14:41:48 2018 by
|
|
290
290
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
291
291
|
0.9.12 (ruby-2.4.0).
|
|
292
292
|
</div>
|
|
@@ -150,6 +150,46 @@
|
|
|
150
150
|
</dt>
|
|
151
151
|
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>!</span><span class='tstring_end'>'</span></span></pre></dd>
|
|
152
152
|
|
|
153
|
+
<dt id="INEQUALITY-constant" class="">INEQUALITY =
|
|
154
|
+
<div class="docstring">
|
|
155
|
+
<div class="discussion">
|
|
156
|
+
<p class="note private">
|
|
157
|
+
<strong>This constant is part of a private API.</strong>
|
|
158
|
+
You should avoid using this constant if possible, as it may be removed or be changed in the future.
|
|
159
|
+
</p>
|
|
160
|
+
|
|
161
|
+
<p>Symbols used for inequality</p>
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="tags">
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
</div>
|
|
170
|
+
</dt>
|
|
171
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>!=|!</span><span class='tstring_end'>'</span></span></pre></dd>
|
|
172
|
+
|
|
173
|
+
<dt id="INEQUALITY_RE-constant" class="">INEQUALITY_RE =
|
|
174
|
+
<div class="docstring">
|
|
175
|
+
<div class="discussion">
|
|
176
|
+
<p class="note private">
|
|
177
|
+
<strong>This constant is part of a private API.</strong>
|
|
178
|
+
You should avoid using this constant if possible, as it may be removed or be changed in the future.
|
|
179
|
+
</p>
|
|
180
|
+
|
|
181
|
+
<p>Match string for inequality</p>
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
<div class="tags">
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
</div>
|
|
190
|
+
</dt>
|
|
191
|
+
<dd><pre class="code"><span class='id identifier rubyid_regexp'>regexp</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="#INEQUALITY-constant" title="CSVDecision::Matchers::INEQUALITY (constant)">INEQUALITY</a></span></span><span class='rparen'>)</span></pre></dd>
|
|
192
|
+
|
|
153
193
|
<dt id="EQUALS-constant" class="">EQUALS =
|
|
154
194
|
<div class="docstring">
|
|
155
195
|
<div class="discussion">
|
|
@@ -158,8 +198,8 @@
|
|
|
158
198
|
You should avoid using this constant if possible, as it may be removed or be changed in the future.
|
|
159
199
|
</p>
|
|
160
200
|
|
|
161
|
-
<p>
|
|
162
|
-
these 3 symbols.</p>
|
|
201
|
+
<p>Equality, cell constants and functions specified by prefixing the value
|
|
202
|
+
with one of these 3 symbols.</p>
|
|
163
203
|
|
|
164
204
|
|
|
165
205
|
</div>
|
|
@@ -171,6 +211,46 @@ these 3 symbols.</p>
|
|
|
171
211
|
</dt>
|
|
172
212
|
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>==|:=|=</span><span class='tstring_end'>'</span></span></pre></dd>
|
|
173
213
|
|
|
214
|
+
<dt id="EQUALS_RE-constant" class="">EQUALS_RE =
|
|
215
|
+
<div class="docstring">
|
|
216
|
+
<div class="discussion">
|
|
217
|
+
<p class="note private">
|
|
218
|
+
<strong>This constant is part of a private API.</strong>
|
|
219
|
+
You should avoid using this constant if possible, as it may be removed or be changed in the future.
|
|
220
|
+
</p>
|
|
221
|
+
|
|
222
|
+
<p>Match string for equality</p>
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
<div class="tags">
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
</div>
|
|
231
|
+
</dt>
|
|
232
|
+
<dd><pre class="code"><span class='id identifier rubyid_regexp'>regexp</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="#EQUALS-constant" title="CSVDecision::Matchers::EQUALS (constant)">EQUALS</a></span></span><span class='rparen'>)</span></pre></dd>
|
|
233
|
+
|
|
234
|
+
<dt id="METHOD_NAME_RE-constant" class="">METHOD_NAME_RE =
|
|
235
|
+
<div class="docstring">
|
|
236
|
+
<div class="discussion">
|
|
237
|
+
<p class="note private">
|
|
238
|
+
<strong>This constant is part of a private API.</strong>
|
|
239
|
+
You should avoid using this constant if possible, as it may be removed or be changed in the future.
|
|
240
|
+
</p>
|
|
241
|
+
|
|
242
|
+
<p>Method names are stricter than CSV column names.</p>
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
<div class="tags">
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
</div>
|
|
251
|
+
</dt>
|
|
252
|
+
<dd><pre class="code"><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\A[_a-z][_a-z0-9]*[?!=]?\z</span><span class='regexp_end'>/</span></span></pre></dd>
|
|
253
|
+
|
|
174
254
|
<dt id="NUMERIC-constant" class="">NUMERIC =
|
|
175
255
|
<div class="docstring">
|
|
176
256
|
<div class="discussion">
|
|
@@ -534,14 +614,14 @@ nil.</p>
|
|
|
534
614
|
<pre class="lines">
|
|
535
615
|
|
|
536
616
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
617
|
+
153
|
|
618
|
+
154
|
|
619
|
+
155
|
|
620
|
+
156
|
|
621
|
+
157</pre>
|
|
542
622
|
</td>
|
|
543
623
|
<td>
|
|
544
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
624
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 153</span>
|
|
545
625
|
|
|
546
626
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
|
|
547
627
|
<span class='id identifier rubyid_matchers'>matchers</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:matchers</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_klass'>klass</span><span class='op'>|</span> <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
|
@@ -608,12 +688,12 @@ nil.</p>
|
|
|
608
688
|
<pre class="lines">
|
|
609
689
|
|
|
610
690
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
691
|
+
147
|
|
692
|
+
148
|
|
693
|
+
149</pre>
|
|
614
694
|
</td>
|
|
615
695
|
<td>
|
|
616
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
696
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 147</span>
|
|
617
697
|
|
|
618
698
|
<span class='kw'>def</span> <span class='id identifier rubyid_ins'>ins</span>
|
|
619
699
|
<span class='ivar'>@ins</span>
|
|
@@ -673,12 +753,12 @@ nil.</p>
|
|
|
673
753
|
<pre class="lines">
|
|
674
754
|
|
|
675
755
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
756
|
+
150
|
|
757
|
+
151
|
|
758
|
+
152</pre>
|
|
679
759
|
</td>
|
|
680
760
|
<td>
|
|
681
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
761
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 150</span>
|
|
682
762
|
|
|
683
763
|
<span class='kw'>def</span> <span class='id identifier rubyid_outs'>outs</span>
|
|
684
764
|
<span class='ivar'>@outs</span>
|
|
@@ -753,15 +833,15 @@ nil.</p>
|
|
|
753
833
|
<pre class="lines">
|
|
754
834
|
|
|
755
835
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
836
|
+
95
|
|
837
|
+
96
|
|
838
|
+
97</pre>
|
|
759
839
|
</td>
|
|
760
840
|
<td>
|
|
761
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
841
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 95</span>
|
|
762
842
|
|
|
763
843
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_normalize_operator'>normalize_operator</span><span class='lparen'>(</span><span class='id identifier rubyid_operator'>operator</span><span class='rparen'>)</span>
|
|
764
|
-
<span class='const'>EQUALS_RE</span><span class='period'>.</span><span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='id identifier rubyid_operator'>operator</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>==</span><span class='tstring_end'>'</span></span> <span class='op'>:</span> <span class='id identifier rubyid_operator'>operator</span>
|
|
844
|
+
<span class='const'><span class='object_link'><a href="#EQUALS_RE-constant" title="CSVDecision::Matchers::EQUALS_RE (constant)">EQUALS_RE</a></span></span><span class='period'>.</span><span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='id identifier rubyid_operator'>operator</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>==</span><span class='tstring_end'>'</span></span> <span class='op'>:</span> <span class='id identifier rubyid_operator'>operator</span>
|
|
765
845
|
<span class='kw'>end</span></pre>
|
|
766
846
|
</td>
|
|
767
847
|
</tr>
|
|
@@ -827,15 +907,15 @@ valid numeric string.</p>
|
|
|
827
907
|
<pre class="lines">
|
|
828
908
|
|
|
829
909
|
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
910
|
+
109
|
|
911
|
+
110
|
|
912
|
+
111
|
|
913
|
+
112
|
|
914
|
+
113
|
|
915
|
+
114</pre>
|
|
836
916
|
</td>
|
|
837
917
|
<td>
|
|
838
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
918
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 109</span>
|
|
839
919
|
|
|
840
920
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_numeric'>numeric</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
|
|
841
921
|
<span class='kw'>return</span> <span class='id identifier rubyid_value'>value</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Integer</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>BigDecimal</span><span class='rparen'>)</span>
|
|
@@ -944,21 +1024,21 @@ matchers.</p>
|
|
|
944
1024
|
<pre class="lines">
|
|
945
1025
|
|
|
946
1026
|
|
|
947
|
-
123
|
|
948
|
-
124
|
|
949
|
-
125
|
|
950
|
-
126
|
|
951
|
-
127
|
|
952
|
-
128
|
|
953
|
-
129
|
|
954
|
-
130
|
|
955
|
-
131
|
|
956
|
-
132
|
|
957
1027
|
133
|
|
958
|
-
134
|
|
1028
|
+
134
|
|
1029
|
+
135
|
|
1030
|
+
136
|
|
1031
|
+
137
|
|
1032
|
+
138
|
|
1033
|
+
139
|
|
1034
|
+
140
|
|
1035
|
+
141
|
|
1036
|
+
142
|
|
1037
|
+
143
|
|
1038
|
+
144</pre>
|
|
959
1039
|
</td>
|
|
960
1040
|
<td>
|
|
961
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
1041
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 133</span>
|
|
962
1042
|
|
|
963
1043
|
<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'>columns:</span><span class='comma'>,</span> <span class='label'>matchers:</span><span class='comma'>,</span> <span class='label'>row:</span><span class='rparen'>)</span>
|
|
964
1044
|
<span class='comment'># Build an array of column indexes requiring simple constant matches,
|
|
@@ -1120,15 +1200,15 @@ nil.</p>
|
|
|
1120
1200
|
<pre class="lines">
|
|
1121
1201
|
|
|
1122
1202
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1203
|
+
120
|
|
1204
|
+
121
|
|
1205
|
+
122
|
|
1206
|
+
123
|
|
1207
|
+
124
|
|
1208
|
+
125</pre>
|
|
1129
1209
|
</td>
|
|
1130
1210
|
<td>
|
|
1131
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
1211
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 120</span>
|
|
1132
1212
|
|
|
1133
1213
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_numeric'>to_numeric</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
|
|
1134
1214
|
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='const'>NUMERIC_RE</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
|
@@ -1231,12 +1311,12 @@ nil.</p>
|
|
|
1231
1311
|
<pre class="lines">
|
|
1232
1312
|
|
|
1233
1313
|
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1314
|
+
164
|
|
1315
|
+
165
|
|
1316
|
+
166</pre>
|
|
1237
1317
|
</td>
|
|
1238
1318
|
<td>
|
|
1239
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
1319
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 164</span>
|
|
1240
1320
|
|
|
1241
1321
|
<span class='kw'>def</span> <span class='id identifier rubyid_parse_ins'>parse_ins</span><span class='lparen'>(</span><span class='label'>columns:</span><span class='comma'>,</span> <span class='label'>row:</span><span class='rparen'>)</span>
|
|
1242
1322
|
<span class='const'><span class='object_link'><a href="" title="CSVDecision::Matchers (class)">Matchers</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="#parse-class_method" title="CSVDecision::Matchers.parse (method)">parse</a></span></span><span class='lparen'>(</span><span class='label'>columns:</span> <span class='id identifier rubyid_columns'>columns</span><span class='comma'>,</span> <span class='label'>matchers:</span> <span class='ivar'>@ins</span><span class='comma'>,</span> <span class='label'>row:</span> <span class='id identifier rubyid_row'>row</span><span class='rparen'>)</span>
|
|
@@ -1330,12 +1410,12 @@ nil.</p>
|
|
|
1330
1410
|
<pre class="lines">
|
|
1331
1411
|
|
|
1332
1412
|
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1413
|
+
173
|
|
1414
|
+
174
|
|
1415
|
+
175</pre>
|
|
1336
1416
|
</td>
|
|
1337
1417
|
<td>
|
|
1338
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
1418
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 173</span>
|
|
1339
1419
|
|
|
1340
1420
|
<span class='kw'>def</span> <span class='id identifier rubyid_parse_outs'>parse_outs</span><span class='lparen'>(</span><span class='label'>columns:</span><span class='comma'>,</span> <span class='label'>row:</span><span class='rparen'>)</span>
|
|
1341
1421
|
<span class='const'><span class='object_link'><a href="" title="CSVDecision::Matchers (class)">Matchers</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="#parse-class_method" title="CSVDecision::Matchers.parse (method)">parse</a></span></span><span class='lparen'>(</span><span class='label'>columns:</span> <span class='id identifier rubyid_columns'>columns</span><span class='comma'>,</span> <span class='label'>matchers:</span> <span class='ivar'>@outs</span><span class='comma'>,</span> <span class='label'>row:</span> <span class='id identifier rubyid_row'>row</span><span class='rparen'>)</span>
|
|
@@ -1350,7 +1430,7 @@ nil.</p>
|
|
|
1350
1430
|
</div>
|
|
1351
1431
|
|
|
1352
1432
|
<div id="footer">
|
|
1353
|
-
Generated on Sun Jan 28
|
|
1433
|
+
Generated on Sun Jan 28 14:41:48 2018 by
|
|
1354
1434
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1355
1435
|
0.9.12 (ruby-2.4.0).
|
|
1356
1436
|
</div>
|
|
@@ -474,7 +474,7 @@ some type of function.</p>
|
|
|
474
474
|
</div>
|
|
475
475
|
|
|
476
476
|
<div id="footer">
|
|
477
|
-
Generated on Sun Jan 28
|
|
477
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
504
|
+
Generated on Sun Jan 28 14:41:50 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 Sun Jan 28
|
|
496
|
+
Generated on Sun Jan 28 14:41:49 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>
|
|
@@ -267,10 +267,10 @@
|
|
|
267
267
|
<pre class="lines">
|
|
268
268
|
|
|
269
269
|
|
|
270
|
-
|
|
270
|
+
179</pre>
|
|
271
271
|
</td>
|
|
272
272
|
<td>
|
|
273
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
273
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 179</span>
|
|
274
274
|
|
|
275
275
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid__options'>_options</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span><span class='semicolon'>;</span> <span class='kw'>end</span></pre>
|
|
276
276
|
</td>
|
|
@@ -333,12 +333,12 @@
|
|
|
333
333
|
<pre class="lines">
|
|
334
334
|
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
336
|
+
201
|
|
337
|
+
202
|
|
338
|
+
203</pre>
|
|
339
339
|
</td>
|
|
340
340
|
<td>
|
|
341
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
341
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 201</span>
|
|
342
342
|
|
|
343
343
|
<span class='kw'>def</span> <span class='id identifier rubyid_ins?'>ins?</span>
|
|
344
344
|
<span class='kw'>true</span>
|
|
@@ -418,10 +418,10 @@ some type of function.</p>
|
|
|
418
418
|
<pre class="lines">
|
|
419
419
|
|
|
420
420
|
|
|
421
|
-
|
|
421
|
+
187</pre>
|
|
422
422
|
</td>
|
|
423
423
|
<td>
|
|
424
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
424
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 187</span>
|
|
425
425
|
|
|
426
426
|
<span class='kw'>def</span> <span class='id identifier rubyid_matches?'>matches?</span><span class='lparen'>(</span><span class='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span><span class='semicolon'>;</span> <span class='kw'>end</span></pre>
|
|
427
427
|
</td>
|
|
@@ -477,12 +477,12 @@ some type of function.</p>
|
|
|
477
477
|
<pre class="lines">
|
|
478
478
|
|
|
479
479
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
480
|
+
193
|
|
481
|
+
194
|
|
482
|
+
195</pre>
|
|
483
483
|
</td>
|
|
484
484
|
<td>
|
|
485
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line
|
|
485
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers.rb', line 193</span>
|
|
486
486
|
|
|
487
487
|
<span class='kw'>def</span> <span class='id identifier rubyid_outs?'>outs?</span>
|
|
488
488
|
<span class='kw'>false</span>
|
|
@@ -497,7 +497,7 @@ some type of function.</p>
|
|
|
497
497
|
</div>
|
|
498
498
|
|
|
499
499
|
<div id="footer">
|
|
500
|
-
Generated on Sun Jan 28
|
|
500
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
414
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
484
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
697
|
+
Generated on Sun Jan 28 14:41:49 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 Sun Jan 28
|
|
372
|
+
Generated on Sun Jan 28 14:41:49 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>
|
|
@@ -108,7 +108,8 @@
|
|
|
108
108
|
You should avoid using this class if possible, as it may be removed or be changed in the future.
|
|
109
109
|
</p>
|
|
110
110
|
|
|
111
|
-
<p>Match cell against a symbolic expression - e.g., :column, > :column
|
|
111
|
+
<p>Match cell against a symbolic expression - e.g., :column, > :column. Can
|
|
112
|
+
also call a Ruby method pn the column value - e.g, .blank? or !.blank?</p>
|
|
112
113
|
|
|
113
114
|
|
|
114
115
|
</div>
|
|
@@ -290,27 +291,37 @@ some type of function.</p>
|
|
|
290
291
|
<pre class="lines">
|
|
291
292
|
|
|
292
293
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
294
|
+
108
|
|
295
|
+
109
|
|
296
|
+
110
|
|
297
|
+
111
|
|
298
|
+
112
|
|
299
|
+
113
|
|
300
|
+
114
|
|
301
|
+
115
|
|
302
|
+
116
|
|
303
|
+
117
|
|
304
|
+
118
|
|
305
|
+
119
|
|
306
|
+
120
|
|
307
|
+
121</pre>
|
|
302
308
|
</td>
|
|
303
309
|
<td>
|
|
304
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers/symbol.rb', line
|
|
310
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers/symbol.rb', line 108</span>
|
|
305
311
|
|
|
306
312
|
<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='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span>
|
|
307
|
-
<span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='const'>SYMBOL_COMPARE_RE</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span>
|
|
308
|
-
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>unless</span> <span class='id identifier rubyid_match'>match</span>
|
|
313
|
+
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>unless</span> <span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='const'>SYMBOL_COMPARE_RE</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
|
309
314
|
|
|
310
315
|
<span class='id identifier rubyid_comparator'>comparator</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>comparator</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>=</span><span class='tstring_end'>'</span></span>
|
|
311
316
|
<span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
|
312
|
-
|
|
313
|
-
|
|
317
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_match'>match</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>type</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>:</span><span class='tstring_end'>'</span></span>
|
|
318
|
+
<span class='id identifier rubyid_comparison'>comparison</span><span class='lparen'>(</span><span class='label'>comparator:</span> <span class='id identifier rubyid_comparator'>comparator</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
|
319
|
+
|
|
320
|
+
<span class='comment'># Method call - e.g, .blank? or !.present?
|
|
321
|
+
</span> <span class='comment'># Can also take the forms: := .blank? or !=.present?
|
|
322
|
+
</span> <span class='kw'>else</span>
|
|
323
|
+
<span class='id identifier rubyid_method_call'>method_call</span><span class='lparen'>(</span><span class='label'>comparator:</span> <span class='id identifier rubyid_comparator'>comparator</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
|
324
|
+
<span class='kw'>end</span>
|
|
314
325
|
<span class='kw'>end</span></pre>
|
|
315
326
|
</td>
|
|
316
327
|
</tr>
|
|
@@ -395,12 +406,12 @@ some type of function.</p>
|
|
|
395
406
|
<pre class="lines">
|
|
396
407
|
|
|
397
408
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
409
|
+
125
|
|
410
|
+
126
|
|
411
|
+
127</pre>
|
|
401
412
|
</td>
|
|
402
413
|
<td>
|
|
403
|
-
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers/symbol.rb', line
|
|
414
|
+
<pre class="code"><span class="info file"># File 'lib/csv_decision/matchers/symbol.rb', line 125</span>
|
|
404
415
|
|
|
405
416
|
<span class='kw'>def</span> <span class='id identifier rubyid_matches?'>matches?</span><span class='lparen'>(</span><span class='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span>
|
|
406
417
|
<span class='const'><span class='object_link'><a href="" title="CSVDecision::Matchers::Symbol (class)">Symbol</a></span></span><span class='period'>.</span><span class='id identifier rubyid_matches?'><span class='object_link'><a href="#matches%3F-class_method" title="CSVDecision::Matchers::Symbol.matches? (method)">matches?</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_cell'>cell</span><span class='rparen'>)</span>
|
|
@@ -415,7 +426,7 @@ some type of function.</p>
|
|
|
415
426
|
</div>
|
|
416
427
|
|
|
417
428
|
<div id="footer">
|
|
418
|
-
Generated on Sun Jan 28
|
|
429
|
+
Generated on Sun Jan 28 14:41:49 2018 by
|
|
419
430
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
420
431
|
0.9.12 (ruby-2.4.0).
|
|
421
432
|
</div>
|
|
@@ -433,7 +433,7 @@ set.</p>
|
|
|
433
433
|
</div>
|
|
434
434
|
|
|
435
435
|
<div id="footer">
|
|
436
|
-
Generated on Sun Jan 28
|
|
436
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
275
|
+
Generated on Sun Jan 28 14:41:48 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
|
@@ -1121,7 +1121,7 @@ result, along with the partial result required to evaluate functions.</p>
|
|
|
1121
1121
|
</div>
|
|
1122
1122
|
|
|
1123
1123
|
<div id="footer">
|
|
1124
|
-
Generated on Sun Jan 28
|
|
1124
|
+
Generated on Sun Jan 28 14:41:49 2018 by
|
|
1125
1125
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1126
1126
|
0.9.12 (ruby-2.4.0).
|
|
1127
1127
|
</div>
|
|
@@ -856,7 +856,7 @@ non-string constant.</p>
|
|
|
856
856
|
</div>
|
|
857
857
|
|
|
858
858
|
<div id="footer">
|
|
859
|
-
Generated on Sun Jan 28
|
|
859
|
+
Generated on Sun Jan 28 14:41:49 2018 by
|
|
860
860
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
861
861
|
0.9.12 (ruby-2.4.0).
|
|
862
862
|
</div>
|
data/doc/CSVDecision/Table.html
CHANGED
|
@@ -1378,7 +1378,7 @@ and last row index given.</p>
|
|
|
1378
1378
|
</div>
|
|
1379
1379
|
|
|
1380
1380
|
<div id="footer">
|
|
1381
|
-
Generated on Sun Jan 28
|
|
1381
|
+
Generated on Sun Jan 28 14:41:48 2018 by
|
|
1382
1382
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
1383
1383
|
0.9.12 (ruby-2.4.0).
|
|
1384
1384
|
</div>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<div id="footer">
|
|
136
|
-
Generated on Sun Jan 28
|
|
136
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
415
|
+
Generated on Sun Jan 28 14:41:48 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 Sun Jan 28
|
|
443
|
+
Generated on Sun Jan 28 14:41:46 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
|
@@ -261,8 +261,12 @@ the input hash. The expression, <code>== :node</code> should be read as
|
|
|
261
261
|
<p><code>ruby data = <<~DATA in :parent, out :top?
|
|
262
262
|
:node, yes , no DATA </code> These comparison
|
|
263
263
|
operators are also supported: <code>!=</code>, <code>></code>,
|
|
264
|
-
<code>>=</code>, <code><</code>, <code><=</code>.
|
|
265
|
-
|
|
264
|
+
<code>>=</code>, <code><</code>, <code><=</code>. In addition, you
|
|
265
|
+
can also apply a Ruby 0-arity method - e.g., <code>.present?</code> or
|
|
266
|
+
<code>.nil?</code>. Negation is also supported - e.g., <code>!.nil?</code>.</p>
|
|
267
|
+
|
|
268
|
+
<p>For more simple examples see
|
|
269
|
+
<code>spec/csv_decision/examples_spec.rb</code>.</p>
|
|
266
270
|
|
|
267
271
|
<h4 id="label-Input+guard+conditions">Input <code>guard</code> conditions</h4>
|
|
268
272
|
|
|
@@ -385,7 +389,7 @@ href="./LICENSE">LICENSE</a> document for more information.</p>
|
|
|
385
389
|
</div></div>
|
|
386
390
|
|
|
387
391
|
<div id="footer">
|
|
388
|
-
Generated on Sun Jan 28
|
|
392
|
+
Generated on Sun Jan 28 14:41:48 2018 by
|
|
389
393
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
390
394
|
0.9.12 (ruby-2.4.0).
|
|
391
395
|
</div>
|
data/doc/index.html
CHANGED
|
@@ -261,8 +261,12 @@ the input hash. The expression, <code>== :node</code> should be read as
|
|
|
261
261
|
<p><code>ruby data = <<~DATA in :parent, out :top?
|
|
262
262
|
:node, yes , no DATA </code> These comparison
|
|
263
263
|
operators are also supported: <code>!=</code>, <code>></code>,
|
|
264
|
-
<code>>=</code>, <code><</code>, <code><=</code>.
|
|
265
|
-
|
|
264
|
+
<code>>=</code>, <code><</code>, <code><=</code>. In addition, you
|
|
265
|
+
can also apply a Ruby 0-arity method - e.g., <code>.present?</code> or
|
|
266
|
+
<code>.nil?</code>. Negation is also supported - e.g., <code>!.nil?</code>.</p>
|
|
267
|
+
|
|
268
|
+
<p>For more simple examples see
|
|
269
|
+
<code>spec/csv_decision/examples_spec.rb</code>.</p>
|
|
266
270
|
|
|
267
271
|
<h4 id="label-Input+guard+conditions">Input <code>guard</code> conditions</h4>
|
|
268
272
|
|
|
@@ -385,7 +389,7 @@ href="./LICENSE">LICENSE</a> document for more information.</p>
|
|
|
385
389
|
</div></div>
|
|
386
390
|
|
|
387
391
|
<div id="footer">
|
|
388
|
-
Generated on Sun Jan 28
|
|
392
|
+
Generated on Sun Jan 28 14:41:47 2018 by
|
|
389
393
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
390
394
|
0.9.12 (ruby-2.4.0).
|
|
391
395
|
</div>
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
</div>
|
|
101
101
|
|
|
102
102
|
<div id="footer">
|
|
103
|
-
Generated on Sun Jan 28
|
|
103
|
+
Generated on Sun Jan 28 14:41:48 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>
|
|
@@ -72,11 +72,21 @@ module CSVDecision
|
|
|
72
72
|
Regexp.new("\\A(?:#{value})\\z").freeze
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
#
|
|
75
|
+
# Symbols used for inequality
|
|
76
|
+
INEQUALITY = '!=|!'
|
|
77
|
+
|
|
78
|
+
# Match string for inequality
|
|
79
|
+
INEQUALITY_RE = regexp(INEQUALITY)
|
|
80
|
+
|
|
81
|
+
# Equality, cell constants and functions specified by prefixing the value with
|
|
82
|
+
# one of these 3 symbols.
|
|
76
83
|
EQUALS = '==|:=|='
|
|
77
84
|
|
|
85
|
+
# Match string for equality
|
|
78
86
|
EQUALS_RE = regexp(EQUALS)
|
|
79
|
-
|
|
87
|
+
|
|
88
|
+
# Method names are stricter than CSV column names.
|
|
89
|
+
METHOD_NAME_RE = /\A[_a-z][_a-z0-9]*[?!=]?\z/
|
|
80
90
|
|
|
81
91
|
# Normalize the operators which are a variation on equals/assignment.
|
|
82
92
|
#
|
|
@@ -8,11 +8,16 @@ module CSVDecision
|
|
|
8
8
|
# Recognise expressions in table data cells.
|
|
9
9
|
# @api private
|
|
10
10
|
class Matchers
|
|
11
|
-
# Match cell against a symbolic expression - e.g., :column, > :column
|
|
11
|
+
# Match cell against a symbolic expression - e.g., :column, > :column.
|
|
12
|
+
# Can also call a Ruby method pn the column value - e.g, .blank? or !.blank?
|
|
12
13
|
class Symbol < Matcher
|
|
13
|
-
|
|
14
|
+
SYMBOL_COMPARATORS = "#{INEQUALITY}|>=|<=|<|>|#{EQUALS}"
|
|
15
|
+
private_constant :SYMBOL_COMPARATORS
|
|
16
|
+
|
|
17
|
+
# Column symbol comparison - e.g., > :column or != :column.
|
|
18
|
+
# Can also be a method call - e.g., .present? or .blank?
|
|
14
19
|
SYMBOL_COMPARE =
|
|
15
|
-
"(?<comparator
|
|
20
|
+
"(?<comparator>#{SYMBOL_COMPARATORS})?\\s*(?<type>[.:])(?<name>#{Header::COLUMN_NAME})"
|
|
16
21
|
private_constant :SYMBOL_COMPARE
|
|
17
22
|
|
|
18
23
|
# Symbol comparision regular expression.
|
|
@@ -33,6 +38,20 @@ module CSVDecision
|
|
|
33
38
|
end
|
|
34
39
|
private_class_method :compare_proc
|
|
35
40
|
|
|
41
|
+
def self.value_method(value, method)
|
|
42
|
+
value.respond_to?(method) && value.send(method)
|
|
43
|
+
end
|
|
44
|
+
private_class_method :value_method
|
|
45
|
+
|
|
46
|
+
def self.method_proc(negate:)
|
|
47
|
+
if negate
|
|
48
|
+
proc { |symbol, value| !value_method(value, symbol) }
|
|
49
|
+
else
|
|
50
|
+
proc { |symbol, value| value_method(value, symbol) }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
private_class_method :method_proc
|
|
54
|
+
|
|
36
55
|
COMPARE = {
|
|
37
56
|
# Equality and inequality - create a lambda proc by calling with the actual column name
|
|
38
57
|
# symbol.
|
|
@@ -40,12 +59,17 @@ module CSVDecision
|
|
|
40
59
|
'=' => ->(symbol) { EQUALITY[':='].curry[symbol].freeze },
|
|
41
60
|
'==' => ->(symbol) { EQUALITY[':='].curry[symbol].freeze },
|
|
42
61
|
'!=' => ->(symbol) { EQUALITY['!='].curry[symbol].freeze },
|
|
62
|
+
'!' => ->(symbol) { EQUALITY['!='].curry[symbol].freeze },
|
|
43
63
|
|
|
44
64
|
# Comparisons - create a lambda proc by calling with the actual column name symbol.
|
|
45
65
|
'>' => ->(symbol) { compare_proc(:'>').curry[symbol].freeze },
|
|
46
66
|
'>=' => ->(symbol) { compare_proc(:'>=').curry[symbol].freeze },
|
|
47
67
|
'<' => ->(symbol) { compare_proc(:'<').curry[symbol].freeze },
|
|
48
|
-
'<=' => ->(symbol) { compare_proc(:'<=').curry[symbol].freeze }
|
|
68
|
+
'<=' => ->(symbol) { compare_proc(:'<=').curry[symbol].freeze },
|
|
69
|
+
|
|
70
|
+
# 0-arity Ruby method calls applied to an input column value.
|
|
71
|
+
'.' => ->(symbol) { method_proc(negate: false).curry[symbol].freeze },
|
|
72
|
+
'!.' => ->(symbol) { method_proc(negate: true).curry[symbol].freeze }
|
|
49
73
|
}.freeze
|
|
50
74
|
private_constant :COMPARE
|
|
51
75
|
|
|
@@ -57,23 +81,48 @@ module CSVDecision
|
|
|
57
81
|
end
|
|
58
82
|
private_class_method :compare?
|
|
59
83
|
|
|
60
|
-
# E.g., > :col, we get comparator: >,
|
|
84
|
+
# E.g., > :col, we get comparator: >, name: col
|
|
61
85
|
def self.comparison(comparator:, name:)
|
|
62
86
|
function = COMPARE[comparator]
|
|
63
87
|
Matchers::Proc.new(type: :symbol, function: function[name], symbols: name)
|
|
64
88
|
end
|
|
65
89
|
private_class_method :comparison
|
|
66
90
|
|
|
91
|
+
# E.g., !.nil?, we get comparator: !, name: nil?
|
|
92
|
+
def self.method_call(comparator:, name:)
|
|
93
|
+
equality = EQUALS_RE.match?(comparator)
|
|
94
|
+
inequality = !equality && INEQUALITY_RE.match?(comparator)
|
|
95
|
+
return false unless equality || inequality
|
|
96
|
+
|
|
97
|
+
method_function(name: name, negate: inequality)
|
|
98
|
+
end
|
|
99
|
+
private_class_method :method_call
|
|
100
|
+
|
|
101
|
+
# E.g., !.nil?, we get comparator: !, name: nil?
|
|
102
|
+
def self.method_function(name:, negate:)
|
|
103
|
+
# Allowed Ruby method names are a bit stricter than allowed decision table column names.
|
|
104
|
+
return false unless METHOD_NAME_RE.match?(name)
|
|
105
|
+
|
|
106
|
+
function = COMPARE[negate ? '!.' : '.']
|
|
107
|
+
Matchers::Proc.new(type: :proc, function: function[name])
|
|
108
|
+
end
|
|
109
|
+
private_class_method :method_function
|
|
110
|
+
|
|
67
111
|
# @param (see Matchers::Matcher#matches?)
|
|
68
112
|
# @return (see Matchers::Matcher#matches?)
|
|
69
113
|
def self.matches?(cell)
|
|
70
|
-
match = SYMBOL_COMPARE_RE.match(cell)
|
|
71
|
-
return false unless match
|
|
114
|
+
return false unless (match = SYMBOL_COMPARE_RE.match(cell))
|
|
72
115
|
|
|
73
116
|
comparator = match['comparator'] || '='
|
|
74
117
|
name = match['name'].to_sym
|
|
118
|
+
if match['type'] == ':'
|
|
119
|
+
comparison(comparator: comparator, name: name)
|
|
75
120
|
|
|
76
|
-
|
|
121
|
+
# Method call - e.g, .blank? or !.present?
|
|
122
|
+
# Can also take the forms: := .blank? or !=.present?
|
|
123
|
+
else
|
|
124
|
+
method_call(comparator: comparator, name: name)
|
|
125
|
+
end
|
|
77
126
|
end
|
|
78
127
|
|
|
79
128
|
# @param (see Matcher#matches?)
|
|
@@ -197,4 +197,21 @@ context 'simple examples' do
|
|
|
197
197
|
expect(table.decide(ISIN: '123456789', country: 'GB', class: 'public')).to eq({})
|
|
198
198
|
expect(table.decide(ISIN: '123456789012', country: 'GB', class: 'private')).to eq(PAID: '123456789012', len: 12)
|
|
199
199
|
end
|
|
200
|
+
|
|
201
|
+
it 'recognises in column method call conditions' do
|
|
202
|
+
data = <<~DATA
|
|
203
|
+
set/nil? :country, in :CUSIP, in :ISIN, set: class, out :PAID, out: len, if:
|
|
204
|
+
US, , , :class.upcase,
|
|
205
|
+
US, .present?, , != PRIVATE, :CUSIP, :PAID.length, :len == 9
|
|
206
|
+
!=US, , .present?, != PRIVATE, :ISIN, :PAID.length, :len == 12
|
|
207
|
+
US, =.present?, , PRIVATE, :CUSIP, :PAID.length,
|
|
208
|
+
!=US, , !.blank?, PRIVATE, :ISIN, :PAID.length,
|
|
209
|
+
DATA
|
|
210
|
+
|
|
211
|
+
table = CSVDecision.parse(data)
|
|
212
|
+
expect(table.decide(CUSIP: '1234567890', class: 'Private')).to eq(PAID: '1234567890', len: 10)
|
|
213
|
+
expect(table.decide(CUSIP: '123456789', class: 'Public')).to eq(PAID: '123456789', len: 9)
|
|
214
|
+
expect(table.decide(ISIN: '123456789', country: 'GB', class: 'public')).to eq({})
|
|
215
|
+
expect(table.decide(ISIN: '123456789012', country: 'GB', class: 'private')).to eq(PAID: '123456789012', len: 12)
|
|
216
|
+
end
|
|
200
217
|
end
|
|
@@ -266,9 +266,9 @@ describe CSVDecision::Table do
|
|
|
266
266
|
{ example: 'uses != :parent, drops :parent input column',
|
|
267
267
|
options: {},
|
|
268
268
|
data: <<~DATA
|
|
269
|
-
in :node,
|
|
270
|
-
|
|
271
|
-
,
|
|
269
|
+
in :node, out :top?
|
|
270
|
+
!:parent, no
|
|
271
|
+
, yes
|
|
272
272
|
DATA
|
|
273
273
|
},
|
|
274
274
|
{ example: 'uses != :parent and == :parent',
|
|
@@ -532,7 +532,7 @@ describe CSVDecision::Table do
|
|
|
532
532
|
|
|
533
533
|
context 'uses multi-column index to make correct decisions' do
|
|
534
534
|
examples = [
|
|
535
|
-
{ example: 'evaluates multi-column index CSV string',
|
|
535
|
+
{ example: 'evaluates multi-column index CSV string with guard',
|
|
536
536
|
options: { first_match: true },
|
|
537
537
|
data: <<~DATA
|
|
538
538
|
guard:, in :type, IN :input, OUT :output
|
|
@@ -546,6 +546,34 @@ describe CSVDecision::Table do
|
|
|
546
546
|
:number.blank?, string, one, :=nil
|
|
547
547
|
DATA
|
|
548
548
|
},
|
|
549
|
+
{ example: 'evaluates multi-column index CSV string with symbol conditions',
|
|
550
|
+
options: { first_match: true },
|
|
551
|
+
data: <<~DATA
|
|
552
|
+
in: number, in: string, in :type, IN :input, OUT :output
|
|
553
|
+
.present?, , integer, none, :=0
|
|
554
|
+
.blank?, , integer, none, :=nil
|
|
555
|
+
.present?, , integer, one, :=1
|
|
556
|
+
.blank?, , integer, one, :=nil
|
|
557
|
+
, .present?, string, none, 0
|
|
558
|
+
.blank?, , string, none, :=nil
|
|
559
|
+
, .present?, string, one, 1
|
|
560
|
+
.blank?, , string, one, :=nil
|
|
561
|
+
DATA
|
|
562
|
+
},
|
|
563
|
+
{ example: 'evaluates multi-column index CSV string with negated symbol conditions',
|
|
564
|
+
options: { first_match: true },
|
|
565
|
+
data: <<~DATA
|
|
566
|
+
in: number, in: string, in :type, IN :input, OUT :output
|
|
567
|
+
!.blank?, , integer, none, :=0
|
|
568
|
+
!= .present?, , integer, none, :=nil
|
|
569
|
+
=.present?, , integer, one, :=1
|
|
570
|
+
==.blank?, , integer, one, :=nil
|
|
571
|
+
, .present?, string, none, 0
|
|
572
|
+
.blank?, , string, none, :=nil
|
|
573
|
+
, !.blank?, string, one, 1
|
|
574
|
+
.blank?, , string, one, :=nil
|
|
575
|
+
DATA
|
|
576
|
+
},
|
|
549
577
|
{ example: 'evaluates multi-column index CSV file',
|
|
550
578
|
options: { first_match: true },
|
|
551
579
|
data: Pathname(File.join(SPEC_DATA_VALID, 'multi_column_index.csv'))
|