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.
- checksums.yaml +7 -0
- data/README.md +218 -0
- data/capitals.sorted +50 -0
- data/capitals.txt +51 -0
- data/cities.txt +290 -0
- data/doc/Table.html +1174 -0
- data/doc/created.rid +2 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +71 -0
- data/doc/js/darkfish.js +155 -0
- data/doc/js/jquery.js +18 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/search.js +94 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/searcher.js +228 -0
- data/doc/rdoc.css +595 -0
- data/doc/table_of_contents.html +88 -0
- data/lib/tablestakes.rb +407 -0
- data/spec/factories.rb +16 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/table_spec.rb +179 -0
- data/test.tab +4 -0
- 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 >= 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">"State"</span>,<span class="ruby-string">"Count"</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 >= 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">></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">"Invalid table!"</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">&</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">"Invalid table!"</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">'_'</span> <span class="ruby-operator"><<</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">'_'</span> <span class="ruby-operator"><<</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"><<</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"><<</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"><<</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"><<</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"><<</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">"No regular expression to match against"</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">"No replacement string specified"</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">"Count"</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"><<</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"><<</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">"\t"</span>) <span class="ruby-operator"><<</span> <span class="ruby-string">"\n"</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"><<</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"><<</span> <span class="ruby-string">"\t"</span>
|
950
|
+
<span class="ruby-keyword">else</span>
|
951
|
+
<span class="ruby-identifier">result</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\n"</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 >= 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">"State"</span>,<span class="ruby-string">"Count"</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">"Invalid table!"</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"><<</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">"'#{@table[colname][index]}' #{condition}"</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">result</span> <span class="ruby-operator"><<</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"><<</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">></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">"w"</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
|
+
|