tablestakes 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
+