tablestakes 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +218 -0
  3. data/capitals.sorted +50 -0
  4. data/capitals.txt +51 -0
  5. data/cities.txt +290 -0
  6. data/doc/Table.html +1174 -0
  7. data/doc/created.rid +2 -0
  8. data/doc/images/add.png +0 -0
  9. data/doc/images/arrow_up.png +0 -0
  10. data/doc/images/brick.png +0 -0
  11. data/doc/images/brick_link.png +0 -0
  12. data/doc/images/bug.png +0 -0
  13. data/doc/images/bullet_black.png +0 -0
  14. data/doc/images/bullet_toggle_minus.png +0 -0
  15. data/doc/images/bullet_toggle_plus.png +0 -0
  16. data/doc/images/date.png +0 -0
  17. data/doc/images/delete.png +0 -0
  18. data/doc/images/find.png +0 -0
  19. data/doc/images/loadingAnimation.gif +0 -0
  20. data/doc/images/macFFBgHack.png +0 -0
  21. data/doc/images/package.png +0 -0
  22. data/doc/images/page_green.png +0 -0
  23. data/doc/images/page_white_text.png +0 -0
  24. data/doc/images/page_white_width.png +0 -0
  25. data/doc/images/plugin.png +0 -0
  26. data/doc/images/ruby.png +0 -0
  27. data/doc/images/tag_blue.png +0 -0
  28. data/doc/images/tag_green.png +0 -0
  29. data/doc/images/transparent.png +0 -0
  30. data/doc/images/wrench.png +0 -0
  31. data/doc/images/wrench_orange.png +0 -0
  32. data/doc/images/zoom.png +0 -0
  33. data/doc/index.html +71 -0
  34. data/doc/js/darkfish.js +155 -0
  35. data/doc/js/jquery.js +18 -0
  36. data/doc/js/navigation.js +142 -0
  37. data/doc/js/search.js +94 -0
  38. data/doc/js/search_index.js +1 -0
  39. data/doc/js/searcher.js +228 -0
  40. data/doc/rdoc.css +595 -0
  41. data/doc/table_of_contents.html +88 -0
  42. data/lib/tablestakes.rb +407 -0
  43. data/spec/factories.rb +16 -0
  44. data/spec/spec_helper.rb +11 -0
  45. data/spec/table_spec.rb +179 -0
  46. data/test.tab +4 -0
  47. metadata +110 -0
