fat_table 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/README.org +15 -19
- data/README.rdoc +15 -19
- data/bin/ft_console +12 -17
- data/fat_table.gemspec +3 -2
- data/lib/fat_table.rb +6 -3
- data/lib/fat_table/formatters/aoa_formatter.rb +3 -3
- data/lib/fat_table/formatters/formatter.rb +19 -19
- data/lib/fat_table/table.rb +168 -138
- data/lib/fat_table/version.rb +1 -1
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 772c4f7d95d5af94968f650b4bc98ebad4756626
|
4
|
+
data.tar.gz: c15462e9a444de246690482da1a8acd3a46e0c60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f1177b1568ece2027849b102f2e7db84db99846e7291882f943fba5fd400b75032847df303c528fada0683afb2fb5b0bc97a2a91f2e52ed74cbd6960da07ac2
|
7
|
+
data.tar.gz: 813ddb4b57d893ce9bfb0ca17bb6d03d8807fa361b166396d0635fc5d23e70f4c1641fb69b0f3973678faa2e1bb87667de6bca4b8ff3c0033ceba38db0168658
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--no-private lib/**/*.rb --markup=markdown --main=README.rdoc - README.rdoc
|
data/README.org
CHANGED
@@ -148,8 +148,9 @@ the main features of ~FatTable~. See the detailed explanations further on down.
|
|
148
148
|
|
149
149
|
When you install the fat_table gem, you have access to a program ~ft_console~
|
150
150
|
which opens a ~pry~ session with ~fat_table~ loaded and the tables used in the
|
151
|
-
examples in this README defined as
|
152
|
-
them.
|
151
|
+
examples in this README defined as instance variables so you can experiment with
|
152
|
+
them. Because they are defined as instance variables, you have to write ~tab1~
|
153
|
+
as ~@tab1~ in ~ft_console~, but otherwise the examples should work.
|
153
154
|
|
154
155
|
The examples in this ~README~ file are executed as code blocks within the
|
155
156
|
~README.org~ file, so they typically end with a call to ~.to_aoa~. That causes
|
@@ -162,21 +163,14 @@ To read in the table used in the Quick Start section above, you might do the
|
|
162
163
|
following:
|
163
164
|
|
164
165
|
#+BEGIN_EXAMPLE
|
165
|
-
$ ft_console
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
=> 115: instr <<-EOS
|
174
|
-
116: FatTable console sets up some sample tables you can play with (see ls)
|
175
|
-
117:
|
176
|
-
118: For example, try 'puts tab1.to_term'
|
177
|
-
119: EOS
|
178
|
-
|
179
|
-
[1] pry(main)> table = FatTable.from_aoa(data)
|
166
|
+
$ ft_console[1] pry(main)> ls
|
167
|
+
ActiveSupport::ToJsonWithActiveSupportEncoder#methods: to_json
|
168
|
+
self.methods: inspect to_s
|
169
|
+
instance variables:
|
170
|
+
@aoa @tab1 @tab2 @tab_a @tab_b @tt
|
171
|
+
@data @tab1_str @tab2_str @tab_a_str @tab_b_str
|
172
|
+
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ lib str version
|
173
|
+
[2] pry(main)> table = FatTable.from_aoa(@data)
|
180
174
|
=> #<FatTable::Table:0x0055b40e6cd870
|
181
175
|
@boundaries=[],
|
182
176
|
@columns=
|
@@ -197,7 +191,7 @@ From: /home/ded/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/fat_table-0.2.1/b
|
|
197
191
|
@raw_header=:info,
|
198
192
|
@type="String">,
|
199
193
|
#<FatTable::Column:0x0055b40e6d2668 @header=:ok, @items=[false, true, false, true, true, true, true, true, true, true, true, false], @raw_header=:ok, @type="Boolean">]>
|
200
|
-
[
|
194
|
+
[3] pry(main)> puts table.to_text
|
201
195
|
+============+======+==========+==========+=========+=========+====+
|
202
196
|
| Date | Code | Raw | Shares | Price | Info | Ok |
|
203
197
|
+------------+------+----------+----------+---------+---------+----+
|
@@ -215,7 +209,7 @@ From: /home/ded/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/fat_table-0.2.1/b
|
|
215
209
|
| 2013-05-23 | S | 23054.0 | 9694.21 | 26.8015 | ENTITY3 | F |
|
216
210
|
+============+======+==========+==========+=========+=========+====+
|
217
211
|
=> nil
|
218
|
-
[
|
212
|
+
[4] pry(main)>
|
219
213
|
#+END_EXAMPLE
|
220
214
|
|
221
215
|
And if you use ~.to_term~, you can see the effect of the color formatting
|
@@ -971,6 +965,8 @@ will raise an exception.
|
|
971
965
|
- ~pdev~ :: for Numeric and DateTime columns, compute the population standard
|
972
966
|
deviation of the non-nil values in the column, dates are converted to
|
973
967
|
numbers as for the :avg aggregate,
|
968
|
+
- ~all?~ :: for Boolean columns only, return true if all of the non-nil values
|
969
|
+
in the column are true,
|
974
970
|
- ~any?~ :: for Boolean columns only, return true if any non-nil value in the
|
975
971
|
column is true,
|
976
972
|
- ~none?~ :: for Boolean columns only, return true if no non-nil value in the
|
data/README.rdoc
CHANGED
@@ -135,8 +135,11 @@ the main features of +FatTable+. See the detailed explanations further on down.
|
|
135
135
|
|
136
136
|
When you install the fat_table gem, you have access to a program +ft_console+
|
137
137
|
which opens a +pry+ session with +fat_table+ loaded and the tables used in the
|
138
|
-
examples in this README defined as
|
139
|
-
them.
|
138
|
+
examples in this README defined as instance variables so you can experiment with
|
139
|
+
them. Because they are defined as instance variables, you have to write ~tab1~
|
140
|
+
as ~@tab1~ in ~ft_console~, but otherwise the examples should work.
|
141
|
+
|
142
|
+
|
140
143
|
|
141
144
|
The examples in this +README+ file are executed as code blocks within the
|
142
145
|
+README.org+ file, so they typically end with a call to +.to_aoa+. That causes
|
@@ -148,21 +151,14 @@ the table to be inserted into the file and formatted as a table. With
|
|
148
151
|
To read in the table used in the Quick Start section above, you might do the
|
149
152
|
following:
|
150
153
|
|
151
|
-
$ ft_console
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
=> 115: instr <<-EOS
|
160
|
-
116: FatTable console sets up some sample tables you can play with (see ls)
|
161
|
-
117:
|
162
|
-
118: For example, try 'puts tab1.to_term'
|
163
|
-
119: EOS
|
164
|
-
|
165
|
-
[1] pry(main)> table = FatTable.from_aoa(data)
|
154
|
+
$ ft_console[1] pry(main)> ls
|
155
|
+
ActiveSupport::ToJsonWithActiveSupportEncoder#methods: to_json
|
156
|
+
self.methods: inspect to_s
|
157
|
+
instance variables:
|
158
|
+
@aoa @tab1 @tab2 @tab_a @tab_b @tt
|
159
|
+
@data @tab1_str @tab2_str @tab_a_str @tab_b_str
|
160
|
+
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ lib str version
|
161
|
+
[2] pry(main)> table = FatTable.from_aoa(@data)
|
166
162
|
=> #<FatTable::Table:0x0055b40e6cd870
|
167
163
|
@boundaries=[],
|
168
164
|
@columns=
|
@@ -183,7 +179,7 @@ following:
|
|
183
179
|
@raw_header=:info,
|
184
180
|
@type="String">,
|
185
181
|
#<FatTable::Column:0x0055b40e6d2668 @header=:ok, @items=[false, true, false, true, true, true, true, true, true, true, true, false], @raw_header=:ok, @type="Boolean">]>
|
186
|
-
[
|
182
|
+
[3] pry(main)> puts table.to_text
|
187
183
|
+============+======+==========+==========+=========+=========+====+
|
188
184
|
| Date | Code | Raw | Shares | Price | Info | Ok |
|
189
185
|
+------------+------+----------+----------+---------+---------+----+
|
@@ -201,7 +197,7 @@ following:
|
|
201
197
|
| 2013-05-23 | S | 23054.0 | 9694.21 | 26.8015 | ENTITY3 | F |
|
202
198
|
+============+======+==========+==========+=========+=========+====+
|
203
199
|
=> nil
|
204
|
-
[
|
200
|
+
[4] pry(main)>
|
205
201
|
|
206
202
|
And if you use +.to_term+, you can see the effect of the color formatting
|
207
203
|
directives.
|
data/bin/ft_console
CHANGED
@@ -4,7 +4,7 @@ require 'bundler/setup'
|
|
4
4
|
require 'fat_table'
|
5
5
|
require 'pry'
|
6
6
|
|
7
|
-
data =
|
7
|
+
@data =
|
8
8
|
[['Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Ok'],
|
9
9
|
['2013-05-29', 'S', 15_700.00, 6601.85, 24.7790, 'ENTITY3', 'F'],
|
10
10
|
['2013-05-02', 'P', 118_186.40, 118_186.4, 11.8500, 'ENTITY1', 'T'],
|
@@ -19,7 +19,7 @@ data =
|
|
19
19
|
['2013-05-30', 'S', 6_679.00, 2808.52, 25.0471, 'ENTITY3', 'T'],
|
20
20
|
['2013-05-23', 'S', 23_054.00, 9694.21, 26.8015, 'ENTITY3', 'F']]
|
21
21
|
|
22
|
-
tab_a_str = <<-EOS
|
22
|
+
@tab_a_str = <<-EOS
|
23
23
|
| Id | Name | Age | Address | Salary | Join Date |
|
24
24
|
|----+-------+-----+------------+--------+------------|
|
25
25
|
| 1 | Paul | 32 | California | 20000 | 2001-07-13 |
|
@@ -32,7 +32,7 @@ tab_a_str = <<-EOS
|
|
32
32
|
| 10 | James | 45 | Texas | 5000 | |
|
33
33
|
EOS
|
34
34
|
|
35
|
-
tab_b_str = <<-EOS
|
35
|
+
@tab_b_str = <<-EOS
|
36
36
|
| Id | Dept | Emp Id |
|
37
37
|
|----+-------------+--------|
|
38
38
|
| 1 | IT Billing | 1 |
|
@@ -40,10 +40,10 @@ tab_b_str = <<-EOS
|
|
40
40
|
| 3 | Finance | 7 |
|
41
41
|
EOS
|
42
42
|
|
43
|
-
tab_a = FatTable.from_org_string(tab_a_str)
|
44
|
-
tab_b = FatTable.from_org_string(tab_b_str)
|
43
|
+
@tab_a = FatTable.from_org_string(@tab_a_str)
|
44
|
+
@tab_b = FatTable.from_org_string(@tab_b_str)
|
45
45
|
|
46
|
-
tab1_str = <<-EOS
|
46
|
+
@tab1_str = <<-EOS
|
47
47
|
| Ref | Date | Code | Price | G10 | QP10 | Shares | LP | QP | IPLP | IPQP |
|
48
48
|
|------+------------------+------+--------+-----+------+--------+------+-------+--------+--------|
|
49
49
|
| T001 | [2016-11-01 Tue] | P | 7.7000 | T | F | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
@@ -70,7 +70,7 @@ tab1_str = <<-EOS
|
|
70
70
|
| T016 | [2016-11-02 Wed] | P | 8.2500 | T | T | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
71
71
|
EOS
|
72
72
|
|
73
|
-
tab2_str = <<-EOS
|
73
|
+
@tab2_str = <<-EOS
|
74
74
|
| Ref | Date | Code | Price | G10 | QP10 | Shares | LP | QP | IPLP | IPQP |
|
75
75
|
|------+------------------+------+--------+-----+------+--------+-------+------+--------+--------|
|
76
76
|
| T003 | [2016-11-01 Tue] | P | 7.5000 | F | T | 800 | 112 | 688 | 0.2453 | 0.1924 |
|
@@ -93,10 +93,10 @@ tab2_str = <<-EOS
|
|
93
93
|
| T021 | [2017-01-23 Mon] | P | 7.16 | T | T | 12100 | 11050 | 1050 | 0.2453 | 0.1924 |
|
94
94
|
EOS
|
95
95
|
|
96
|
-
tab1 = FatTable.from_org_string(tab1_str)
|
97
|
-
tab2 = FatTable.from_org_string(tab2_str)
|
96
|
+
@tab1 = FatTable.from_org_string(@tab1_str)
|
97
|
+
@tab2 = FatTable.from_org_string(@tab2_str)
|
98
98
|
|
99
|
-
|
99
|
+
@aoa = [['Ref', 'Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Bool'],
|
100
100
|
[1, '2013-05-02', 'P', 795_546.20, 795_546.2, 1.1850, 'YLPEF1', 'T'],
|
101
101
|
[2, '2013-05-02', 'P', 118_186.40, 118_186.4, 11.8500, 'YLPEF1', 'T'],
|
102
102
|
[7, '2013-05-20', 'S', 12_000.00, 5046.00, 28.2804, 'YLEAC', 'F'],
|
@@ -109,11 +109,6 @@ AOA = [['Ref', 'Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Bool'],
|
|
109
109
|
[14, '2013-05-29', 'S', 15_700.00, 6601.85, 24.7790, 'YLEAC', 'F'],
|
110
110
|
[15, '2013-05-29', 'S', 15_900.00, 6685.95, 24.5802, 'YLEAC', 'T'],
|
111
111
|
[16, '2013-05-30', 'S', 6_679.00, 2808.52, 25.0471, 'YLEAC', 'T']]
|
112
|
-
tt = FatTable.from_aoa(
|
112
|
+
@tt = FatTable.from_aoa(@aoa)
|
113
113
|
|
114
|
-
|
115
|
-
instr <<-EOS
|
116
|
-
FatTable console sets up some sample tables you can play with (see ls)
|
117
|
-
|
118
|
-
For example, try 'puts tab1.to_term'
|
119
|
-
EOS
|
114
|
+
Pry.start
|
data/fat_table.gemspec
CHANGED
@@ -59,6 +59,7 @@ org-mode buffer as an org-table, ready for processing by other code blocks.
|
|
59
59
|
spec.bindir = 'bin'
|
60
60
|
spec.executables = ['ft_console']
|
61
61
|
spec.require_paths = ['lib']
|
62
|
+
spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
|
62
63
|
|
63
64
|
spec.add_development_dependency 'simplecov'
|
64
65
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
@@ -68,9 +69,9 @@ org-mode buffer as an org-table, ready for processing by other code blocks.
|
|
68
69
|
spec.add_development_dependency 'pry'
|
69
70
|
spec.add_development_dependency 'pry-doc'
|
70
71
|
spec.add_development_dependency 'pry-byebug'
|
71
|
-
spec.add_development_dependency '
|
72
|
+
spec.add_development_dependency 'redcarpet'
|
72
73
|
|
73
|
-
spec.add_runtime_dependency 'fat_core', '~>
|
74
|
+
spec.add_runtime_dependency 'fat_core', '~> 4.0', '>= 4.1'
|
74
75
|
spec.add_runtime_dependency 'activesupport'
|
75
76
|
spec.add_runtime_dependency 'rainbow'
|
76
77
|
spec.add_runtime_dependency 'dbi'
|
data/lib/fat_table.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "fat_table/version"
|
2
|
-
|
3
1
|
# This module provides objects for treating tables as a data type on which you
|
4
2
|
# can (1) perform operations, such as select, where, join, and others and (2)
|
5
3
|
# output the tables in several formats, including text, ANSI terminal, LaTeX,
|
@@ -7,12 +5,17 @@ require "fat_table/version"
|
|
7
5
|
# variety of input sources. See, e.g., .from_csv_file,
|
8
6
|
# FatTable.from_org_file, and FatTable.from_sql, for more details.
|
9
7
|
module FatTable
|
10
|
-
require 'fat_core'
|
8
|
+
require 'fat_core/symbol'
|
9
|
+
require 'fat_core/array'
|
10
|
+
require 'fat_core/hash'
|
11
|
+
require 'fat_core/numeric'
|
12
|
+
require 'csv'
|
11
13
|
require 'dbi'
|
12
14
|
require 'active_support'
|
13
15
|
require 'active_support/core_ext'
|
14
16
|
require 'active_support/number_helper'
|
15
17
|
|
18
|
+
require 'fat_table/version'
|
16
19
|
require 'fat_table/evaluator'
|
17
20
|
require 'fat_table/column'
|
18
21
|
require 'fat_table/table'
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module FatTable
|
2
2
|
# A subclass of Formatter for rendering the table as a Ruby Array of Arrays.
|
3
|
-
# Each cell is
|
4
|
-
#
|
5
|
-
#
|
3
|
+
# Each cell is formatted as a string in accordance with the formatting
|
4
|
+
# directives. All footers are included as extra Arrays of the output.
|
5
|
+
# AoaFormatter supports no +options+
|
6
6
|
class AoaFormatter < Formatter
|
7
7
|
|
8
8
|
private
|
@@ -2,14 +2,14 @@ module FatTable
|
|
2
2
|
# A Formatter is for use in Table output routines, and provides methods for
|
3
3
|
# adding group and table footers to the output and instructions for how the
|
4
4
|
# table's cells ought to be formatted. The goal is to make subclasses of this
|
5
|
-
# class handle different output targets, such as aoa for
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# targets, such as text, but will be
|
9
|
-
# subclass should provide the best
|
10
|
-
# available for the target. This
|
11
|
-
#
|
12
|
-
# by subclasses will override these for different output targets.
|
5
|
+
# class handle different output targets, such as aoa for an Array of Arrays
|
6
|
+
# (useful in Emacs org-mode code blocks), ANSI terminals, LaTeX, plain text,
|
7
|
+
# org mode table text, and so forth. Many of the formatting options, such as
|
8
|
+
# color, will be no-ops for some output targets, such as text, but will be
|
9
|
+
# valid nonetheless. Thus, a Formatter subclass should provide the best
|
10
|
+
# implementation for each formatting request available for the target. This
|
11
|
+
# base class will format output as pipe-separated values, but implementations
|
12
|
+
# provided by subclasses will override these for different output targets.
|
13
13
|
class Formatter
|
14
14
|
# Valid locations in a Table as an array of symbols.
|
15
15
|
LOCATIONS = [:header, :body, :bfirst, :gfirst, :gfooter, :footer].freeze
|
@@ -156,12 +156,12 @@ module FatTable
|
|
156
156
|
# tab.footer('Grand Total', :shares, :price)
|
157
157
|
#
|
158
158
|
# Average then show standard deviation of several columns
|
159
|
-
# tab.footer.('Average', date: avg, shares: :avg, price: avg)
|
160
|
-
# tab.footer.('Sigma', date: dev, shares: :dev, price: :dev)
|
159
|
+
# tab.footer.('Average', date: :avg, shares: :avg, price: :avg)
|
160
|
+
# tab.footer.('Sigma', date: :dev, shares: :dev, price: :dev)
|
161
161
|
#
|
162
162
|
# Do some sums and some other aggregates: sum shares, average date and
|
163
163
|
# price.
|
164
|
-
# tab.footer.('Summary', :shares, date: avg, price: avg)
|
164
|
+
# tab.footer.('Summary', :shares, date: :avg, price: :avg)
|
165
165
|
def footer(label, *sum_cols, **agg_cols)
|
166
166
|
label = label.to_s
|
167
167
|
foot = {}
|
@@ -195,11 +195,11 @@ module FatTable
|
|
195
195
|
# :shares, :price)
|
196
196
|
#
|
197
197
|
# Average then show standard deviation of several columns
|
198
|
-
# tab.gfooter.('Average', date: avg, shares: :avg, price: avg)
|
198
|
+
# tab.gfooter.('Average', date: :avg, shares: :avg, price: :avg)
|
199
199
|
# tab.gfooter.('Sigma', date: dev, shares: :dev, price: :dev)
|
200
200
|
#
|
201
201
|
# Do some sums and some other aggregates: sum shares, average date and
|
202
|
-
# price. tab.gfooter.('Summary', :shares, date: avg, price: avg)
|
202
|
+
# price. tab.gfooter.('Summary', :shares, date: :avg, price: :avg)
|
203
203
|
def gfooter(label, *sum_cols, **agg_cols)
|
204
204
|
label = label.to_s
|
205
205
|
foot = {}
|
@@ -303,12 +303,11 @@ module FatTable
|
|
303
303
|
gfooter('Group Maximum', hsh)
|
304
304
|
end
|
305
305
|
|
306
|
+
# :category: Formatting
|
307
|
+
|
306
308
|
############################################################################
|
307
309
|
# Formatting methods
|
308
310
|
#
|
309
|
-
#
|
310
|
-
# :category: Formatting
|
311
|
-
#
|
312
311
|
# A Formatter can specify a hash to hold the formatting instructions for
|
313
312
|
# columns by using the column head as a key and the value as the format
|
314
313
|
# instructions. In addition, the keys, :numeric, :string, :datetime,
|
@@ -419,7 +418,7 @@ module FatTable
|
|
419
418
|
end
|
420
419
|
|
421
420
|
# :category: Formatting
|
422
|
-
|
421
|
+
|
423
422
|
# Define a formatting directives for the given location. The following are
|
424
423
|
# the valid +location+ symbols.
|
425
424
|
#
|
@@ -865,7 +864,7 @@ module FatTable
|
|
865
864
|
end
|
866
865
|
if istruct.commas
|
867
866
|
# Commify the whole number part if not done already.
|
868
|
-
result = result.
|
867
|
+
result = result.commas
|
869
868
|
end
|
870
869
|
result
|
871
870
|
end
|
@@ -880,7 +879,8 @@ module FatTable
|
|
880
879
|
when :upper
|
881
880
|
val.upcase
|
882
881
|
when :title
|
883
|
-
|
882
|
+
# Note: fat_core entitle keeps all uppercase words as upper case,
|
883
|
+
val.downcase.entitle
|
884
884
|
when :none
|
885
885
|
val
|
886
886
|
end
|
data/lib/fat_table/table.rb
CHANGED
@@ -58,6 +58,7 @@ module FatTable
|
|
58
58
|
###########################################################################
|
59
59
|
|
60
60
|
# :category: Constructors
|
61
|
+
|
61
62
|
# Return an empty FatTable::Table object.
|
62
63
|
def initialize
|
63
64
|
@columns = []
|
@@ -65,8 +66,9 @@ module FatTable
|
|
65
66
|
end
|
66
67
|
|
67
68
|
# :category: Constructors
|
68
|
-
|
69
|
-
# from the
|
69
|
+
|
70
|
+
# Construct a Table from the contents of a CSV file named +fname+. Headers
|
71
|
+
# will be taken from the first CSV row and converted to symbols.
|
70
72
|
def self.from_csv_file(fname)
|
71
73
|
File.open(fname, 'r') do |io|
|
72
74
|
from_csv_io(io)
|
@@ -74,7 +76,9 @@ module FatTable
|
|
74
76
|
end
|
75
77
|
|
76
78
|
# :category: Constructors
|
77
|
-
|
79
|
+
|
80
|
+
# Construct a Table from a CSV string +str+, treated in the same manner as
|
81
|
+
# the input from a CSV file in ::from_org_file.
|
78
82
|
def self.from_csv_string(str)
|
79
83
|
from_csv_io(StringIO.new(str))
|
80
84
|
end
|
@@ -82,9 +86,9 @@ module FatTable
|
|
82
86
|
# :category: Constructors
|
83
87
|
|
84
88
|
# Construct a Table from the first table found in the given Emacs org-mode
|
85
|
-
# file
|
86
|
-
# Otherwise, synthetic headers of the form +:col_1+, +:col_2+,
|
87
|
-
# created.
|
89
|
+
# file named +fname+. Headers are taken from the first row if the second row
|
90
|
+
# is an hrule. Otherwise, synthetic headers of the form +:col_1+, +:col_2+,
|
91
|
+
# etc. are created.
|
88
92
|
def self.from_org_file(fname)
|
89
93
|
File.open(fname, 'r') do |io|
|
90
94
|
from_org_io(io)
|
@@ -92,36 +96,39 @@ module FatTable
|
|
92
96
|
end
|
93
97
|
|
94
98
|
# :category: Constructors
|
95
|
-
|
96
|
-
#
|
99
|
+
|
100
|
+
# Construct a Table from a string +str+, treated in the same manner as the
|
101
|
+
# contents of an org-mode file in ::from_org_file.
|
97
102
|
def self.from_org_string(str)
|
98
103
|
from_org_io(StringIO.new(str))
|
99
104
|
end
|
100
105
|
|
101
106
|
# :category: Constructors
|
102
107
|
|
103
|
-
# Construct a new table from an
|
104
|
-
# false, do not look for separators, i.e.
|
105
|
-
#
|
106
|
-
# mark the header row and any boundaries. If the second element of the
|
107
|
-
# is a +nil+, interpret the first element of the array as a row of
|
108
|
-
# Otherwise, synthesize headers of the form +:col_1+, +:col_2+, ...
|
109
|
-
# forth. The remaining elements are taken as the body of the table,
|
110
|
-
# that if an element of the outer array is a +nil+, mark the
|
111
|
-
# as a boundary. Note: In org mode code
|
112
|
-
#
|
113
|
-
#
|
108
|
+
# Construct a new table from an Array of Arrays +aoa+. By default, with
|
109
|
+
# +hlines+ set to false, do not look for separators, i.e. +nils+, just treat
|
110
|
+
# the first row as headers. With +hlines+ set true, expect +nil+ separators
|
111
|
+
# to mark the header row and any boundaries. If the second element of the
|
112
|
+
# array is a +nil+, interpret the first element of the array as a row of
|
113
|
+
# headers. Otherwise, synthesize headers of the form +:col_1+, +:col_2+, ...
|
114
|
+
# and so forth. The remaining elements are taken as the body of the table,
|
115
|
+
# except that if an element of the outer array is a +nil+, mark the
|
116
|
+
# preceding row as a group boundary. Note for Emacs users: In org mode code
|
117
|
+
# blocks when an org-mode table is passed in as a variable it is passed in
|
118
|
+
# as an Array of Arrays. By default (+ HEADER: :hlines no +) org-mode strips
|
119
|
+
# all from the table; otherwise (+ HEADER: :hlines yes +) they are indicated
|
120
|
+
# with nil elements in the outer array.
|
114
121
|
def self.from_aoa(aoa, hlines: false)
|
115
122
|
from_array_of_arrays(aoa, hlines: hlines)
|
116
123
|
end
|
117
124
|
|
118
125
|
# :category: Constructors
|
119
126
|
|
120
|
-
# Construct a Table from an
|
121
|
-
# the #to_h method.
|
122
|
-
# converted to symbols will become the headers for the
|
123
|
-
# set true, mark a group boundary whenever a nil, rather
|
124
|
-
# appears in the outer array.
|
127
|
+
# Construct a Table from +aoh+, an Array of Hashes or an Array of any
|
128
|
+
# objects that respond to the #to_h method. All hashes must have the same
|
129
|
+
# keys, which, when converted to symbols will become the headers for the
|
130
|
+
# Table. If hlines is set true, mark a group boundary whenever a nil, rather
|
131
|
+
# than a hash appears in the outer array.
|
125
132
|
def self.from_aoh(aoh, hlines: false)
|
126
133
|
if aoh.first.respond_to?(:to_h)
|
127
134
|
from_array_of_hashes(aoh, hlines: hlines)
|
@@ -133,16 +140,16 @@ module FatTable
|
|
133
140
|
|
134
141
|
# :category: Constructors
|
135
142
|
|
136
|
-
# Construct a
|
137
|
-
# the input table.
|
143
|
+
# Construct a new table from another FatTable::Table object +table+. Inherit any
|
144
|
+
# group boundaries from the input table.
|
138
145
|
def self.from_table(table)
|
139
146
|
table.deep_dup
|
140
147
|
end
|
141
148
|
|
142
149
|
# :category: Constructors
|
143
150
|
|
144
|
-
# Construct a Table by running a SQL query against the database set up
|
145
|
-
# FatTable.set_db
|
151
|
+
# Construct a Table by running a SQL +query+ against the database set up
|
152
|
+
# with FatTable.set_db, with the rows of the query result as rows.
|
146
153
|
def self.from_sql(query)
|
147
154
|
raise UserError, 'FatTable.db must be set with FatTable.set_db' if FatTable.db.nil?
|
148
155
|
result = Table.new
|
@@ -281,13 +288,16 @@ module FatTable
|
|
281
288
|
###########################################################################
|
282
289
|
|
283
290
|
# :category: Attributes
|
284
|
-
|
291
|
+
|
292
|
+
# Return the table's Column with the given +key+ as its header.
|
285
293
|
def column(key)
|
286
294
|
columns.detect { |c| c.header == key.as_sym }
|
287
295
|
end
|
288
296
|
|
289
297
|
# :category: Attributes
|
290
|
-
|
298
|
+
|
299
|
+
# Return the type of the Column with the given +key+ as its
|
300
|
+
# header as a String.
|
291
301
|
def type(key)
|
292
302
|
column(key).type
|
293
303
|
end
|
@@ -295,11 +305,11 @@ module FatTable
|
|
295
305
|
# :category: Attributes
|
296
306
|
|
297
307
|
# Return the array of items of the column with the given header symbol
|
298
|
-
# +key+, or if +key+ is an Integer, return that row
|
299
|
-
# rows can be accessed by number, and its columns can be accessed by
|
300
|
-
# header. Also, double indexing works in either row-major or
|
301
|
-
# order: \tab\[:id\]\[8\] returns the 9th item in the column
|
302
|
-
# so does \tab\[8\]\[:id\].
|
308
|
+
# +key+, or if +key+ is an Integer, return that row at that index. So a
|
309
|
+
# table's rows can be accessed by number, and its columns can be accessed by
|
310
|
+
# column header. Also, double indexing works in either row-major or
|
311
|
+
# column-major order: \tab\[:id\]\[8\] returns the 9th item in the column
|
312
|
+
# headed :id and so does \tab\[8\]\[:id\].
|
303
313
|
def [](key)
|
304
314
|
case key
|
305
315
|
when Integer
|
@@ -325,7 +335,7 @@ module FatTable
|
|
325
335
|
|
326
336
|
# :category: Attributes
|
327
337
|
|
328
|
-
# Return a Hash of the Table's Column header symbols to
|
338
|
+
# Return a Hash of the Table's Column header symbols to type strings.
|
329
339
|
def types
|
330
340
|
result = {}
|
331
341
|
columns.each do |c|
|
@@ -336,7 +346,7 @@ module FatTable
|
|
336
346
|
|
337
347
|
# :category: Attributes
|
338
348
|
|
339
|
-
# Return the headers for the Table as an
|
349
|
+
# Return the headers for the Table as an Array of Symbols.
|
340
350
|
def headers
|
341
351
|
columns.map(&:header)
|
342
352
|
end
|
@@ -461,7 +471,7 @@ module FatTable
|
|
461
471
|
# boundaries would make no sense anyway. Likewise, #union, #intersection,
|
462
472
|
# #except, and #join reset the boundaries to their default.
|
463
473
|
#
|
464
|
-
# Return an array of an
|
474
|
+
# Return an array of an Array of row Hashes for the groups in this Table.
|
465
475
|
def groups
|
466
476
|
normalize_boundaries
|
467
477
|
groups = []
|
@@ -482,8 +492,9 @@ module FatTable
|
|
482
492
|
self
|
483
493
|
end
|
484
494
|
|
485
|
-
# Mark a boundary at k
|
486
|
-
# group boundary.
|
495
|
+
# Mark a group boundary at row +k+, and if +k+ is +nil+, mark the last row
|
496
|
+
# in the table as a group boundary. This is mainly used for internal
|
497
|
+
# purposes.
|
487
498
|
def mark_boundary(k = nil) # :nodoc:
|
488
499
|
if k
|
489
500
|
boundaries.push(k)
|
@@ -551,11 +562,11 @@ module FatTable
|
|
551
562
|
# :category: Operators
|
552
563
|
|
553
564
|
# Return a new Table sorting the rows of this Table on the possibly multiple
|
554
|
-
# keys given in
|
555
|
-
# to indicate reverse sorting on that column.
|
565
|
+
# keys given in +sort_heads+ as an Array of Symbols. Append a ! to the
|
566
|
+
# symbol name to indicate reverse sorting on that column.
|
556
567
|
#
|
557
568
|
# tab.order_by(:ref, :date) => sorted table
|
558
|
-
# tab.order_by(:date!)
|
569
|
+
# tab.order_by(:date!) => reverse sort on :date
|
559
570
|
#
|
560
571
|
# After sorting, the output Table will have group boundaries added after
|
561
572
|
# each row where the sort key changes.
|
@@ -588,23 +599,25 @@ module FatTable
|
|
588
599
|
# Return a Table having the selected column expressions. Each expression can
|
589
600
|
# be either a
|
590
601
|
#
|
591
|
-
# 1. a symbol, +:old_col+, representing a column in the current
|
602
|
+
# 1. in +cols+, a symbol, +:old_col+, representing a column in the current
|
603
|
+
# table,
|
592
604
|
#
|
593
|
-
# 2. a hash of +new_col: :old_col+ to rename an
|
594
|
-
# +:new_col+, or
|
605
|
+
# 2. a hash in +new_cols+ of the form +new_col: :old_col+ to rename an
|
606
|
+
# existing +:old_col+ column as +:new_col+, or
|
595
607
|
#
|
596
|
-
# 3. a hash of +new_col: 'expression'+, to add a new
|
597
|
-
# as an arbitrary ruby expression
|
598
|
-
#
|
599
|
-
# the
|
600
|
-
#
|
601
|
-
#
|
602
|
-
# the row being evaluated.
|
608
|
+
# 3. a hash in +new_cols+ of the form +new_col: 'expression'+, to add a new
|
609
|
+
# column +new_col+ that is computed as an arbitrary ruby expression in
|
610
|
+
# which there are local variables bound to the names of existing columns
|
611
|
+
# (whether selected for the output table or not) as well as any +new_col+
|
612
|
+
# defined earlier in the argument list. The expression string can also
|
613
|
+
# access the instance variable @row, as the row number of the row being
|
614
|
+
# evaluated, and @group, as the group number of the row being evaluated.
|
603
615
|
#
|
604
|
-
# The bare symbol arguments (1) must precede any hash arguments
|
605
|
-
# Each expression results in a column in the resulting
|
606
|
-
#
|
607
|
-
#
|
616
|
+
# The bare symbol arguments +cols+ (1) must precede any hash arguments
|
617
|
+
# +new_cols+ (2 or 3). Each expression results in a column in the resulting
|
618
|
+
# Table in the order given in the argument list. The expressions are
|
619
|
+
# evaluated in left-to-right order as well. The output table preserves any
|
620
|
+
# groups present in the input table.
|
608
621
|
#
|
609
622
|
# tab.select(:ref, :date, :shares) => table with only 3 columns selected
|
610
623
|
# tab.select(:ref, :date, shares: :quantity) => rename :shares->:quantity
|
@@ -676,7 +689,7 @@ module FatTable
|
|
676
689
|
|
677
690
|
# :category: Operators
|
678
691
|
|
679
|
-
# Return
|
692
|
+
# Return a new table with all duplicate rows eliminated. Resets groups. Same
|
680
693
|
# as #uniq.
|
681
694
|
def distinct
|
682
695
|
result = Table.new
|
@@ -697,12 +710,12 @@ module FatTable
|
|
697
710
|
|
698
711
|
# :category: Operators
|
699
712
|
|
700
|
-
# Return a Table that combines this table with +other+ table.
|
701
|
-
#
|
702
|
-
#
|
703
|
-
#
|
704
|
-
#
|
705
|
-
#
|
713
|
+
# Return a Table that combines this table with +other+ table, i.e., return
|
714
|
+
# the union of this table with the other. The headers of this table are used
|
715
|
+
# in the result. There must be the same number of columns of the same type
|
716
|
+
# in the two tables, otherwise an exception will be raised. Duplicates are
|
717
|
+
# eliminated from the result. Any groups present in either Table are
|
718
|
+
# eliminated in the output Table.
|
706
719
|
def union(other)
|
707
720
|
set_operation(other, :+,
|
708
721
|
distinct: true,
|
@@ -753,10 +766,10 @@ module FatTable
|
|
753
766
|
# :category: Operators
|
754
767
|
|
755
768
|
# Return a Table that includes the rows of this table except for any rows
|
756
|
-
# that are the same as those in
|
757
|
-
# set difference between this table
|
769
|
+
# that are the same as those in Table +other+. In other words, return the
|
770
|
+
# set difference between this table and +other+. The headers of this table
|
758
771
|
# are used in the result. There must be the same number of columns of the
|
759
|
-
# same type in the two tables, or an exception will be
|
772
|
+
# same type in the two tables, or an exception will be raised. Duplicates
|
760
773
|
# are eliminated from the result. Any groups present in either Table are
|
761
774
|
# eliminated in the output Table.
|
762
775
|
def except(other)
|
@@ -766,12 +779,12 @@ module FatTable
|
|
766
779
|
# :category: Operators
|
767
780
|
|
768
781
|
# Return a Table that includes the rows of this table except for any rows
|
769
|
-
# that are the same as those in +other
|
782
|
+
# that are the same as those in Table +other+. In other words, return the
|
770
783
|
# set difference between this table an the other. The headers of this table
|
771
784
|
# are used in the result. There must be the same number of columns of the
|
772
785
|
# same type in the two tables, or an exception will be thrown. Duplicates
|
773
|
-
# are not eliminated from the result. Any groups present in either Table
|
774
|
-
# eliminated in the output Table.
|
786
|
+
# are /not/ eliminated from the result. Any groups present in either Table
|
787
|
+
# are eliminated in the output Table.
|
775
788
|
def except_all(other)
|
776
789
|
set_operation(other, :difference, distinct: false)
|
777
790
|
end
|
@@ -814,8 +827,10 @@ module FatTable
|
|
814
827
|
|
815
828
|
# :category: Operators
|
816
829
|
#
|
817
|
-
# Return a table that joins this
|
818
|
-
# expressions
|
830
|
+
# Return a table that joins this Table to +other+ based on one or more join
|
831
|
+
# expressions +exps+ using the +join_type+ in determining the rows of the
|
832
|
+
# result table. There are several possible forms for the join expressions
|
833
|
+
# +exps+:
|
819
834
|
#
|
820
835
|
# 1. If no join expressions are given, the tables will be joined when all
|
821
836
|
# values with the same name in both tables have the same value, a
|
@@ -876,8 +891,8 @@ module FatTable
|
|
876
891
|
# the tables have N and M rows respectively, the joined table will
|
877
892
|
# have N * M rows.
|
878
893
|
#
|
879
|
-
# Any groups present in either Table are eliminated in the output Table.
|
880
|
-
#
|
894
|
+
# Any groups present in either Table are eliminated in the output Table. See
|
895
|
+
# the README for examples.
|
881
896
|
def join(other, *exps, join_type: :inner)
|
882
897
|
unless other.is_a?(Table)
|
883
898
|
raise UserError, 'need other table as first argument to join'
|
@@ -927,31 +942,36 @@ module FatTable
|
|
927
942
|
end
|
928
943
|
|
929
944
|
# :category: Operators
|
930
|
-
|
945
|
+
|
946
|
+
# Perform an inner join as described in FatTable::Table#join.
|
931
947
|
def inner_join(other, *exps)
|
932
948
|
join(other, *exps)
|
933
949
|
end
|
934
950
|
|
935
951
|
# :category: Operators
|
936
|
-
|
952
|
+
|
953
|
+
# Perform a left join as described in FatTable::Table#join.
|
937
954
|
def left_join(other, *exps)
|
938
955
|
join(other, *exps, join_type: :left)
|
939
956
|
end
|
940
957
|
|
941
958
|
# :category: Operators
|
942
|
-
|
959
|
+
|
960
|
+
# Perform a right join as described in FatTable::Table#join.
|
943
961
|
def right_join(other, *exps)
|
944
962
|
join(other, *exps, join_type: :right)
|
945
963
|
end
|
946
964
|
|
947
965
|
# :category: Operators
|
948
|
-
|
966
|
+
|
967
|
+
# Perform a full join as described in FatTable::Table#join.
|
949
968
|
def full_join(other, *exps)
|
950
969
|
join(other, *exps, join_type: :full)
|
951
970
|
end
|
952
971
|
|
953
972
|
# :category: Operators
|
954
|
-
|
973
|
+
|
974
|
+
# Perform a cross join as described in FatTable::Table#join.
|
955
975
|
def cross_join(other)
|
956
976
|
join(other, join_type: :cross)
|
957
977
|
end
|
@@ -1099,23 +1119,24 @@ module FatTable
|
|
1099
1119
|
public
|
1100
1120
|
|
1101
1121
|
# :category: Operators
|
1122
|
+
|
1102
1123
|
# Return a Table with a single row for each group of rows in the input table
|
1103
|
-
# where the value of all columns named as simple symbols are
|
1104
|
-
# other columns are set to the result of aggregating
|
1105
|
-
# column within the group according to a aggregate
|
1106
|
-
# :min, :max, etc.) that you can specify by adding a
|
1107
|
-
# column as the key and a symbol for the aggregate
|
1108
|
-
# For example, consider the following call:
|
1124
|
+
# where the value of all columns +group_cols+ named as simple symbols are
|
1125
|
+
# equal. All other columns, +agg_cols+, are set to the result of aggregating
|
1126
|
+
# the values of that column within the group according to a aggregate
|
1127
|
+
# function (:count, :sum, :min, :max, etc.) that you can specify by adding a
|
1128
|
+
# hash parameter with the column as the key and a symbol for the aggregate
|
1129
|
+
# function as the value. For example, consider the following call:
|
1109
1130
|
#
|
1110
1131
|
# tab.group_by(:date, :code, :price, shares: :sum).
|
1111
1132
|
#
|
1112
|
-
# The first three parameters are simple symbols
|
1113
|
-
# into groups of rows in which the value of :date,
|
1114
|
-
# equal. The shares: hash parameter is
|
1115
|
-
#
|
1116
|
-
#
|
1117
|
-
#
|
1118
|
-
# any hash parameters.
|
1133
|
+
# The first three parameters are simple symbols and count as +group_cols+,
|
1134
|
+
# so the table is divided into groups of rows in which the value of :date,
|
1135
|
+
# :code, and :price are equal. The shares: hash parameter is an +agg_col+
|
1136
|
+
# parameter set to the aggregate function :sum, so it will appear in the
|
1137
|
+
# result as the sum of all the :shares values in each group. Because of the
|
1138
|
+
# way Ruby parses parameters to a method call, all the grouping symbols must
|
1139
|
+
# appear first in the parameter list before any hash parameters.
|
1119
1140
|
def group_by(*group_cols, **agg_cols)
|
1120
1141
|
sorted_tab = order_by(group_cols)
|
1121
1142
|
groups = sorted_tab.rows.group_by do |r|
|
@@ -1152,9 +1173,10 @@ module FatTable
|
|
1152
1173
|
public
|
1153
1174
|
|
1154
1175
|
# :category: Constructors
|
1155
|
-
|
1156
|
-
#
|
1157
|
-
#
|
1176
|
+
|
1177
|
+
# Add a +row+ represented by a Hash having the headers as keys. If +mark:+
|
1178
|
+
# is set true, mark this row as a boundary. All tables should be built
|
1179
|
+
# ultimately using this method as a primitive.
|
1158
1180
|
def add_row(row, mark: false)
|
1159
1181
|
row.each_pair do |k, v|
|
1160
1182
|
key = k.as_sym
|
@@ -1166,12 +1188,14 @@ module FatTable
|
|
1166
1188
|
end
|
1167
1189
|
|
1168
1190
|
# :category: Constructors
|
1169
|
-
|
1191
|
+
|
1192
|
+
# Add a +row+ without marking it as a group boundary.
|
1170
1193
|
def <<(row)
|
1171
1194
|
add_row(row)
|
1172
1195
|
end
|
1173
1196
|
|
1174
1197
|
# :category: Constructors
|
1198
|
+
|
1175
1199
|
# Add a FatTable::Column object +col+ to the table.
|
1176
1200
|
def add_column(col)
|
1177
1201
|
raise "Table already has a column with header '#{col.header}'" if column?(col.header)
|
@@ -1193,12 +1217,12 @@ module FatTable
|
|
1193
1217
|
# :category: Output
|
1194
1218
|
|
1195
1219
|
# Return a string or ruby object according to the format specified in
|
1196
|
-
# FatTable.format
|
1197
|
-
#
|
1198
|
-
# default format for the type
|
1220
|
+
# FatTable.format, passing the +options+ on to the Formatter. If a block is
|
1221
|
+
# given, it will yield a Formatter of the appropriate type to which format
|
1222
|
+
# and footers can be applied. Otherwise, the default format for the type
|
1223
|
+
# will be used.
|
1199
1224
|
#
|
1200
|
-
# :call-seq:
|
1201
|
-
# to_format(options = {}) { |fmt| ... }
|
1225
|
+
# :call-seq: to_format(options = {}) { |fmt| ... }
|
1202
1226
|
#
|
1203
1227
|
def to_format(options = {})
|
1204
1228
|
if block_given?
|
@@ -1211,11 +1235,11 @@ module FatTable
|
|
1211
1235
|
# :category: Output
|
1212
1236
|
|
1213
1237
|
# Return a string or ruby object according to the format type +fmt_type+
|
1214
|
-
# given in the first argument
|
1215
|
-
# :latex, :org, :term, :text, or
|
1216
|
-
#
|
1217
|
-
#
|
1218
|
-
# will be used.
|
1238
|
+
# given in the first argument, passing the +options+ on to the Formatter.
|
1239
|
+
# Valid format types are :psv, :aoa, :aoh, :latex, :org, :term, :text, or
|
1240
|
+
# their string equivalents. If a block is given, it will yield a Formatter
|
1241
|
+
# of the appropriate type to which format and footers can be applied.
|
1242
|
+
# Otherwise, the default format for the type will be used.
|
1219
1243
|
#
|
1220
1244
|
# :call-seq: to_any(fmt_type, options = {}) { |fmt| ... }
|
1221
1245
|
#
|
@@ -1232,12 +1256,13 @@ module FatTable
|
|
1232
1256
|
|
1233
1257
|
# :category: Output
|
1234
1258
|
|
1235
|
-
# Return the table as a string formatted as a pipe-separated values
|
1236
|
-
#
|
1237
|
-
#
|
1238
|
-
#
|
1239
|
-
#
|
1240
|
-
# class PsvFormatter as you might
|
1259
|
+
# Return the table as a string formatted as a pipe-separated values, passing
|
1260
|
+
# the +options+ on to the Formatter. If no block is given, default
|
1261
|
+
# formatting is applies to the table's cells. If a block is given, it yields
|
1262
|
+
# a Formatter to the block to which formatting instructions and footers can
|
1263
|
+
# be added by calling methods on it. Since the pipe-separated format is the
|
1264
|
+
# default format for Formatter, there is no class PsvFormatter as you might
|
1265
|
+
# expect.
|
1241
1266
|
def to_psv(options = {})
|
1242
1267
|
fmt = Formatter.new(self, options)
|
1243
1268
|
yield fmt if block_given?
|
@@ -1246,10 +1271,11 @@ module FatTable
|
|
1246
1271
|
|
1247
1272
|
# :category: Output
|
1248
1273
|
|
1249
|
-
# Return the table as an Array of Array of Strings
|
1250
|
-
#
|
1251
|
-
#
|
1252
|
-
# and footers can be added by
|
1274
|
+
# Return the table as an Array of Array of Strings, passing the +options+ on
|
1275
|
+
# to the AoaFormatter. If no block is given, default formatting is applies
|
1276
|
+
# to the table's cells. If a block is given, it yields an AoaFormatter to
|
1277
|
+
# the block to which formatting instructions and footers can be added by
|
1278
|
+
# calling methods on it.
|
1253
1279
|
def to_aoa(options = {})
|
1254
1280
|
fmt = FatTable::AoaFormatter.new(self, options)
|
1255
1281
|
yield fmt if block_given?
|
@@ -1258,12 +1284,12 @@ module FatTable
|
|
1258
1284
|
|
1259
1285
|
# :category: Output
|
1260
1286
|
|
1261
|
-
# Return the table as an Array of Hashes
|
1262
|
-
#
|
1263
|
-
#
|
1264
|
-
#
|
1265
|
-
#
|
1266
|
-
# on it.
|
1287
|
+
# Return the table as an Array of Hashes, passing the +options+ on to the
|
1288
|
+
# AohFormatter. Each inner hash uses the Table's columns as keys and it
|
1289
|
+
# values are strings representing the cells of the table. If no block is
|
1290
|
+
# given, default formatting is applies to the table's cells. If a block is
|
1291
|
+
# given, it yields an AohFormatter to the block to which formatting
|
1292
|
+
# instructions and footers can be added by calling methods on it.
|
1267
1293
|
def to_aoh(options = {})
|
1268
1294
|
fmt = AohFormatter.new(self, options)
|
1269
1295
|
yield fmt if block_given?
|
@@ -1272,10 +1298,11 @@ module FatTable
|
|
1272
1298
|
|
1273
1299
|
# :category: Output
|
1274
1300
|
|
1275
|
-
# Return the table as a string containing a LaTeX table
|
1276
|
-
#
|
1277
|
-
#
|
1278
|
-
#
|
1301
|
+
# Return the table as a string containing a LaTeX table, passing the
|
1302
|
+
# +options+ on to the LaTeXFormatter. If no block is given, default
|
1303
|
+
# formatting applies to the table's cells. If a block is given, it yields a
|
1304
|
+
# LaTeXFormatter to the block to which formatting instructions and footers
|
1305
|
+
# can be added by calling methods on it.
|
1279
1306
|
def to_latex(options = {})
|
1280
1307
|
fmt = LaTeXFormatter.new(self, options)
|
1281
1308
|
yield fmt if block_given?
|
@@ -1284,10 +1311,11 @@ module FatTable
|
|
1284
1311
|
|
1285
1312
|
# :category: Output
|
1286
1313
|
|
1287
|
-
# Return the table as a string containing an Emacs org-mode table
|
1288
|
-
#
|
1289
|
-
# block is given, it yields a
|
1290
|
-
#
|
1314
|
+
# Return the table as a string containing an Emacs org-mode table, passing
|
1315
|
+
# the +options+ on to the OrgFormatter. If no block is given, default
|
1316
|
+
# formatting applies to the table's cells. If a block is given, it yields a
|
1317
|
+
# OrgFormatter to the block to which formatting instructions and footers can
|
1318
|
+
# be added by calling methods on it.
|
1291
1319
|
def to_org(options = {})
|
1292
1320
|
fmt = OrgFormatter.new(self, options)
|
1293
1321
|
yield fmt if block_given?
|
@@ -1297,10 +1325,10 @@ module FatTable
|
|
1297
1325
|
# :category: Output
|
1298
1326
|
|
1299
1327
|
# Return the table as a string containing ANSI terminal text representing
|
1300
|
-
# table
|
1301
|
-
#
|
1302
|
-
#
|
1303
|
-
# on it.
|
1328
|
+
# table, passing the +options+ on to the TermFormatter. If no block is
|
1329
|
+
# given, default formatting applies to the table's cells. If a block is
|
1330
|
+
# given, it yields a TermFormatter to the block to which formatting
|
1331
|
+
# instructions and footers can be added by calling methods on it.
|
1304
1332
|
def to_term(options = {})
|
1305
1333
|
fmt = TermFormatter.new(self, options)
|
1306
1334
|
yield fmt if block_given?
|
@@ -1309,10 +1337,12 @@ module FatTable
|
|
1309
1337
|
|
1310
1338
|
# :category: Output
|
1311
1339
|
|
1312
|
-
# Return the table as a string containing ordinary text representing table
|
1313
|
-
#
|
1314
|
-
#
|
1315
|
-
#
|
1340
|
+
# Return the table as a string containing ordinary text representing table,
|
1341
|
+
# passing the +options+ on to the TextFormatter. If no block is given,
|
1342
|
+
# default formatting applies to the table's cells. If a block is given, it
|
1343
|
+
# yields a TextFormatter to the block to which formatting instructions and
|
1344
|
+
# footers can be added by calling methods on it.
|
1345
|
+
# @return [String]
|
1316
1346
|
def to_text(options = {})
|
1317
1347
|
fmt = TextFormatter.new(self, options)
|
1318
1348
|
yield fmt if block_given?
|
data/lib/fat_table/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel E. Doherty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: redcarpet
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -142,20 +142,20 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '4.0'
|
146
146
|
- - ">="
|
147
147
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
148
|
+
version: '4.1'
|
149
149
|
type: :runtime
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
153
|
- - "~>"
|
154
154
|
- !ruby/object:Gem::Version
|
155
|
-
version: '
|
155
|
+
version: '4.0'
|
156
156
|
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: '4.1'
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: activesupport
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -280,6 +280,7 @@ files:
|
|
280
280
|
- ".gitignore"
|
281
281
|
- ".rspec"
|
282
282
|
- ".travis.yml"
|
283
|
+
- ".yardopts"
|
283
284
|
- Gemfile
|
284
285
|
- LICENSE.txt
|
285
286
|
- README.org
|
@@ -308,6 +309,7 @@ homepage: https://github.com/ddoherty03/fat_table
|
|
308
309
|
licenses: []
|
309
310
|
metadata:
|
310
311
|
allowed_push_host: https://rubygems.org
|
312
|
+
yard.run: yri
|
311
313
|
post_install_message:
|
312
314
|
rdoc_options: []
|
313
315
|
require_paths:
|
@@ -324,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
324
326
|
version: '0'
|
325
327
|
requirements: []
|
326
328
|
rubyforge_project:
|
327
|
-
rubygems_version: 2.5.
|
329
|
+
rubygems_version: 2.5.2
|
328
330
|
signing_key:
|
329
331
|
specification_version: 4
|
330
332
|
summary: Provides tools for working with tables as a data type.
|