tty-table 0.11.0 → 0.12.0
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/CHANGELOG.md +13 -0
- data/LICENSE.txt +1 -1
- data/README.md +104 -98
- data/lib/tty-table.rb +1 -1
- data/lib/tty/table.rb +70 -34
- data/lib/tty/table/alignment_set.rb +1 -3
- data/lib/tty/table/border.rb +50 -57
- data/lib/tty/table/border/ascii.rb +16 -16
- data/lib/tty/table/border/null.rb +19 -22
- data/lib/tty/table/border/row_line.rb +3 -2
- data/lib/tty/table/border/unicode.rb +16 -16
- data/lib/tty/table/border_dsl.rb +24 -22
- data/lib/tty/table/border_options.rb +32 -27
- data/lib/tty/table/column_constraint.rb +12 -9
- data/lib/tty/table/columns.rb +6 -6
- data/lib/tty/table/field.rb +46 -28
- data/lib/tty/table/header.rb +5 -5
- data/lib/tty/table/indentation.rb +7 -4
- data/lib/tty/table/operation/alignment.rb +1 -1
- data/lib/tty/table/operation/escape.rb +1 -2
- data/lib/tty/table/operation/padding.rb +1 -1
- data/lib/tty/table/operation/truncation.rb +1 -1
- data/lib/tty/table/operation/wrapped.rb +1 -1
- data/lib/tty/table/options.rb +1 -1
- data/lib/tty/table/orientation.rb +4 -4
- data/lib/tty/table/renderer.rb +8 -8
- data/lib/tty/table/renderer/ascii.rb +2 -2
- data/lib/tty/table/renderer/basic.rb +37 -40
- data/lib/tty/table/renderer/unicode.rb +1 -1
- data/lib/tty/table/row.rb +7 -7
- data/lib/tty/table/validatable.rb +23 -7
- data/lib/tty/table/version.rb +1 -1
- metadata +23 -272
- data/Rakefile +0 -10
- data/examples/alignment.rb +0 -10
- data/examples/basic.rb +0 -6
- data/examples/orientation.rb +0 -13
- data/examples/padding.rb +0 -15
- data/examples/resize.rb +0 -15
- data/spec/spec_helper.rb +0 -50
- data/spec/unit/access_spec.rb +0 -84
- data/spec/unit/add_row_spec.rb +0 -26
- data/spec/unit/alignment_set/each_spec.rb +0 -15
- data/spec/unit/alignment_set/new_spec.rb +0 -25
- data/spec/unit/alignment_set/to_ary_spec.rb +0 -12
- data/spec/unit/alignment_spec.rb +0 -69
- data/spec/unit/border/ascii/rendering_spec.rb +0 -88
- data/spec/unit/border/new_spec.rb +0 -25
- data/spec/unit/border/null/rendering_spec.rb +0 -128
- data/spec/unit/border/options/from_spec.rb +0 -36
- data/spec/unit/border/options/new_spec.rb +0 -12
- data/spec/unit/border/unicode/rendering_spec.rb +0 -61
- data/spec/unit/border_options/new_spec.rb +0 -18
- data/spec/unit/border_options/update_spec.rb +0 -16
- data/spec/unit/column_constraint/enforce_spec.rb +0 -68
- data/spec/unit/column_constraint/widths_spec.rb +0 -33
- data/spec/unit/columns/extract_widths_spec.rb +0 -41
- data/spec/unit/columns/total_width_spec.rb +0 -11
- data/spec/unit/columns/widths_from_spec.rb +0 -49
- data/spec/unit/data_spec.rb +0 -10
- data/spec/unit/each_spec.rb +0 -24
- data/spec/unit/each_with_index_spec.rb +0 -49
- data/spec/unit/empty_spec.rb +0 -21
- data/spec/unit/eql_spec.rb +0 -32
- data/spec/unit/field/equality_spec.rb +0 -49
- data/spec/unit/field/length_spec.rb +0 -33
- data/spec/unit/field/lines_spec.rb +0 -19
- data/spec/unit/field/new_spec.rb +0 -27
- data/spec/unit/field/width_spec.rb +0 -21
- data/spec/unit/filter_spec.rb +0 -20
- data/spec/unit/header/call_spec.rb +0 -28
- data/spec/unit/header/color_spec.rb +0 -17
- data/spec/unit/header/equality_spec.rb +0 -49
- data/spec/unit/header/height_spec.rb +0 -25
- data/spec/unit/header/new_spec.rb +0 -13
- data/spec/unit/header/set_spec.rb +0 -18
- data/spec/unit/header/to_ary_spec.rb +0 -12
- data/spec/unit/header_spec.rb +0 -11
- data/spec/unit/indentation/indent_spec.rb +0 -15
- data/spec/unit/new_spec.rb +0 -71
- data/spec/unit/operation/alignment/call_spec.rb +0 -37
- data/spec/unit/operation/escape/call_spec.rb +0 -13
- data/spec/unit/operation/filter/call_spec.rb +0 -14
- data/spec/unit/operation/truncation/call_spec.rb +0 -28
- data/spec/unit/operation/wrapped/call_spec.rb +0 -38
- data/spec/unit/operations/new_spec.rb +0 -28
- data/spec/unit/options/access_spec.rb +0 -12
- data/spec/unit/options_spec.rb +0 -23
- data/spec/unit/orientation_spec.rb +0 -143
- data/spec/unit/padding_spec.rb +0 -115
- data/spec/unit/properties_spec.rb +0 -23
- data/spec/unit/render_repeat_spec.rb +0 -39
- data/spec/unit/render_spec.rb +0 -61
- data/spec/unit/render_with_spec.rb +0 -104
- data/spec/unit/renderer/ascii/coloring_spec.rb +0 -83
- data/spec/unit/renderer/ascii/indentation_spec.rb +0 -39
- data/spec/unit/renderer/ascii/multiline_spec.rb +0 -99
- data/spec/unit/renderer/ascii/padding_spec.rb +0 -115
- data/spec/unit/renderer/ascii/render_spec.rb +0 -66
- data/spec/unit/renderer/ascii/resizing_spec.rb +0 -112
- data/spec/unit/renderer/ascii/separator_spec.rb +0 -38
- data/spec/unit/renderer/basic/alignment_spec.rb +0 -86
- data/spec/unit/renderer/basic/coloring_spec.rb +0 -59
- data/spec/unit/renderer/basic/extract_column_widths_spec.rb +0 -26
- data/spec/unit/renderer/basic/filter_spec.rb +0 -51
- data/spec/unit/renderer/basic/indentation_spec.rb +0 -46
- data/spec/unit/renderer/basic/multiline_spec.rb +0 -72
- data/spec/unit/renderer/basic/new_spec.rb +0 -24
- data/spec/unit/renderer/basic/options_spec.rb +0 -50
- data/spec/unit/renderer/basic/padding_spec.rb +0 -74
- data/spec/unit/renderer/basic/render_spec.rb +0 -55
- data/spec/unit/renderer/basic/resizing_spec.rb +0 -94
- data/spec/unit/renderer/basic/separator_spec.rb +0 -41
- data/spec/unit/renderer/basic/single_row_separator_spec.rb +0 -80
- data/spec/unit/renderer/basic/truncation_spec.rb +0 -33
- data/spec/unit/renderer/basic/wrapping_spec.rb +0 -38
- data/spec/unit/renderer/border_spec.rb +0 -102
- data/spec/unit/renderer/render_spec.rb +0 -34
- data/spec/unit/renderer/select_spec.rb +0 -20
- data/spec/unit/renderer/unicode/coloring_spec.rb +0 -68
- data/spec/unit/renderer/unicode/indentation_spec.rb +0 -39
- data/spec/unit/renderer/unicode/padding_spec.rb +0 -59
- data/spec/unit/renderer/unicode/render_spec.rb +0 -66
- data/spec/unit/renderer/unicode/separator_spec.rb +0 -36
- data/spec/unit/renderer_spec.rb +0 -17
- data/spec/unit/rotate_spec.rb +0 -84
- data/spec/unit/row/access_spec.rb +0 -23
- data/spec/unit/row/call_spec.rb +0 -43
- data/spec/unit/row/data_spec.rb +0 -24
- data/spec/unit/row/each_spec.rb +0 -29
- data/spec/unit/row/equality_spec.rb +0 -71
- data/spec/unit/row/height_spec.rb +0 -25
- data/spec/unit/row/new_spec.rb +0 -39
- data/spec/unit/row/to_ary_spec.rb +0 -12
- data/spec/unit/to_s_spec.rb +0 -56
- data/spec/unit/transformation/extract_tuples_spec.rb +0 -33
- data/spec/unit/utf_spec.rb +0 -31
- data/spec/unit/validatable/validate_options_spec.rb +0 -31
- data/spec/unit/validatable_spec.rb +0 -30
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
- data/tty-table.gemspec +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1de8ba17e3ea8c4b575292757c2d9908abbbeec7511fda9692b4718bb423fbd
|
4
|
+
data.tar.gz: 5208f9766c7309b44f97b54282b6cd9bb7d5bf8966fdd8db337bd653e65696af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7547f09416d4e89f7292c6505554c3bbde7f6b83531acbad831a8e0ba96012c2e806611f9a0162e97610e3ed85c98d67b3b96f936e279546145d44ae74cbdbf2
|
7
|
+
data.tar.gz: 3a7daadb0f83bd72dc99c3992b1b9f82684714b20e9bcb55b16bb8a3eee87cd3e2c88bd175eff5af5d7dc5f270cc82e386979fd90cd4d3ec06e6ac6af73c14fd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## [v0.12.0] - 2020-09-20
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
* Optimize adding rows by Tim Craft(@timcraft)
|
7
|
+
* Remove the equatable and necromancer dependencies
|
8
|
+
* Update the pastel, tty-screen and strings dependencies
|
9
|
+
* Change Border to use BorderDSL exclusively for handling options
|
10
|
+
|
11
|
+
### Fixed
|
12
|
+
* Fix resize option raising an error for small terminal sizes by Katelyn Schiesser(@slowbro)
|
13
|
+
* Fix Table::Indentation to check for map method support by @deemytch
|
14
|
+
|
3
15
|
## [v0.11.0] - 2019-08-01
|
4
16
|
|
5
17
|
### Add
|
@@ -103,6 +115,7 @@
|
|
103
115
|
|
104
116
|
* Initial implementation and release
|
105
117
|
|
118
|
+
[v0.12.0]: https://github.com/piotrmurach/tty-table/compare/v0.11.0...v0.12.0
|
106
119
|
[v0.11.0]: https://github.com/piotrmurach/tty-table/compare/v0.10.0...v0.11.0
|
107
120
|
[v0.10.0]: https://github.com/piotrmurach/tty-table/compare/v0.9.0...v0.10.0
|
108
121
|
[v0.9.0]: https://github.com/piotrmurach/tty-table/compare/v0.8.0...v0.9.0
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<div align="center">
|
2
|
-
<a href="https://
|
2
|
+
<a href="https://ttytoolkit.org" target="_blank"><img width="130" src="https://github.com/piotrmurach/tty/blob/master/images/tty.png" alt="TTY Toolkit logo" /></a>
|
3
3
|
</div>
|
4
4
|
|
5
5
|
# TTY::Table [][gitter]
|
@@ -36,7 +36,7 @@
|
|
36
36
|
Add this line to your application's Gemfile:
|
37
37
|
|
38
38
|
```ruby
|
39
|
-
gem
|
39
|
+
gem "tty-table"
|
40
40
|
```
|
41
41
|
|
42
42
|
And then execute:
|
@@ -58,9 +58,9 @@ Or install it yourself as:
|
|
58
58
|
* [3. Rendering](#3-rendering)
|
59
59
|
* [3.1 Render](#31-render)
|
60
60
|
* [3.2 Renderer](#32-renderer)
|
61
|
-
* [3.
|
62
|
-
* [3.
|
63
|
-
* [3.
|
61
|
+
* [3.2.1 Basic renderer](#321-basic-renderer)
|
62
|
+
* [3.2.2 ASCII renderer](#322-ascii-renderer)
|
63
|
+
* [3.2.3 Unicode renderer](#323-unicode-renderer)
|
64
64
|
* [3.3 Options](#33-options)
|
65
65
|
* [3.4 Alignment](#34-alignment)
|
66
66
|
* [3.5 Border](#35-border)
|
@@ -76,16 +76,16 @@ Or install it yourself as:
|
|
76
76
|
|
77
77
|
## 1. Usage
|
78
78
|
|
79
|
-
First, provide **TTY::Table** with headers and
|
79
|
+
First, provide **TTY::Table** with data, for example, two headers and two rows:
|
80
80
|
|
81
81
|
```ruby
|
82
|
-
table = TTY::Table.new
|
82
|
+
table = TTY::Table.new(["header1","header2"], [["a1", "a2"], ["b1", "b2"]])
|
83
83
|
```
|
84
84
|
|
85
|
-
Then
|
85
|
+
Then to print to the console, call the `render` method with border type as a first argument:
|
86
86
|
|
87
87
|
```ruby
|
88
|
-
table.render(:ascii)
|
88
|
+
puts table.render(:ascii)
|
89
89
|
# =>
|
90
90
|
# +-------+-------+
|
91
91
|
# |header1|header2|
|
@@ -103,39 +103,39 @@ table.render(:ascii)
|
|
103
103
|
**TTY::Table** can be created in variety of ways. The easiest way is to pass 2-dimensional array:
|
104
104
|
|
105
105
|
```ruby
|
106
|
-
table = TTY::Table[[
|
107
|
-
table = TTY::Table.new
|
108
|
-
table = TTY::Table.new
|
106
|
+
table = TTY::Table[["a1", "a2"], ["b1", "b2"]]
|
107
|
+
table = TTY::Table.new([["a1", "a2"], ["b1", "b2"]])
|
108
|
+
table = TTY::Table.new(rows: [["a1", "a2"], ["b1", "b2"]])
|
109
109
|
```
|
110
110
|
|
111
|
-
Alternatively you can specify rows one by one inside block:
|
111
|
+
Alternatively you can specify the rows one by one inside a block:
|
112
112
|
|
113
113
|
```ruby
|
114
114
|
table = TTY::Table.new do |t|
|
115
|
-
t << [
|
116
|
-
t << [
|
115
|
+
t << ["a1", "a2"]
|
116
|
+
t << ["b1", "b2"]
|
117
117
|
end
|
118
118
|
```
|
119
119
|
|
120
|
-
You can add rows of data after initialization:
|
120
|
+
You can add rows of data after initialization with `<<` operator:
|
121
121
|
|
122
122
|
```ruby
|
123
123
|
table = TTY::Table.new
|
124
|
-
table << [
|
125
|
-
table << [
|
124
|
+
table << ["a1","a2"]
|
125
|
+
table << ["b1","b2"]
|
126
126
|
```
|
127
127
|
|
128
|
-
In addition to rows you can specify table header:
|
128
|
+
In addition to rows, you can specify table header:
|
129
129
|
|
130
130
|
```ruby
|
131
|
-
table = TTY::Table.new
|
132
|
-
table = TTY::Table.new
|
131
|
+
table = TTY::Table.new(["h1", "h2"], [["a1", "a2"], ["b1", "b2"]])
|
132
|
+
table = TTY::Table.new(header: ["h1", "h2"], rows: [["a1", "a2"], ["b1", "b2"]])
|
133
133
|
```
|
134
134
|
|
135
|
-
|
135
|
+
You can also mix header with rows inside a hash like so:
|
136
136
|
|
137
137
|
```ruby
|
138
|
-
table = TTY::Table.new
|
138
|
+
table = TTY::Table.new([{"h1" => ["a1", "a2"], "h2" => ["b1", "b2"]}])
|
139
139
|
```
|
140
140
|
|
141
141
|
### 2.2 Iteration
|
@@ -143,9 +143,9 @@ table = TTY::Table.new [{'h1' => ['a1', 'a2'], 'h2' => ['b1', 'b2']}]
|
|
143
143
|
Table behaves like an Array so `<<`, `each` and familiar methods can be used:
|
144
144
|
|
145
145
|
```ruby
|
146
|
-
table << [
|
147
|
-
table << [
|
148
|
-
table << [
|
146
|
+
table << ["a1", "a2", "a3"]
|
147
|
+
table << ["b1", "b2", "b3"]
|
148
|
+
table << ["a1", "a2"] << ["b1", "b2"] # chain rows assignment
|
149
149
|
```
|
150
150
|
|
151
151
|
In order to iterate over table rows including headers do:
|
@@ -160,30 +160,30 @@ table.each_with_index { |row, index| ... } # iterate over rows with an index
|
|
160
160
|
In order to reference the row at `index` do:
|
161
161
|
|
162
162
|
```ruby
|
163
|
-
table = TTY::Table.new [[
|
164
|
-
table[0] # => [
|
165
|
-
table.row(0) # => [
|
163
|
+
table = TTY::Table.new [["a1","a2"], ["b1","b2"]]
|
164
|
+
table[0] # => ["a1","a2"]
|
165
|
+
table.row(0) # => ["a1","a2"]
|
166
166
|
table.row(i) { |row| ... } # return array for row(i)
|
167
167
|
```
|
168
168
|
|
169
169
|
Negative indices count backwards from the end of table data (`-1` is the last element):
|
170
170
|
|
171
171
|
```ruby
|
172
|
-
table[-1] # => [
|
172
|
+
table[-1] # => ["b1","b2"]
|
173
173
|
```
|
174
174
|
|
175
175
|
To reference element at given row(i) and column(j) do:
|
176
176
|
|
177
177
|
```ruby
|
178
178
|
table[i, j] # return element at row(i) and column(j)
|
179
|
-
table[0,0] # =>
|
179
|
+
table[0,0] # => "a1"
|
180
180
|
```
|
181
181
|
|
182
182
|
To specifically reference column(j) do:
|
183
183
|
|
184
184
|
```ruby
|
185
185
|
table.column(j) { ... } # return array for column(j)
|
186
|
-
table.column(0) # => [
|
186
|
+
table.column(0) # => ["a1","b1"]
|
187
187
|
table.column(name) # return array for column(name), name of header
|
188
188
|
```
|
189
189
|
|
@@ -210,7 +210,7 @@ table.size # return an array of [row_size, column_size]
|
|
210
210
|
Given a table:
|
211
211
|
|
212
212
|
```ruby
|
213
|
-
table = TTY::Table.new
|
213
|
+
table = TTY::Table.new(["header1","header2"], [["a1", "a2"], ["b1", "b2"]])
|
214
214
|
```
|
215
215
|
|
216
216
|
Once you have an instance of `TTY::Table` you can decorate the content using the `render` method. In order to display a basic whitespace delimited view do:
|
@@ -246,7 +246,7 @@ end
|
|
246
246
|
Given a table of data:
|
247
247
|
|
248
248
|
```ruby
|
249
|
-
table = TTY::Table.new [
|
249
|
+
table = TTY::Table.new ["header1","header2"], [["a1", "a2"], ["b1", "b2"]]
|
250
250
|
```
|
251
251
|
|
252
252
|
You can create a special renderer for it:
|
@@ -347,25 +347,16 @@ table.render(:unicode)
|
|
347
347
|
|
348
348
|
Rendering of **TTY-Table** includes numerous customization options:
|
349
349
|
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
# when false will escape special characters
|
361
|
-
padding # array of integers to set table fields padding,
|
362
|
-
# by default [0,0,0,0]
|
363
|
-
resize # if true will expand/shrink table column sizes to match
|
364
|
-
# the terminal width, otherwise if false will rotate
|
365
|
-
# table vertically. By default set to false
|
366
|
-
width # constrain the table total width, by default dynamically
|
367
|
-
# calculated based on content and terminal size
|
368
|
-
```
|
350
|
+
* `:alignments` - array of cell alignments out of `:left`, `:center` and `:righit`. Defaults to `:left`.
|
351
|
+
* `:border` - hash of border options out of `:characters`, `:style` and `:separator`
|
352
|
+
* `:border_class` - a type of border to use such as `TTY::Table::Border::Null`, `TTY::Table::Border::ASCII` and `TTY::Table::Border::Unicode`
|
353
|
+
* `:column_widths` - array of maximum column widths
|
354
|
+
* `:filter` - a `proc` object that is applied to every field in a row
|
355
|
+
* `:indent` - indentation applied to rendered table, by default 0
|
356
|
+
* `:multiline` - when `true` will wrap text at new line or column width, when `false` will escape special characters
|
357
|
+
* `:padding` - array of integers to set table fields padding. Defaults to `[0,0,0,0]`.
|
358
|
+
* `:resize` - when `true` will expand/shrink table column sizes to match the terminal width, otherwise when `false` will rotate table vertically. Defaults to `false`.
|
359
|
+
* `:width` - constrains the table total width. Defaults to value automatically calculated based on the content and terminal size.
|
369
360
|
|
370
361
|
The `render` method can accept as a second argument the above options either as hash value:
|
371
362
|
|
@@ -373,11 +364,11 @@ The `render` method can accept as a second argument the above options either as
|
|
373
364
|
table.render(:basic, alignments: [:left, :center])
|
374
365
|
```
|
375
366
|
|
376
|
-
|
367
|
+
Or inside a block as a property:
|
377
368
|
|
378
369
|
```ruby
|
379
370
|
table.render(:basic) do |renderer|
|
380
|
-
renderer.alignments= [:left, :center]
|
371
|
+
renderer.alignments = [:left, :center]
|
381
372
|
end
|
382
373
|
```
|
383
374
|
|
@@ -385,10 +376,10 @@ end
|
|
385
376
|
|
386
377
|
By default all columns are `:left` aligned.
|
387
378
|
|
388
|
-
You can align each column
|
379
|
+
You can align each column individually by passing `:alignments` option to table renderer:
|
389
380
|
|
390
381
|
```ruby
|
391
|
-
table.render
|
382
|
+
table.render(:ascii, alignments: [:center, :right])
|
392
383
|
# =>
|
393
384
|
# +-------+-------+
|
394
385
|
# |header1|header2|
|
@@ -398,10 +389,10 @@ table.render :ascii, alignments: [:center, :right]
|
|
398
389
|
# +-------+-------+
|
399
390
|
```
|
400
391
|
|
401
|
-
Alternatively you can align all columns with
|
392
|
+
Alternatively you can align all columns with `:alignment` option:
|
402
393
|
|
403
394
|
```ruby
|
404
|
-
table.render
|
395
|
+
table.render(:ascii, alignment: [:center])
|
405
396
|
# =>
|
406
397
|
# +-------+-------+
|
407
398
|
# |header1|header2|
|
@@ -414,9 +405,9 @@ table.render :ascii, alignment: [:center]
|
|
414
405
|
If you require a more granular alignment you can align individual fields in a row by passing `:alignment` option like so:
|
415
406
|
|
416
407
|
```ruby
|
417
|
-
table = TTY::Table.new
|
418
|
-
table << [{value:
|
419
|
-
table << [
|
408
|
+
table = TTY::Table.new(header: ["header1", "header2"])
|
409
|
+
table << [{value: "a1", alignment: :right}, "a2"]
|
410
|
+
table << ["b1", {value: "b2", alignment: :center}]
|
420
411
|
```
|
421
412
|
|
422
413
|
and then simply render:
|
@@ -437,7 +428,7 @@ table.render(:ascii)
|
|
437
428
|
To print border around data table you need to specify `renderer` type out of `basic`, `ascii`, `unicode`. By default `basic` is used. For instance, to output unicode border:
|
438
429
|
|
439
430
|
```ruby
|
440
|
-
table = TTY::Table.new [
|
431
|
+
table = TTY::Table.new ["header1", "header2"], [["a1", "a2"], ["b1", "b2"]]
|
441
432
|
table.render :unicode
|
442
433
|
# =>
|
443
434
|
# ┌───────┬───────┐
|
@@ -480,11 +471,11 @@ The following are available border parts:
|
|
480
471
|
Using the above border parts you can create your own border with the `border` helper:
|
481
472
|
|
482
473
|
```ruby
|
483
|
-
table = TTY::Table.new [
|
474
|
+
table = TTY::Table.new ["header1", "header2"], [["a1", "a2"], ["b1", "b2"]
|
484
475
|
table.render do |renderer|
|
485
476
|
renderer.border do
|
486
|
-
mid
|
487
|
-
mid_mid
|
477
|
+
mid "="
|
478
|
+
mid_mid " "
|
488
479
|
end
|
489
480
|
end
|
490
481
|
# =>
|
@@ -501,13 +492,13 @@ You can also create your own custom border by subclassing `TTY::Table::Border` a
|
|
501
492
|
```ruby
|
502
493
|
class MyBorder < TTY::Table::Border
|
503
494
|
def_border do
|
504
|
-
left
|
505
|
-
center
|
506
|
-
right
|
507
|
-
bottom
|
508
|
-
bottom_mid
|
509
|
-
bottom_left
|
510
|
-
bottom_right
|
495
|
+
left "$"
|
496
|
+
center "$"
|
497
|
+
right "$"
|
498
|
+
bottom " "
|
499
|
+
bottom_mid "*"
|
500
|
+
bottom_left "*"
|
501
|
+
bottom_right "*"
|
511
502
|
end
|
512
503
|
end
|
513
504
|
```
|
@@ -515,7 +506,7 @@ end
|
|
515
506
|
Next pass the border class to your table instance `render_with` method
|
516
507
|
|
517
508
|
```ruby
|
518
|
-
table = TTY::Table.new [
|
509
|
+
table = TTY::Table.new ["header1", "header2"], [["a1", "a2"], ["b1", "b2"]
|
519
510
|
table.render_with MyBorder
|
520
511
|
# =>
|
521
512
|
# $header1$header2$
|
@@ -528,7 +519,7 @@ table.render_with MyBorder
|
|
528
519
|
In addition to specifying border characters you can force the table to render a separator line on each row like:
|
529
520
|
|
530
521
|
```ruby
|
531
|
-
table = TTY::Table.new [
|
522
|
+
table = TTY::Table.new ["header1", "header2"], [["a1", "a2"], ["b1", "b2"]]
|
532
523
|
table.render do |renderer|
|
533
524
|
renderer.border.separator = :each_row
|
534
525
|
end
|
@@ -545,7 +536,7 @@ end
|
|
545
536
|
If you want more control you can provide an array of rows *after* which a separator will be added:
|
546
537
|
|
547
538
|
```ruby
|
548
|
-
table = TTY::Table.new [
|
539
|
+
table = TTY::Table.new ["header1", "header2"], [["a1", "a2"], ["b1", "b2"], ["c1", "c2"]]
|
549
540
|
table.render do |renderer|
|
550
541
|
renderer.border.separator = [0, 2]
|
551
542
|
end
|
@@ -566,8 +557,8 @@ will not be automatically added.
|
|
566
557
|
You can also give the separator option a proc to control where the separators are:
|
567
558
|
|
568
559
|
```ruby
|
569
|
-
table = TTY::Table.new [
|
570
|
-
[[
|
560
|
+
table = TTY::Table.new ["header1", "header2"],
|
561
|
+
[["a1", "a2"], ["b1", "b2"], ["c1", "c2"], ["d1", "d2"]]
|
571
562
|
table.render do |renderer|
|
572
563
|
renderer.border.separator = ->(row) { row == 0 || (row+1) % 2 == 0} # separate every two rows
|
573
564
|
end
|
@@ -586,9 +577,9 @@ end
|
|
586
577
|
Finally you can also position a separator using the `:separator` key word in place of a row:
|
587
578
|
|
588
579
|
```ruby
|
589
|
-
table = TTY::Table.new [
|
590
|
-
[:separator, [
|
591
|
-
table << :separator << [
|
580
|
+
table = TTY::Table.new ["header1", "header2"],
|
581
|
+
[:separator, ["a1", "a2"], ["b1", "b2"]]
|
582
|
+
table << :separator << ["c1", "c2"] # you can push separators on too!
|
592
583
|
table.render
|
593
584
|
# =>
|
594
585
|
# +-------+-------+
|
@@ -615,12 +606,14 @@ All [supported colors](https://github.com/piotrmurach/pastel#3-supported-colors)
|
|
615
606
|
|
616
607
|
### 3.6 Filter
|
617
608
|
|
618
|
-
You can define filters that will modify individual table
|
609
|
+
You can define filters that will modify individual table field value before it is rendered. A filter can be a callable such as proc.
|
610
|
+
|
611
|
+
Here's an example that formats capitalizes each field in second column skipping the header:
|
619
612
|
|
620
613
|
```ruby
|
621
|
-
table = TTY::Table.new
|
614
|
+
table = TTY::Table.new(["header1", "header2"], [["a1", "a2"], ["b1", "b2"]])
|
622
615
|
table.render do |renderer|
|
623
|
-
renderer.filter =
|
616
|
+
renderer.filter = ->(val, row_index, col_index) do
|
624
617
|
if col_index == 1 and !(row_index == 0)
|
625
618
|
val.capitalize
|
626
619
|
else
|
@@ -638,13 +631,13 @@ end
|
|
638
631
|
# +-------+-------+
|
639
632
|
```
|
640
633
|
|
641
|
-
To color even fields red on green background add filter like so
|
634
|
+
To color even fields red on green background add filter like so:
|
642
635
|
|
643
636
|
```ruby
|
644
637
|
pastel = Pastel.new
|
645
638
|
|
646
639
|
table.render do |renderer|
|
647
|
-
renderer.filter =
|
640
|
+
renderer.filter = ->(val, row_index, col_index) do
|
648
641
|
col_index % 2 == 1 ? pastel.red.on_green(val) : val
|
649
642
|
end
|
650
643
|
end
|
@@ -652,11 +645,11 @@ end
|
|
652
645
|
|
653
646
|
### 3.7 Multiline
|
654
647
|
|
655
|
-
Renderer options may include
|
648
|
+
Renderer options may include `:multiline` parameter. When set to `true`, table fields will wrap at their natural line breaks or the column widths(if provided).
|
656
649
|
|
657
650
|
```ruby
|
658
|
-
table = TTY::Table.new
|
659
|
-
table.render
|
651
|
+
table = TTY::Table.new([["First", "1"], ["Multi\nLine\nContent", "2"], ["Third", "3"]])
|
652
|
+
table.render(:ascii, multiline: true)
|
660
653
|
# =>
|
661
654
|
# +-------+-+
|
662
655
|
# |First |1|
|
@@ -670,7 +663,7 @@ table.render :ascii, multiline: true
|
|
670
663
|
When `multiline` is set to `false`, all line break characters will be escaped. In cases when the column widths are set, the content will be truncated.
|
671
664
|
|
672
665
|
```ruby
|
673
|
-
table = TTY::Table.new [["First",
|
666
|
+
table = TTY::Table.new [["First", "1"], ["Multiline\nContent", "2"], ["Third", "3"]]
|
674
667
|
table.render :ascii, multiline: false
|
675
668
|
# =>
|
676
669
|
# +------------------+-+
|
@@ -712,15 +705,15 @@ table.render(:ascii, padding: [1,2,1,2])
|
|
712
705
|
However, when adding top or bottom padding to content with line breaks, the `multiline` option needs to be set to `true` to allow for rows to span multiple lines. For example:
|
713
706
|
|
714
707
|
```ruby
|
715
|
-
table = TTY::Table.new
|
708
|
+
table = TTY::Table.new(header: ["head1", "head2"])
|
716
709
|
table << ["Multi\nLine", "Text\nthat\nwraps"]
|
717
|
-
table << ["Some\nother\ntext",
|
710
|
+
table << ["Some\nother\ntext", "Simple"]
|
718
711
|
```
|
719
712
|
|
720
|
-
would render as:
|
713
|
+
This would render as:
|
721
714
|
|
722
715
|
```ruby
|
723
|
-
table.render
|
716
|
+
table.render(:ascii, multiline: true, padding: [1,2,1,2])
|
724
717
|
# =>
|
725
718
|
# +---------+----------+
|
726
719
|
# | | |
|
@@ -742,17 +735,30 @@ table.render :ascii, multiline: true, padding: [1,2,1,2]
|
|
742
735
|
|
743
736
|
### 3.9 Resize
|
744
737
|
|
738
|
+
You can force table to resize to the terminal full width using the `:resize` option:
|
739
|
+
|
740
|
+
```ruby
|
741
|
+
table.render(:ascii, resize: true)
|
742
|
+
```
|
743
|
+
|
745
744
|
### 3.10 Width
|
746
745
|
|
747
746
|
To control table's column sizes pass `width`, `resize` options. By default table's natural column widths are calculated from the content. If the total table width does not fit in terminal window then the table is rotated vertically to preserve content.
|
748
747
|
|
749
748
|
The `resize` property will force the table to expand/shrink to match the terminal width or custom `width`. On its own the `width` property will not resize table but only enforce table vertical rotation if content overspills.
|
750
749
|
|
750
|
+
For example, given the following table:
|
751
|
+
|
752
|
+
```ruby
|
753
|
+
header = ["h1", "h2", "h3"]
|
754
|
+
rows = [["aaa1", "aa2", "aaaaaaa3"], ["b1", "b2", "b3"]]
|
755
|
+
table = TTY::Table.new(header, rows)
|
756
|
+
```
|
757
|
+
|
758
|
+
The result of rending to `80` columns width will produce:
|
759
|
+
|
751
760
|
```ruby
|
752
|
-
|
753
|
-
rows = [['aaa1', 'aa2', 'aaaaaaa3'], ['b1', 'b2', 'b3']]
|
754
|
-
table = TTY::Table.new header, rows
|
755
|
-
table.render width: 80, resize: true
|
761
|
+
table.render(width: 80, resize: true)
|
756
762
|
# =>
|
757
763
|
# +---------+-------+------------+
|
758
764
|
# |h1 |h2 |h3 |
|