data/doc/Table.html ADDED
@@ -0,0 +1,1174 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+
7
+ <title>class Table - RDoc Documentation</title>
8
+
9
+ <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "./";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>
21
+
22
+
23
+ <body id="top" class="class">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="./index.html">Home</a>
28
+ <a href="./table_of_contents.html#classes">Classes</a>
29
+ <a href="./table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+
47
+
48
+ <div id="file-metadata">
49
+ <nav id="file-list-section" class="section">
50
+ <h3 class="section-header">Defined In</h3>
51
+ <ul>
52
+ <li>lib/tablestakes.rb
53
+ </ul>
54
+ </nav>
55
+
56
+
57
+ </div>
58
+
59
+ <div id="class-metadata">
60
+
61
+ <nav id="parent-class-section" class="section">
62
+ <h3 class="section-header">Parent</h3>
63
+
64
+ <p class="link">Object
65
+
66
+ </nav>
67
+
68
+
69
+
70
+ <!-- Method Quickref -->
71
+ <nav id="method-list-section" class="section">
72
+ <h3 class="section-header">Methods</h3>
73
+
74
+ <ul class="link-list">
75
+
76
+ <li ><a href="#method-c-new">::new</a>
77
+
78
+ <li ><a href="#method-i-bottom">#bottom</a>
79
+
80
+ <li ><a href="#method-i-column">#column</a>
81
+
82
+ <li ><a href="#method-i-count">#count</a>
83
+
84
+ <li ><a href="#method-i-get_columns">#get_columns</a>
85
+
86
+ <li ><a href="#method-i-get_rows">#get_rows</a>
87
+
88
+ <li ><a href="#method-i-intersect">#intersect</a>
89
+
90
+ <li ><a href="#method-i-join">#join</a>
91
+
92
+ <li ><a href="#method-i-length">#length</a>
93
+
94
+ <li ><a href="#method-i-row">#row</a>
95
+
96
+ <li ><a href="#method-i-select">#select</a>
97
+
98
+ <li ><a href="#method-i-size">#size</a>
99
+
100
+ <li ><a href="#method-i-sub">#sub</a>
101
+
102
+ <li ><a href="#method-i-sub-21">#sub!</a>
103
+
104
+ <li ><a href="#method-i-tally">#tally</a>
105
+
106
+ <li ><a href="#method-i-to_a">#to_a</a>
107
+
108
+ <li ><a href="#method-i-to_s">#to_s</a>
109
+
110
+ <li ><a href="#method-i-top">#top</a>
111
+
112
+ <li ><a href="#method-i-union">#union</a>
113
+
114
+ <li ><a href="#method-i-where">#where</a>
115
+
116
+ <li ><a href="#method-i-write_file">#write_file</a>
117
+
118
+ </ul>
119
+ </nav>
120
+
121
+ </div>
122
+
123
+ <div id="project-metadata">
124
+
125
+ <nav id="classindex-section" class="section project-section">
126
+ <h3 class="section-header">Class and Module Index</h3>
127
+
128
+ <ul class="link-list">
129
+
130
+ <li><a href="./Table.html">Table</a>
131
+
132
+ </ul>
133
+ </nav>
134
+
135
+ </div>
136
+ </nav>
137
+
138
+ <div id="documentation">
139
+ <h1 class="class">class Table</h1>
140
+
141
+ <div id="description" class="description">
142
+
143
+ <p>This class is a Ruby representation of a table. All data is captured as
144
+ type <code>String</code> by default. Columns are referred to by their
145
+ <code>String</code> headers which are assumed to be identified in the first
146
+ row of the input file. Output is written by default to tab-delimited files
147
+ with the first row serving as the header names.</p>
148
+
149
+ </div><!-- description -->
150
+
151
+
152
+
153
+
154
+ <section id="5Buntitled-5D" class="documentation-section">
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+ <!-- Attributes -->
163
+ <section id="attribute-method-details" class="method-section section">
164
+ <h3 class="section-header">Attributes</h3>
165
+
166
+
167
+ <div id="attribute-i-headers" class="method-detail">
168
+ <div class="method-heading attribute-method-heading">
169
+ <span class="method-name">headers</span><span
170
+ class="attribute-access-type">[R]</span>
171
+ </div>
172
+
173
+ <div class="method-description">
174
+
175
+ <p>The headers attribute contains the table headers used to reference columns
176
+ in the <code>Table</code>. All headers are represented as
177
+ <code>String</code> types.</p>
178
+
179
+ </div>
180
+ </div>
181
+
182
+ </section><!-- attribute-method-details -->
183
+
184
+
185
+ <!-- Methods -->
186
+
187
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section section">
188
+ <h3 class="section-header">Public Class Methods</h3>
189
+
190
+
191
+ <div id="method-c-new" class="method-detail ">
192
+
193
+ <div class="method-heading">
194
+ <span class="method-name">new</span><span
195
+ class="method-args">(input=nil)</span>
196
+
197
+ <span class="method-click-advice">click to toggle source</span>
198
+
199
+ </div>
200
+
201
+
202
+ <div class="method-description">
203
+
204
+ <p>Instantiate a <code>Table</code> object using a tab-delimited file</p>
205
+ <dl class="rdoc-list note-list"><dt><code>input</code>
206
+ <dd>
207
+ <p>OPTIONAL <code>Array</code> of rows or <code>String</code> to identify the
208
+ name of the tab-delimited file to read</p>
209
+ </dd></dl>
210
+
211
+
212
+
213
+
214
+ <div class="method-source-code" id="new-source">
215
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 32</span>
216
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>=<span class="ruby-keyword">nil</span>)
217
+ <span class="ruby-ivar">@headers</span> = []
218
+ <span class="ruby-ivar">@table</span> = {}
219
+ <span class="ruby-ivar">@indices</span> = {}
220
+
221
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">input</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:fetch</span>)
222
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">input</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:fetch</span>)
223
+ <span class="ruby-comment">#create +Table+ from rows</span>
224
+ <span class="ruby-identifier">add_rows</span>(<span class="ruby-identifier">input</span>)
225
+ <span class="ruby-keyword">end</span>
226
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">input</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:upcase</span>)
227
+ <span class="ruby-comment"># a string, then read_file</span>
228
+ <span class="ruby-identifier">read_file</span>(<span class="ruby-identifier">input</span>)
229
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">input</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:headers</span>)
230
+ <span class="ruby-identifier">init</span>(<span class="ruby-identifier">input</span>)
231
+ <span class="ruby-keyword">end</span>
232
+ <span class="ruby-comment"># else create empty +Table+</span>
233
+ <span class="ruby-keyword">end</span></pre>
234
+ </div><!-- new-source -->
235
+
236
+ </div>
237
+
238
+
239
+
240
+
241
+ </div><!-- new-method -->
242
+
243
+
244
+ </section><!-- public-class-method-details -->
245
+
246
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section section">
247
+ <h3 class="section-header">Public Instance Methods</h3>
248
+
249
+
250
+ <div id="method-i-bottom" class="method-detail ">
251
+
252
+ <div class="method-heading">
253
+ <span class="method-name">bottom</span><span
254
+ class="method-args">(colname, num=1)</span>
255
+
256
+ <span class="method-click-advice">click to toggle source</span>
257
+
258
+ </div>
259
+
260
+
261
+ <div class="method-description">
262
+
263
+ <p>Counts the number of instances of a particular string, given a column name,
264
+ and returns an integer &gt;= 0. Returns <code>nil</code> if the column is
265
+ not found. If no parameters are given, returns the number of rows in the
266
+ table.</p>
267
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
268
+ <dd>
269
+ <p><code>String</code> to identify the column to count</p>
270
+ </dd><dt><code>num</code>
271
+ <dd>
272
+ <p>OPTIONAL <code>String</code> number of values to return</p>
273
+ </dd></dl>
274
+
275
+
276
+
277
+
278
+ <div class="method-source-code" id="bottom-source">
279
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 152</span>
280
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">bottom</span>(<span class="ruby-identifier">colname</span>, <span class="ruby-identifier">num</span>=<span class="ruby-value">1</span>)
281
+ <span class="ruby-identifier">freq</span> = <span class="ruby-identifier">tally</span>(<span class="ruby-identifier">colname</span>).<span class="ruby-identifier">to_a</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>].<span class="ruby-identifier">sort_by</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span> }
282
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">freq</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">num</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>].<span class="ruby-identifier">unshift</span>([<span class="ruby-string">&quot;State&quot;</span>,<span class="ruby-string">&quot;Count&quot;</span>]))
283
+ <span class="ruby-keyword">end</span></pre>
284
+ </div><!-- bottom-source -->
285
+
286
+ </div>
287
+
288
+
289
+
290
+
291
+ </div><!-- bottom-method -->
292
+
293
+
294
+ <div id="method-i-column" class="method-detail ">
295
+
296
+ <div class="method-heading">
297
+ <span class="method-name">column</span><span
298
+ class="method-args">(colname)</span>
299
+
300
+ <span class="method-click-advice">click to toggle source</span>
301
+
302
+ </div>
303
+
304
+
305
+ <div class="method-description">
306
+
307
+ <p>Return a copy of a column from the table, identified by column name.
308
+ Returns <code>nil</code> if column name not found.</p>
309
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
310
+ <dd>
311
+ <p><code>String</code> to identify the name of the column</p>
312
+ </dd></dl>
313
+
314
+
315
+
316
+
317
+ <div class="method-source-code" id="column-source">
318
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 55</span>
319
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">column</span>(<span class="ruby-identifier">colname</span>)
320
+ <span class="ruby-comment"># check arguments</span>
321
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
322
+
323
+ <span class="ruby-constant">Array</span>(<span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>])
324
+ <span class="ruby-keyword">end</span></pre>
325
+ </div><!-- column-source -->
326
+
327
+ </div>
328
+
329
+
330
+
331
+
332
+ </div><!-- column-method -->
333
+
334
+
335
+ <div id="method-i-count" class="method-detail ">
336
+
337
+ <div class="method-heading">
338
+ <span class="method-name">count</span><span
339
+ class="method-args">(colname=nil, value=nil)</span>
340
+
341
+ <span class="method-click-advice">click to toggle source</span>
342
+
343
+ </div>
344
+
345
+
346
+ <div class="method-description">
347
+
348
+ <p>Counts the number of instances of a particular string, given a column name,
349
+ and returns an integer &gt;= 0. Returns <code>nil</code> if the column is
350
+ not found. If no parameters are given, returns the number of rows in the
351
+ table.</p>
352
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
353
+ <dd>
354
+ <p>OPTIONAL <code>String</code> to identify the column to count</p>
355
+ </dd><dt><code>value</code>
356
+ <dd>
357
+ <p>OPTIONAL <code>String</code> value to count</p>
358
+ </dd></dl>
359
+
360
+
361
+
362
+
363
+ <div class="method-source-code" id="count-source">
364
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 111</span>
365
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">count</span>(<span class="ruby-identifier">colname</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">value</span>=<span class="ruby-keyword">nil</span>)
366
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">colname</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">nil?</span>
367
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
368
+ <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">each_key</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> <span class="ruby-keyword">return</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">e</span>).<span class="ruby-identifier">length</span> }
369
+ <span class="ruby-keyword">else</span>
370
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
371
+ <span class="ruby-keyword">end</span>
372
+ <span class="ruby-keyword">end</span>
373
+
374
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>]
375
+ <span class="ruby-identifier">result</span> = <span class="ruby-value">0</span>
376
+ <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
377
+ <span class="ruby-identifier">val</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">result</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>
378
+ <span class="ruby-keyword">end</span>
379
+ <span class="ruby-identifier">result</span>
380
+ <span class="ruby-keyword">else</span>
381
+ <span class="ruby-keyword">nil</span>
382
+ <span class="ruby-keyword">end</span>
383
+ <span class="ruby-keyword">end</span></pre>
384
+ </div><!-- count-source -->
385
+
386
+ </div>
387
+
388
+
389
+ <div class="aliases">
390
+ Also aliased as: <a href="Table.html#method-i-size">size</a>, <a href="Table.html#method-i-length">length</a>
391
+ </div>
392
+
393
+
394
+
395
+ </div><!-- count-method -->
396
+
397
+
398
+ <div id="method-i-get_columns" class="method-detail method-alias">
399
+
400
+ <div class="method-heading">
401
+ <span class="method-name">get_columns</span><span
402
+ class="method-args">(*columns)</span>
403
+
404
+ </div>
405
+
406
+
407
+ <div class="method-description">
408
+
409
+
410
+
411
+
412
+
413
+
414
+ </div>
415
+
416
+
417
+
418
+
419
+ <div class="aliases">
420
+ Alias for: <a href="Table.html#method-i-select">select</a>
421
+ </div>
422
+
423
+ </div><!-- get_columns-method -->
424
+
425
+
426
+ <div id="method-i-get_rows" class="method-detail method-alias">
427
+
428
+ <div class="method-heading">
429
+ <span class="method-name">get_rows</span><span
430
+ class="method-args">(colname, condition=nil)</span>
431
+
432
+ </div>
433
+
434
+
435
+ <div class="method-description">
436
+
437
+
438
+
439
+
440
+
441
+
442
+ </div>
443
+
444
+
445
+
446
+
447
+ <div class="aliases">
448
+ Alias for: <a href="Table.html#method-i-where">where</a>
449
+ </div>
450
+
451
+ </div><!-- get_rows-method -->
452
+
453
+
454
+ <div id="method-i-intersect" class="method-detail ">
455
+
456
+ <div class="method-heading">
457
+ <span class="method-name">intersect</span><span
458
+ class="method-args">(table2, colname, col2name=nil)</span>
459
+
460
+ <span class="method-click-advice">click to toggle source</span>
461
+
462
+ </div>
463
+
464
+
465
+ <div class="method-description">
466
+
467
+ <p>Return the intersection of columns from different tables, eliminating
468
+ duplicates. Return nil if a column is not found.</p>
469
+ <dl class="rdoc-list note-list"><dt><code>table2</code>
470
+ <dd>
471
+ <p><code>Table</code> to identify the secondary table in the intersection</p>
472
+ </dd><dt><code>colname</code>
473
+ <dd>
474
+ <p><code>String</code> to identify the column to intersection</p>
475
+ </dd><dt><code>col2name</code>
476
+ <dd>
477
+ <p>OPTIONAL <code>String</code> to identify the column in the second table to
478
+ intersection</p>
479
+ </dd></dl>
480
+
481
+
482
+
483
+
484
+ <div class="method-source-code" id="intersect-source">
485
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 316</span>
486
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">intersect</span>(<span class="ruby-identifier">table2</span>, <span class="ruby-identifier">colname</span>, <span class="ruby-identifier">col2name</span>=<span class="ruby-keyword">nil</span>)
487
+ <span class="ruby-comment"># check arguments</span>
488
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid table!&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Table</span>)
489
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
490
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">col2name</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment"># Assume colname applies for both tables</span>
491
+ <span class="ruby-identifier">col2name</span> = <span class="ruby-identifier">colname</span>
492
+ <span class="ruby-keyword">end</span>
493
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">col2name</span>)
494
+
495
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">column</span>(<span class="ruby-identifier">colname</span>) <span class="ruby-operator">&amp;</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">column</span>(<span class="ruby-identifier">col2name</span>)
496
+ <span class="ruby-keyword">end</span></pre>
497
+ </div><!-- intersect-source -->
498
+
499
+ </div>
500
+
501
+
502
+
503
+
504
+ </div><!-- intersect-method -->
505
+
506
+
507
+ <div id="method-i-join" class="method-detail ">
508
+
509
+ <div class="method-heading">
510
+ <span class="method-name">join</span><span
511
+ class="method-args">(table2, colname, col2name=nil)</span>
512
+
513
+ <span class="method-click-advice">click to toggle source</span>
514
+
515
+ </div>
516
+
517
+
518
+ <div class="method-description">
519
+
520
+ <p>Given a second table to join against, and a field/column, return a
521
+ <code>Table</code> which contains a join of the two tables. Join only lists
522
+ the common column once, under the column name of the first table (if
523
+ different from the name of thee second). All columns from both tables are
524
+ returned. Returns <code>nil</code> if the column is not found.</p>
525
+ <dl class="rdoc-list note-list"><dt><code>table2</code>
526
+ <dd>
527
+ <p><code>Table</code> to identify the secondary table in the join</p>
528
+ </dd><dt><code>colname</code>
529
+ <dd>
530
+ <p><code>String</code> to identify the column to join on</p>
531
+ </dd><dt><code>col2name</code>
532
+ <dd>
533
+ <p>OPTIONAL <code>String</code> to identify the column in the second table to
534
+ join on</p>
535
+ </dd></dl>
536
+
537
+
538
+
539
+
540
+ <div class="method-source-code" id="join-source">
541
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 237</span>
542
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">join</span>(<span class="ruby-identifier">table2</span>, <span class="ruby-identifier">colname</span>, <span class="ruby-identifier">col2name</span>=<span class="ruby-keyword">nil</span>)
543
+ <span class="ruby-comment"># check arguments</span>
544
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid table!&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Table</span>)
545
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
546
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">col2name</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment"># Assume colname applies for both tables</span>
547
+ <span class="ruby-identifier">col2name</span> = <span class="ruby-identifier">colname</span>
548
+ <span class="ruby-keyword">end</span>
549
+ <span class="ruby-identifier">t2_col_index</span> = <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">headers</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">col2name</span>)
550
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">t2_col_index</span> <span class="ruby-comment"># is not nil</span>
551
+
552
+
553
+ <span class="ruby-comment"># ensure no duplication of header values</span>
554
+ <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">headers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
555
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">h</span>)
556
+ <span class="ruby-identifier">update_header</span>(<span class="ruby-identifier">h</span>, <span class="ruby-string">&#39;_&#39;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">h</span> )
557
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">colname</span>
558
+ <span class="ruby-identifier">colname</span> = <span class="ruby-string">&#39;_&#39;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">colname</span>
559
+ <span class="ruby-keyword">end</span>
560
+ <span class="ruby-keyword">end</span>
561
+ <span class="ruby-keyword">end</span>
562
+
563
+ <span class="ruby-identifier">result</span> = [ <span class="ruby-constant">Array</span>(<span class="ruby-ivar">@headers</span>) <span class="ruby-operator">+</span> <span class="ruby-constant">Array</span>(<span class="ruby-identifier">table2</span>.<span class="ruby-identifier">headers</span>) ]
564
+ <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>].<span class="ruby-identifier">each_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
565
+ <span class="ruby-identifier">t2_index</span> = <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">column</span>(<span class="ruby-identifier">col2name</span>).<span class="ruby-identifier">find_index</span>(<span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>][<span class="ruby-identifier">index</span>])
566
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">t2_index</span>.<span class="ruby-identifier">nil?</span>
567
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">row</span>(<span class="ruby-identifier">index</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">row</span>(<span class="ruby-identifier">t2_index</span>)
568
+ <span class="ruby-keyword">end</span>
569
+ <span class="ruby-keyword">end</span>
570
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-comment">#no rows selected</span>
571
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
572
+ <span class="ruby-keyword">else</span>
573
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
574
+ <span class="ruby-keyword">end</span>
575
+ <span class="ruby-keyword">end</span></pre>
576
+ </div><!-- join-source -->
577
+
578
+ </div>
579
+
580
+
581
+
582
+
583
+ </div><!-- join-method -->
584
+
585
+
586
+ <div id="method-i-length" class="method-detail method-alias">
587
+
588
+ <div class="method-heading">
589
+ <span class="method-name">length</span><span
590
+ class="method-args">(colname=nil, value=nil)</span>
591
+
592
+ </div>
593
+
594
+
595
+ <div class="method-description">
596
+
597
+
598
+
599
+
600
+
601
+
602
+ </div>
603
+
604
+
605
+
606
+
607
+ <div class="aliases">
608
+ Alias for: <a href="Table.html#method-i-count">count</a>
609
+ </div>
610
+
611
+ </div><!-- length-method -->
612
+
613
+
614
+ <div id="method-i-row" class="method-detail ">
615
+
616
+ <div class="method-heading">
617
+ <span class="method-name">row</span><span
618
+ class="method-args">(index)</span>
619
+
620
+ <span class="method-click-advice">click to toggle source</span>
621
+
622
+ </div>
623
+
624
+
625
+ <div class="method-description">
626
+
627
+ <p>Return a copy of a row from the table as an <code>Array</code>, given an
628
+ index (i.e. row number). Returns empty Array if the index is out of bounds.</p>
629
+ <dl class="rdoc-list note-list"><dt><code>index</code>
630
+ <dd>
631
+ <p><code>FixNum</code> indicating index of the row.</p>
632
+ </dd></dl>
633
+
634
+
635
+
636
+
637
+ <div class="method-source-code" id="row-source">
638
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 66</span>
639
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">row</span>(<span class="ruby-identifier">index</span>)
640
+ <span class="ruby-constant">Array</span>(<span class="ruby-identifier">get_row</span>(<span class="ruby-identifier">index</span>))
641
+ <span class="ruby-keyword">end</span></pre>
642
+ </div><!-- row-source -->
643
+
644
+ </div>
645
+
646
+
647
+
648
+
649
+ </div><!-- row-method -->
650
+
651
+
652
+ <div id="method-i-select" class="method-detail ">
653
+
654
+ <div class="method-heading">
655
+ <span class="method-name">select</span><span
656
+ class="method-args">(*columns)</span>
657
+
658
+ <span class="method-click-advice">click to toggle source</span>
659
+
660
+ </div>
661
+
662
+
663
+ <div class="method-description">
664
+
665
+ <p>Select columns from the table, given one or more column names. Returns an
666
+ instance of <code>Table</code> with the results. Returns nil if any column
667
+ is not valid.</p>
668
+ <dl class="rdoc-list note-list"><dt><code>columns</code>
669
+ <dd>
670
+ <p>Variable <code>String</code> arguments to identify the columns to select</p>
671
+ </dd></dl>
672
+
673
+
674
+
675
+
676
+ <div class="method-source-code" id="select-source">
677
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 178</span>
678
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">select</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">columns</span>)
679
+ <span class="ruby-comment"># check arguments</span>
680
+ <span class="ruby-identifier">columns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
681
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">c</span>)
682
+ <span class="ruby-keyword">end</span>
683
+
684
+ <span class="ruby-identifier">result</span> = []
685
+ <span class="ruby-identifier">result_headers</span> = []
686
+ <span class="ruby-identifier">columns</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">col</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">col</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">result_headers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">col</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span> }
687
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">result_headers</span>
688
+ <span class="ruby-ivar">@table</span>[<span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">first</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">row</span><span class="ruby-operator">|</span>
689
+ <span class="ruby-identifier">this_row</span> = []
690
+ <span class="ruby-identifier">result_headers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">col</span><span class="ruby-operator">|</span>
691
+ <span class="ruby-identifier">this_row</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">col</span>][<span class="ruby-identifier">row</span>]
692
+ <span class="ruby-keyword">end</span>
693
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">this_row</span>
694
+ <span class="ruby-keyword">end</span>
695
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">result_headers</span>.<span class="ruby-identifier">empty?</span>
696
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
697
+ <span class="ruby-keyword">else</span>
698
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
699
+ <span class="ruby-keyword">end</span>
700
+ <span class="ruby-keyword">end</span></pre>
701
+ </div><!-- select-source -->
702
+
703
+ </div>
704
+
705
+
706
+ <div class="aliases">
707
+ Also aliased as: <a href="Table.html#method-i-get_columns">get_columns</a>
708
+ </div>
709
+
710
+
711
+
712
+ </div><!-- select-method -->
713
+
714
+
715
+ <div id="method-i-size" class="method-detail method-alias">
716
+
717
+ <div class="method-heading">
718
+ <span class="method-name">size</span><span
719
+ class="method-args">(colname=nil, value=nil)</span>
720
+
721
+ </div>
722
+
723
+
724
+ <div class="method-description">
725
+
726
+
727
+
728
+
729
+
730
+
731
+ </div>
732
+
733
+
734
+
735
+
736
+ <div class="aliases">
737
+ Alias for: <a href="Table.html#method-i-count">count</a>
738
+ </div>
739
+
740
+ </div><!-- size-method -->
741
+
742
+
743
+ <div id="method-i-sub" class="method-detail ">
744
+
745
+ <div class="method-heading">
746
+ <span class="method-name">sub</span><span
747
+ class="method-args">(colname, re, replace)</span>
748
+
749
+ <span class="method-click-advice">click to toggle source</span>
750
+
751
+ </div>
752
+
753
+
754
+ <div class="method-description">
755
+
756
+ <p>Given a field/column, and a regular expression to match against, and a
757
+ replacement string, update the table such that it substitutes the column
758
+ data with the replacement string. Returns <code>nil</code> if the column is
759
+ not found.</p>
760
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
761
+ <dd>
762
+ <p><code>String</code> to identify the column to join on</p>
763
+ </dd><dt><code>re</code>
764
+ <dd>
765
+ <p><code>Regexp</code> to match the value in the selected column</p>
766
+ </dd><dt><code>replace</code>
767
+ <dd>
768
+ <p><code>String</code> to specify the replacement text for the given
769
+ <code>Regexp</code></p>
770
+ </dd></dl>
771
+
772
+
773
+
774
+
775
+ <div class="method-source-code" id="sub-source">
776
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 280</span>
777
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">sub</span>(<span class="ruby-identifier">colname</span>, <span class="ruby-identifier">re</span>, <span class="ruby-identifier">replace</span>)
778
+ <span class="ruby-comment"># check arguments</span>
779
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;No regular expression to match against&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">re</span>
780
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;No replacement string specified&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">replace</span>
781
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
782
+
783
+ <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>
784
+ <span class="ruby-identifier">item</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-identifier">re</span>, <span class="ruby-identifier">replace</span>)
785
+ <span class="ruby-keyword">end</span>
786
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>
787
+ <span class="ruby-keyword">end</span></pre>
788
+ </div><!-- sub-source -->
789
+
790
+ </div>
791
+
792
+
793
+ <div class="aliases">
794
+ Also aliased as: <a href="Table.html#method-i-sub-21">sub!</a>
795
+ </div>
796
+
797
+
798
+
799
+ </div><!-- sub-method -->
800
+
801
+
802
+ <div id="method-i-sub-21" class="method-detail method-alias">
803
+
804
+ <div class="method-heading">
805
+ <span class="method-name">sub!</span><span
806
+ class="method-args">(colname, re, replace)</span>
807
+
808
+ </div>
809
+
810
+
811
+ <div class="method-description">
812
+
813
+
814
+
815
+
816
+
817
+
818
+ </div>
819
+
820
+
821
+
822
+
823
+ <div class="aliases">
824
+ Alias for: <a href="Table.html#method-i-sub">sub</a>
825
+ </div>
826
+
827
+ </div><!-- sub-21-method -->
828
+
829
+
830
+ <div id="method-i-tally" class="method-detail ">
831
+
832
+ <div class="method-heading">
833
+ <span class="method-name">tally</span><span
834
+ class="method-args">(colname)</span>
835
+
836
+ <span class="method-click-advice">click to toggle source</span>
837
+
838
+ </div>
839
+
840
+
841
+ <div class="method-description">
842
+
843
+ <p>Count instances in a particular field/column and return a
844
+ <code>Table</code> of the results. Returns <code>nil</code> if the column
845
+ is not found.</p>
846
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
847
+ <dd>
848
+ <p><code>String</code> to identify the column to tally</p>
849
+ </dd></dl>
850
+
851
+
852
+
853
+
854
+ <div class="method-source-code" id="tally-source">
855
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 163</span>
856
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">tally</span>(<span class="ruby-identifier">colname</span>)
857
+ <span class="ruby-comment"># check arguments</span>
858
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
859
+
860
+ <span class="ruby-identifier">result</span> = {}
861
+ <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
862
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">val</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">result</span>[<span class="ruby-identifier">val</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">result</span>[<span class="ruby-identifier">val</span>] = <span class="ruby-value">1</span>
863
+ <span class="ruby-keyword">end</span>
864
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>([[<span class="ruby-identifier">colname</span>,<span class="ruby-string">&quot;Count&quot;</span>]] <span class="ruby-operator">+</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">to_a</span>)
865
+ <span class="ruby-keyword">end</span></pre>
866
+ </div><!-- tally-source -->
867
+
868
+ </div>
869
+
870
+
871
+
872
+
873
+ </div><!-- tally-method -->
874
+
875
+
876
+ <div id="method-i-to_a" class="method-detail ">
877
+
878
+ <div class="method-heading">
879
+ <span class="method-name">to_a</span><span
880
+ class="method-args">()</span>
881
+
882
+ <span class="method-click-advice">click to toggle source</span>
883
+
884
+ </div>
885
+
886
+
887
+ <div class="method-description">
888
+
889
+ <p>Converts a <code>Table</code> object to an array of arrays (each row)</p>
890
+
891
+ <p>none</p>
892
+
893
+
894
+
895
+
896
+ <div class="method-source-code" id="to_a-source">
897
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 92</span>
898
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_a</span>
899
+ <span class="ruby-identifier">result</span> = [ <span class="ruby-constant">Array</span>(<span class="ruby-ivar">@headers</span>) ]
900
+
901
+ <span class="ruby-ivar">@table</span>[<span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">first</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">row</span><span class="ruby-operator">|</span>
902
+ <span class="ruby-identifier">items</span> = []
903
+ <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">col</span><span class="ruby-operator">|</span>
904
+ <span class="ruby-identifier">items</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">col</span>][<span class="ruby-identifier">row</span>]
905
+ <span class="ruby-keyword">end</span>
906
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">items</span>
907
+ <span class="ruby-keyword">end</span>
908
+ <span class="ruby-identifier">result</span>
909
+ <span class="ruby-keyword">end</span></pre>
910
+ </div><!-- to_a-source -->
911
+
912
+ </div>
913
+
914
+
915
+
916
+
917
+ </div><!-- to_a-method -->
918
+
919
+
920
+ <div id="method-i-to_s" class="method-detail ">
921
+
922
+ <div class="method-heading">
923
+ <span class="method-name">to_s</span><span
924
+ class="method-args">()</span>
925
+
926
+ <span class="method-click-advice">click to toggle source</span>
927
+
928
+ </div>
929
+
930
+
931
+ <div class="method-description">
932
+
933
+ <p>Converts a <code>Table</code> object to a tab-delimited string.</p>
934
+
935
+ <p>none</p>
936
+
937
+
938
+
939
+
940
+ <div class="method-source-code" id="to_s-source">
941
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 73</span>
942
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
943
+ <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\t&quot;</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
944
+
945
+ <span class="ruby-ivar">@table</span>[<span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">first</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">row</span><span class="ruby-operator">|</span>
946
+ <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">col</span><span class="ruby-operator">|</span>
947
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">col</span>][<span class="ruby-identifier">row</span>].<span class="ruby-identifier">to_s</span>
948
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">col</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">last</span>
949
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\t&quot;</span>
950
+ <span class="ruby-keyword">else</span>
951
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
952
+ <span class="ruby-keyword">end</span>
953
+ <span class="ruby-keyword">end</span>
954
+ <span class="ruby-keyword">end</span>
955
+ <span class="ruby-identifier">result</span>
956
+ <span class="ruby-keyword">end</span></pre>
957
+ </div><!-- to_s-source -->
958
+
959
+ </div>
960
+
961
+
962
+
963
+
964
+ </div><!-- to_s-method -->
965
+
966
+
967
+ <div id="method-i-top" class="method-detail ">
968
+
969
+ <div class="method-heading">
970
+ <span class="method-name">top</span><span
971
+ class="method-args">(colname, num=1)</span>
972
+
973
+ <span class="method-click-advice">click to toggle source</span>
974
+
975
+ </div>
976
+
977
+
978
+ <div class="method-description">
979
+
980
+ <p>Counts the number of instances of a particular string, given a column name,
981
+ and returns an integer &gt;= 0. Returns <code>nil</code> if the column is
982
+ not found. If no parameters are given, returns the number of rows in the
983
+ table.</p>
984
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
985
+ <dd>
986
+ <p><code>String</code> to identify the column to count</p>
987
+ </dd><dt><code>num</code>
988
+ <dd>
989
+ <p>OPTIONAL <code>String</code> number of values to return</p>
990
+ </dd></dl>
991
+
992
+
993
+
994
+
995
+ <div class="method-source-code" id="top-source">
996
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 140</span>
997
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">top</span>(<span class="ruby-identifier">colname</span>, <span class="ruby-identifier">num</span>=<span class="ruby-value">1</span>)
998
+ <span class="ruby-identifier">freq</span> = <span class="ruby-identifier">tally</span>(<span class="ruby-identifier">colname</span>).<span class="ruby-identifier">to_a</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>].<span class="ruby-identifier">sort_by</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span> }.<span class="ruby-identifier">reverse</span>
999
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">freq</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">num</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>].<span class="ruby-identifier">unshift</span>([<span class="ruby-string">&quot;State&quot;</span>,<span class="ruby-string">&quot;Count&quot;</span>]))
1000
+ <span class="ruby-keyword">end</span></pre>
1001
+ </div><!-- top-source -->
1002
+
1003
+ </div>
1004
+
1005
+
1006
+
1007
+
1008
+ </div><!-- top-method -->
1009
+
1010
+
1011
+ <div id="method-i-union" class="method-detail ">
1012
+
1013
+ <div class="method-heading">
1014
+ <span class="method-name">union</span><span
1015
+ class="method-args">(table2, colname, col2name=nil)</span>
1016
+
1017
+ <span class="method-click-advice">click to toggle source</span>
1018
+
1019
+ </div>
1020
+
1021
+
1022
+ <div class="method-description">
1023
+
1024
+ <p>Return the union of columns from different tables, eliminating duplicates.
1025
+ Return nil if a column is not found.</p>
1026
+ <dl class="rdoc-list note-list"><dt><code>table2</code>
1027
+ <dd>
1028
+ <p><code>Table</code> to identify the secondary table in the union</p>
1029
+ </dd><dt><code>colname</code>
1030
+ <dd>
1031
+ <p><code>String</code> to identify the column to union</p>
1032
+ </dd><dt><code>col2name</code>
1033
+ <dd>
1034
+ <p>OPTIONAL <code>String</code> to identify the column in the second table to
1035
+ union</p>
1036
+ </dd></dl>
1037
+
1038
+
1039
+
1040
+
1041
+ <div class="method-source-code" id="union-source">
1042
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 298</span>
1043
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">union</span>(<span class="ruby-identifier">table2</span>, <span class="ruby-identifier">colname</span>, <span class="ruby-identifier">col2name</span>=<span class="ruby-keyword">nil</span>)
1044
+ <span class="ruby-comment"># check arguments</span>
1045
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid table!&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Table</span>)
1046
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
1047
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">col2name</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment"># Assume colname applies for both tables</span>
1048
+ <span class="ruby-identifier">col2name</span> = <span class="ruby-identifier">colname</span>
1049
+ <span class="ruby-keyword">end</span>
1050
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">col2name</span>)
1051
+
1052
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">column</span>(<span class="ruby-identifier">colname</span>) <span class="ruby-operator">|</span> <span class="ruby-identifier">table2</span>.<span class="ruby-identifier">column</span>(<span class="ruby-identifier">col2name</span>)
1053
+ <span class="ruby-keyword">end</span></pre>
1054
+ </div><!-- union-source -->
1055
+
1056
+ </div>
1057
+
1058
+
1059
+
1060
+
1061
+ </div><!-- union-method -->
1062
+
1063
+
1064
+ <div id="method-i-where" class="method-detail ">
1065
+
1066
+ <div class="method-heading">
1067
+ <span class="method-name">where</span><span
1068
+ class="method-args">(colname, condition=nil)</span>
1069
+
1070
+ <span class="method-click-advice">click to toggle source</span>
1071
+
1072
+ </div>
1073
+
1074
+
1075
+ <div class="method-description">
1076
+
1077
+ <p>Given a particular condition for a given column field/column, return a
1078
+ subtable that matches the condition. If no condition is given, a new
1079
+ <code>Table</code> is returned with all records. Returns <code>nil</code>
1080
+ if the condition is not met or the column is not found.</p>
1081
+ <dl class="rdoc-list note-list"><dt><code>colname</code>
1082
+ <dd>
1083
+ <p><code>String</code> to identify the column to tally</p>
1084
+ </dd><dt><code>condition</code>
1085
+ <dd>
1086
+ <p>OPTIONAL <code>String</code> containing a ruby condition to evaluate</p>
1087
+ </dd></dl>
1088
+
1089
+
1090
+
1091
+
1092
+ <div class="method-source-code" id="where-source">
1093
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 211</span>
1094
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">where</span>(<span class="ruby-identifier">colname</span>, <span class="ruby-identifier">condition</span>=<span class="ruby-keyword">nil</span>)
1095
+ <span class="ruby-comment"># check arguments</span>
1096
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@table</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">colname</span>)
1097
+
1098
+ <span class="ruby-identifier">result</span> = []
1099
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@headers</span>
1100
+ <span class="ruby-ivar">@table</span>[<span class="ruby-identifier">colname</span>].<span class="ruby-identifier">each_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
1101
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">condition</span>
1102
+ <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;&#39;#{@table[colname][index]}&#39; #{condition}&quot;</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">get_row</span>(<span class="ruby-identifier">index</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>
1103
+ <span class="ruby-keyword">else</span>
1104
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">get_row</span>(<span class="ruby-identifier">index</span>)
1105
+ <span class="ruby-keyword">end</span>
1106
+ <span class="ruby-keyword">end</span>
1107
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Table</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>
1108
+ <span class="ruby-keyword">end</span></pre>
1109
+ </div><!-- where-source -->
1110
+
1111
+ </div>
1112
+
1113
+
1114
+ <div class="aliases">
1115
+ Also aliased as: <a href="Table.html#method-i-get_rows">get_rows</a>
1116
+ </div>
1117
+
1118
+
1119
+
1120
+ </div><!-- where-method -->
1121
+
1122
+
1123
+ <div id="method-i-write_file" class="method-detail ">
1124
+
1125
+ <div class="method-heading">
1126
+ <span class="method-name">write_file</span><span
1127
+ class="method-args">(filename)</span>
1128
+
1129
+ <span class="method-click-advice">click to toggle source</span>
1130
+
1131
+ </div>
1132
+
1133
+
1134
+ <div class="method-description">
1135
+
1136
+ <p>Write a representation of the <code>Table</code> object to a file (tab
1137
+ delimited).</p>
1138
+ <dl class="rdoc-list note-list"><dt><code>filename</code>
1139
+ <dd>
1140
+ <p><code>String</code> to identify the name of the file to write</p>
1141
+ </dd></dl>
1142
+
1143
+
1144
+
1145
+
1146
+ <div class="method-source-code" id="write_file-source">
1147
+ <pre><span class="ruby-comment"># File lib/tablestakes.rb, line 333</span>
1148
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_file</span>(<span class="ruby-identifier">filename</span>)
1149
+ <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-string">&quot;w&quot;</span>)
1150
+ <span class="ruby-identifier">file</span>.<span class="ruby-identifier">print</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">to_s</span>
1151
+ <span class="ruby-keyword">end</span></pre>
1152
+ </div><!-- write_file-source -->
1153
+
1154
+ </div>
1155
+
1156
+
1157
+
1158
+
1159
+ </div><!-- write_file-method -->
1160
+
1161
+
1162
+ </section><!-- public-instance-method-details -->
1163
+
1164
+ </section><!-- 5Buntitled-5D -->
1165
+
1166
+ </div><!-- documentation -->
1167
+
1168
+
1169
+ <footer id="validator-badges">
1170
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
1171
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 4.0.0.
1172
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
1173
+ </footer>
1174
+