fat_table 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +3 -3
- data/README.org +15 -14
- data/fat_table.gemspec +5 -5
- data/lib/fat_table/formatters/formatter.rb +7 -7
- data/lib/fat_table/table.rb +7 -7
- data/lib/fat_table/version.rb +1 -1
- metadata +28 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e55116f769d702af90918ed1bff4e9d8589d02d746da47d599d3bc155bbd033
|
4
|
+
data.tar.gz: f415408bfb6af7a2752b4f0f9d8d9b80407dd6062a1ba3ff85088886bd23c743
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3344a48f676d18c6e68ff460af5b697b19b8ebba6343d2a604ba62fc65d228b2e6f5563bcbfe7cf852d31db1fe20e9cc7f7952f75c4e6c09a2eb29a8211c9cd
|
7
|
+
data.tar.gz: 615a248fc73a49ca5caad56c12569aa3686aa3450393c4a1305de657fc5a6809a34b1a135a84298373fb49f5fb8461af375abe2d6880319b0a49e9e5ccbd1c2e
|
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
@@ -2,8 +2,8 @@ language: ruby
|
|
2
2
|
before_install:
|
3
3
|
- sudo apt-get -qq update
|
4
4
|
- sudo apt-get install -y texlive-latex-base texlive-latex-recommended
|
5
|
-
before_script:
|
6
|
-
|
5
|
+
# before_script:
|
6
|
+
# - createdb -U travis travis
|
7
7
|
after_failure:
|
8
8
|
- "pwd"
|
9
9
|
- "cat ./spec/tmp/latex.err"
|
@@ -13,9 +13,9 @@ bundler_args: --without debug
|
|
13
13
|
services:
|
14
14
|
- postgresql
|
15
15
|
rvm:
|
16
|
-
- 2.2.2
|
17
16
|
- 2.3
|
18
17
|
- 2.4
|
19
18
|
- 2.5
|
20
19
|
- 2.6
|
20
|
+
- 2.7
|
21
21
|
- ruby-head
|
data/README.org
CHANGED
@@ -963,28 +963,21 @@ You can sort a table on any number of columns with ~order_by~. The ~order_by~
|
|
963
963
|
method takes any number of symbol arguments for the columns to sort on. If you
|
964
964
|
specify more than one column, the sort is performed on the first column, then
|
965
965
|
all columns that are equal with respect to the first column are sorted by the
|
966
|
-
second column, and so on.
|
967
|
-
|
966
|
+
second column, and so on. Ordering is done is ascending order for each of the
|
967
|
+
columns, but can be reversed by adding a '!' to the end a symbol argument.
|
968
|
+
All columns of the input table are included in the output.
|
968
969
|
|
969
|
-
Let's sort our table first by ~:code~, then
|
970
|
+
Let's sort our table first by ~:code~, then in reverse order of ~:date~.
|
970
971
|
|
971
972
|
#+HEADER: :colnames no :session readme :hlines yes :wrap EXAMPLE :exports both
|
972
973
|
#+BEGIN_SRC ruby
|
973
|
-
tab1.order_by(:code, :date) \
|
974
|
+
tab1.order_by(:code, :date!) \
|
974
975
|
.to_aoa
|
975
976
|
#+END_SRC
|
976
977
|
|
977
|
-
#+
|
978
|
+
#+begin_EXAMPLE
|
978
979
|
| Ref | Date | Code | Price | G10 | QP10 | Shares | Lp | Qp | Iplp | Ipqp |
|
979
980
|
|------+------------+------+-------+-----+------+--------+------+-------+--------+--------|
|
980
|
-
| T001 | 2016-11-01 | P | 7.7 | T | F | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
981
|
-
| T002 | 2016-11-01 | P | 7.75 | T | F | 200 | 28 | 172 | 0.2453 | 0.1924 |
|
982
|
-
| T003 | 2016-11-01 | P | 7.5 | F | T | 800 | 112 | 688 | 0.2453 | 0.1924 |
|
983
|
-
| T003 | 2016-11-01 | P | 7.5 | F | T | 800 | 112 | 688 | 0.2453 | 0.1924 |
|
984
|
-
| T008 | 2016-11-01 | P | 7.65 | F | F | 2771 | 393 | 2378 | 0.2453 | 0.1924 |
|
985
|
-
| T009 | 2016-11-01 | P | 7.6 | F | F | 9550 | 1363 | 8187 | 0.2453 | 0.1924 |
|
986
|
-
| T010 | 2016-11-01 | P | 7.55 | F | T | 3175 | 451 | 2724 | 0.2453 | 0.1924 |
|
987
|
-
|------+------------+------+-------+-----+------+--------+------+-------+--------+--------|
|
988
981
|
| T011 | 2016-11-02 | P | 7.425 | T | F | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
989
982
|
| T012 | 2016-11-02 | P | 7.55 | F | F | 4700 | 677 | 4023 | 0.2453 | 0.1924 |
|
990
983
|
| T012 | 2016-11-02 | P | 7.55 | F | F | 4700 | 677 | 4023 | 0.2453 | 0.1924 |
|
@@ -993,12 +986,20 @@ Let's sort our table first by ~:code~, then by ~:date~.
|
|
993
986
|
| T015 | 2016-11-02 | P | 7.75 | F | F | 500 | 72 | 428 | 0.2453 | 0.1924 |
|
994
987
|
| T016 | 2016-11-02 | P | 8.25 | T | T | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
995
988
|
|------+------------+------+-------+-----+------+--------+------+-------+--------+--------|
|
989
|
+
| T001 | 2016-11-01 | P | 7.7 | T | F | 100 | 14 | 86 | 0.2453 | 0.1924 |
|
990
|
+
| T002 | 2016-11-01 | P | 7.75 | T | F | 200 | 28 | 172 | 0.2453 | 0.1924 |
|
991
|
+
| T003 | 2016-11-01 | P | 7.5 | F | T | 800 | 112 | 688 | 0.2453 | 0.1924 |
|
992
|
+
| T003 | 2016-11-01 | P | 7.5 | F | T | 800 | 112 | 688 | 0.2453 | 0.1924 |
|
993
|
+
| T008 | 2016-11-01 | P | 7.65 | F | F | 2771 | 393 | 2378 | 0.2453 | 0.1924 |
|
994
|
+
| T009 | 2016-11-01 | P | 7.6 | F | F | 9550 | 1363 | 8187 | 0.2453 | 0.1924 |
|
995
|
+
| T010 | 2016-11-01 | P | 7.55 | F | T | 3175 | 451 | 2724 | 0.2453 | 0.1924 |
|
996
|
+
|------+------------+------+-------+-----+------+--------+------+-------+--------+--------|
|
996
997
|
| T004 | 2016-11-01 | S | 7.55 | T | F | 6811 | 966 | 5845 | 0.2453 | 0.1924 |
|
997
998
|
| T005 | 2016-11-01 | S | 7.5 | F | F | 4000 | 572 | 3428 | 0.2453 | 0.1924 |
|
998
999
|
| T006 | 2016-11-01 | S | 7.6 | F | T | 1000 | 143 | 857 | 0.2453 | 0.1924 |
|
999
1000
|
| T006 | 2016-11-01 | S | 7.6 | F | T | 1000 | 143 | 857 | 0.2453 | 0.1924 |
|
1000
1001
|
| T007 | 2016-11-01 | S | 7.65 | T | F | 200 | 28 | 172 | 0.2453 | 0.1924 |
|
1001
|
-
#+
|
1002
|
+
#+end_EXAMPLE
|
1002
1003
|
|
1003
1004
|
The interesting thing about ~order_by~ is that, while it ignores groups in its
|
1004
1005
|
input, it adds group boundaries in the output table at those rows where the sort
|
data/fat_table.gemspec
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
lib = File.expand_path('../lib', __FILE__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'fat_table/version'
|
4
|
-
require 'fat_table/patches'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
6
|
spec.name = 'fat_table'
|
@@ -10,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
10
9
|
spec.email = ['ded-law@ddoherty.net']
|
11
10
|
|
12
11
|
spec.summary = 'Provides tools for working with tables as a data type.'
|
13
|
-
spec.description = <<-DESC
|
12
|
+
spec.description = <<-DESC
|
14
13
|
FatTable is a gem that treats tables as a data type. It provides methods for
|
15
14
|
constructing tables from a variety of sources, building them row-by-row,
|
16
15
|
extracting rows, columns, and cells, and performing aggregate operations on
|
@@ -64,19 +63,20 @@ Gem::Specification.new do |spec|
|
|
64
63
|
spec.require_paths = ['lib']
|
65
64
|
spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
|
66
65
|
|
67
|
-
spec.add_development_dependency 'bundler'
|
66
|
+
spec.add_development_dependency 'bundler'
|
68
67
|
spec.add_development_dependency 'byebug'
|
69
68
|
spec.add_development_dependency 'pry'
|
70
69
|
spec.add_development_dependency 'pry-byebug'
|
71
70
|
spec.add_development_dependency 'pry-doc'
|
72
|
-
spec.add_development_dependency 'rake', '~>
|
71
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
73
72
|
spec.add_development_dependency 'redcarpet'
|
74
73
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
75
74
|
spec.add_development_dependency 'rubocop-rspec'
|
75
|
+
spec.add_development_dependency 'rubocop-performance'
|
76
76
|
spec.add_development_dependency 'simplecov'
|
77
77
|
|
78
78
|
spec.add_runtime_dependency 'activesupport', '>3.0'
|
79
|
-
spec.add_runtime_dependency 'fat_core', '
|
79
|
+
spec.add_runtime_dependency 'fat_core', '>= 4.1'
|
80
80
|
spec.add_runtime_dependency 'mysql2'
|
81
81
|
spec.add_runtime_dependency 'pg'
|
82
82
|
spec.add_runtime_dependency 'rainbow'
|
@@ -247,7 +247,7 @@ module FatTable
|
|
247
247
|
cols.each do |c|
|
248
248
|
hsh[c] = :avg
|
249
249
|
end
|
250
|
-
footer('Average', hsh)
|
250
|
+
footer('Average', **hsh)
|
251
251
|
end
|
252
252
|
|
253
253
|
# :category: Footers
|
@@ -258,7 +258,7 @@ module FatTable
|
|
258
258
|
cols.each do |c|
|
259
259
|
hsh[c] = :avg
|
260
260
|
end
|
261
|
-
gfooter('Group Average', hsh)
|
261
|
+
gfooter('Group Average', **hsh)
|
262
262
|
end
|
263
263
|
|
264
264
|
# :category: Footers
|
@@ -270,7 +270,7 @@ module FatTable
|
|
270
270
|
cols.each do |c|
|
271
271
|
hsh[c] = :min
|
272
272
|
end
|
273
|
-
footer('Minimum', hsh)
|
273
|
+
footer('Minimum', **hsh)
|
274
274
|
end
|
275
275
|
|
276
276
|
# :category: Footers
|
@@ -282,7 +282,7 @@ module FatTable
|
|
282
282
|
cols.each do |c|
|
283
283
|
hsh[c] = :min
|
284
284
|
end
|
285
|
-
gfooter('Group Minimum', hsh)
|
285
|
+
gfooter('Group Minimum', **hsh)
|
286
286
|
end
|
287
287
|
|
288
288
|
# :category: Footers
|
@@ -294,7 +294,7 @@ module FatTable
|
|
294
294
|
cols.each do |c|
|
295
295
|
hsh[c] = :max
|
296
296
|
end
|
297
|
-
footer('Maximum', hsh)
|
297
|
+
footer('Maximum', **hsh)
|
298
298
|
end
|
299
299
|
|
300
300
|
# :category: Footers
|
@@ -306,7 +306,7 @@ module FatTable
|
|
306
306
|
cols.each do |c|
|
307
307
|
hsh[c] = :max
|
308
308
|
end
|
309
|
-
gfooter('Group Maximum', hsh)
|
309
|
+
gfooter('Group Maximum', **hsh)
|
310
310
|
end
|
311
311
|
|
312
312
|
# :category: Formatting
|
@@ -418,7 +418,7 @@ module FatTable
|
|
418
418
|
# \n\[niltext\]:: render a nil item with the given text.
|
419
419
|
def format(**fmts)
|
420
420
|
%i[header bfirst gfirst body footer gfooter].each do |loc|
|
421
|
-
format_for(loc, fmts)
|
421
|
+
format_for(loc, **fmts)
|
422
422
|
end
|
423
423
|
self
|
424
424
|
end
|
data/lib/fat_table/table.rb
CHANGED
@@ -1369,7 +1369,7 @@ module FatTable
|
|
1369
1369
|
# default format for Formatter, there is no class PsvFormatter as you might
|
1370
1370
|
# expect.
|
1371
1371
|
def to_psv(options = {})
|
1372
|
-
fmt = Formatter.new(self, options)
|
1372
|
+
fmt = Formatter.new(self, **options)
|
1373
1373
|
yield fmt if block_given?
|
1374
1374
|
fmt.output
|
1375
1375
|
end
|
@@ -1382,7 +1382,7 @@ module FatTable
|
|
1382
1382
|
# the block to which formatting instructions and footers can be added by
|
1383
1383
|
# calling methods on it.
|
1384
1384
|
def to_aoa(options = {})
|
1385
|
-
fmt = FatTable::AoaFormatter.new(self, options)
|
1385
|
+
fmt = FatTable::AoaFormatter.new(self, **options)
|
1386
1386
|
yield fmt if block_given?
|
1387
1387
|
fmt.output
|
1388
1388
|
end
|
@@ -1396,7 +1396,7 @@ module FatTable
|
|
1396
1396
|
# given, it yields an AohFormatter to the block to which formatting
|
1397
1397
|
# instructions and footers can be added by calling methods on it.
|
1398
1398
|
def to_aoh(options = {})
|
1399
|
-
fmt = AohFormatter.new(self, options)
|
1399
|
+
fmt = AohFormatter.new(self, **options)
|
1400
1400
|
yield fmt if block_given?
|
1401
1401
|
fmt.output
|
1402
1402
|
end
|
@@ -1409,7 +1409,7 @@ module FatTable
|
|
1409
1409
|
# LaTeXFormatter to the block to which formatting instructions and footers
|
1410
1410
|
# can be added by calling methods on it.
|
1411
1411
|
def to_latex(options = {})
|
1412
|
-
fmt = LaTeXFormatter.new(self, options)
|
1412
|
+
fmt = LaTeXFormatter.new(self, **options)
|
1413
1413
|
yield fmt if block_given?
|
1414
1414
|
fmt.output
|
1415
1415
|
end
|
@@ -1422,7 +1422,7 @@ module FatTable
|
|
1422
1422
|
# OrgFormatter to the block to which formatting instructions and footers can
|
1423
1423
|
# be added by calling methods on it.
|
1424
1424
|
def to_org(options = {})
|
1425
|
-
fmt = OrgFormatter.new(self, options)
|
1425
|
+
fmt = OrgFormatter.new(self, **options)
|
1426
1426
|
yield fmt if block_given?
|
1427
1427
|
fmt.output
|
1428
1428
|
end
|
@@ -1435,7 +1435,7 @@ module FatTable
|
|
1435
1435
|
# given, it yields a TermFormatter to the block to which formatting
|
1436
1436
|
# instructions and footers can be added by calling methods on it.
|
1437
1437
|
def to_term(options = {})
|
1438
|
-
fmt = TermFormatter.new(self, options)
|
1438
|
+
fmt = TermFormatter.new(self, **options)
|
1439
1439
|
yield fmt if block_given?
|
1440
1440
|
fmt.output
|
1441
1441
|
end
|
@@ -1449,7 +1449,7 @@ module FatTable
|
|
1449
1449
|
# footers can be added by calling methods on it.
|
1450
1450
|
# @return [String]
|
1451
1451
|
def to_text(options = {})
|
1452
|
-
fmt = TextFormatter.new(self, options)
|
1452
|
+
fmt = TextFormatter.new(self, **options)
|
1453
1453
|
yield fmt if block_given?
|
1454
1454
|
fmt.output
|
1455
1455
|
end
|
data/lib/fat_table/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
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.11
|
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: 2019-
|
11
|
+
date: 2019-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: byebug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '13.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '13.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: redcarpet
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-performance
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: simplecov
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,9 +182,6 @@ dependencies:
|
|
168
182
|
name: fat_core
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '4.0'
|
174
185
|
- - ">="
|
175
186
|
- !ruby/object:Gem::Version
|
176
187
|
version: '4.1'
|
@@ -178,9 +189,6 @@ dependencies:
|
|
178
189
|
prerelease: false
|
179
190
|
version_requirements: !ruby/object:Gem::Requirement
|
180
191
|
requirements:
|
181
|
-
- - "~>"
|
182
|
-
- !ruby/object:Gem::Version
|
183
|
-
version: '4.0'
|
184
192
|
- - ">="
|
185
193
|
- !ruby/object:Gem::Version
|
186
194
|
version: '4.1'
|
@@ -264,7 +272,8 @@ description: |2
|
|
264
272
|
duplicate rows, group_by for aggregating multiple rows into single rows and
|
265
273
|
applying column aggregate methods to ungrouped columns, a collection of join
|
266
274
|
methods for combining tables, and more.
|
267
|
-
|
275
|
+
|
276
|
+
Furthermore, FatTable provides methods for formatting tables and producing
|
268
277
|
output that targets various output media: text, ANSI terminals, ruby data
|
269
278
|
structures, LaTeX tables, Emacs org-mode tables, and more. The formatting
|
270
279
|
methods can specify cell formatting in a way that is uniform across all the
|
@@ -272,7 +281,8 @@ description: |2
|
|
272
281
|
including group footers. FatTable applies formatting directives to the extent
|
273
282
|
they makes sense for the output medium and treats other formatting directives as
|
274
283
|
no-ops.
|
275
|
-
|
284
|
+
|
285
|
+
FatTable can be used to perform operations on data that are naturally best
|
276
286
|
conceived of as tables, which in my experience is quite often. It can also serve
|
277
287
|
as a foundation for providing reporting functions where flexibility about the
|
278
288
|
output medium can be quite useful. Finally FatTable can be used within Emacs
|
@@ -290,6 +300,7 @@ extra_rdoc_files: []
|
|
290
300
|
files:
|
291
301
|
- ".gitignore"
|
292
302
|
- ".rspec"
|
303
|
+
- ".rubocop.yml"
|
293
304
|
- ".travis.yml"
|
294
305
|
- ".yardopts"
|
295
306
|
- Gemfile
|
@@ -338,7 +349,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
338
349
|
- !ruby/object:Gem::Version
|
339
350
|
version: '0'
|
340
351
|
requirements: []
|
341
|
-
rubygems_version: 3.
|
352
|
+
rubygems_version: 3.1.2
|
342
353
|
signing_key:
|
343
354
|
specification_version: 4
|
344
355
|
summary: Provides tools for working with tables as a data type.
|