term_utils 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -2
- data/COPYING +3 -3
- data/README.md +51 -16
- data/doc/TermUtils.html +9 -9
- data/doc/TermUtils/AP.html +48 -159
- data/doc/TermUtils/AP/Article.html +48 -46
- data/doc/TermUtils/AP/ArticleResult.html +584 -0
- data/doc/TermUtils/AP/Flag.html +294 -77
- data/doc/TermUtils/AP/NoSuchValueError.html +13 -13
- data/doc/TermUtils/AP/Parameter.html +885 -97
- data/doc/TermUtils/AP/ParameterResult.html +980 -0
- data/doc/TermUtils/{FF/Cursor/Context.html → AP/ParameterWalkerHooks.html} +59 -59
- data/doc/TermUtils/AP/ParseError.html +13 -13
- data/doc/TermUtils/AP/Parser.html +174 -142
- data/doc/TermUtils/AP/Result.html +200 -527
- data/doc/TermUtils/AP/Syntax.html +102 -392
- data/doc/TermUtils/AP/SyntaxError.html +13 -13
- data/doc/TermUtils/AP/Walker.html +686 -0
- data/doc/TermUtils/FF.html +10 -10
- data/doc/TermUtils/FF/Config.html +201 -33
- data/doc/TermUtils/FF/Context.html +585 -0
- data/doc/TermUtils/FF/Entry.html +626 -0
- data/doc/TermUtils/FF/Query.html +402 -66
- data/doc/TermUtils/PropertyTreeNode.html +302 -188
- data/doc/TermUtils/Tab.html +90 -83
- data/doc/TermUtils/Tab/Column.html +94 -92
- data/doc/TermUtils/Tab/Header.html +26 -26
- data/doc/TermUtils/Tab/Holder.html +74 -74
- data/doc/TermUtils/Tab/Printer.html +42 -42
- data/doc/TermUtils/Tab/Table.html +124 -128
- data/doc/TermUtils/Tab/TableError.html +11 -11
- data/doc/_index.html +48 -34
- data/doc/class_list.html +3 -3
- data/doc/css/style.css +2 -2
- data/doc/file.README.html +64 -31
- data/doc/file_list.html +2 -2
- data/doc/frames.html +2 -2
- data/doc/index.html +64 -31
- data/doc/js/app.js +14 -3
- data/doc/method_list.html +387 -211
- data/doc/top-level-namespace.html +6 -6
- data/lib/term_utils.rb +8 -1
- data/lib/term_utils/ap.rb +41 -30
- data/lib/term_utils/ap/article.rb +14 -8
- data/lib/term_utils/ap/flag.rb +36 -19
- data/lib/term_utils/ap/parameter.rb +87 -18
- data/lib/term_utils/ap/parser.rb +141 -115
- data/lib/term_utils/ap/result.rb +207 -160
- data/lib/term_utils/ap/syntax.rb +52 -68
- data/lib/term_utils/ff.rb +11 -2
- data/lib/term_utils/ff/config.rb +20 -8
- data/lib/term_utils/{ap/no_such_value_error.rb → ff/entry.rb} +25 -7
- data/lib/term_utils/ff/query.rb +93 -14
- data/lib/term_utils/property_tree_node.rb +47 -19
- data/lib/term_utils/tab.rb +102 -58
- data/term_utils.gemspec +4 -4
- metadata +12 -14
- data/doc/TermUtils/AP/Element.html +0 -1025
- data/doc/TermUtils/AP/Level.html +0 -638
- data/doc/TermUtils/FF/Cursor.html +0 -929
- data/lib/term_utils/ap/element.rb +0 -78
- data/lib/term_utils/ap/level.rb +0 -57
- data/lib/term_utils/ap/parse_error.rb +0 -27
- data/lib/term_utils/ap/syntax_error.rb +0 -27
- data/lib/term_utils/ff/cursor.rb +0 -153
data/lib/term_utils/tab.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2020 Thomas Baron
|
2
4
|
#
|
3
5
|
# This file is part of term_utils.
|
4
6
|
#
|
@@ -13,6 +15,7 @@
|
|
13
15
|
#
|
14
16
|
# You should have received a copy of the GNU General Public License
|
15
17
|
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
18
|
+
|
16
19
|
module TermUtils
|
17
20
|
# The tab module provides a way to print formatted tables.
|
18
21
|
module Tab
|
@@ -22,51 +25,56 @@ module TermUtils
|
|
22
25
|
super
|
23
26
|
end
|
24
27
|
end
|
28
|
+
|
25
29
|
# Creates initial column properties.
|
26
30
|
# @return [Hash] `:offset`, `:column_separator_width`.
|
27
31
|
def self.init_table_props
|
28
|
-
{:
|
32
|
+
{ offset: 0, column_separator_width: 2 }
|
29
33
|
end
|
34
|
+
|
30
35
|
# Creates initial column properties.
|
31
36
|
# @return [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
32
37
|
def self.init_column_props
|
33
|
-
{:
|
38
|
+
{ width: 8, align: :left, fixed: false, ellipsis: '?', format: nil }
|
34
39
|
end
|
40
|
+
|
35
41
|
# Assigns table properties.
|
36
42
|
# @param target [Hash]
|
37
43
|
# @param source [Hash] `:offset`, `:column_separator_width`.
|
38
44
|
# @return [Hash]
|
39
45
|
def self.assign_table_props(target, source)
|
40
|
-
if (source.
|
46
|
+
if (source.key? :offset) && (source[:offset].is_a? Integer) && (source[:offset] >= 0)
|
41
47
|
target[:offset] = source[:offset]
|
42
48
|
end
|
43
|
-
if (source.
|
49
|
+
if (source.key? :column_separator_width) && (source[:column_separator_width].is_a? Integer) && source[:column_separator_width].positive?
|
44
50
|
target[:column_separator_width] = source[:column_separator_width]
|
45
51
|
end
|
46
52
|
target
|
47
53
|
end
|
54
|
+
|
48
55
|
# Assigns column properties.
|
49
56
|
# @param target [Hash]
|
50
57
|
# @param source [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
51
58
|
# @return [Hash]
|
52
59
|
def self.assign_column_props(target, source)
|
53
|
-
if (source.
|
60
|
+
if (source.key? :width) && (source[:width].is_a? Integer) && source[:width].positive?
|
54
61
|
target[:width] = source[:width]
|
55
62
|
end
|
56
|
-
if (source.
|
63
|
+
if (source.key? :align) && %i[left right].index(source[:align])
|
57
64
|
target[:align] = source[:align]
|
58
65
|
end
|
59
|
-
if (source.
|
66
|
+
if (source.key? :fixed) && (!!source[:fixed] == source[:fixed])
|
60
67
|
target[:fixed] = source[:fixed]
|
61
68
|
end
|
62
|
-
if (source.
|
69
|
+
if (source.key? :ellipsis) && (source[:ellipsis].is_a? String)
|
63
70
|
target[:ellipsis] = source[:ellipsis]
|
64
71
|
end
|
65
|
-
if (source.
|
72
|
+
if (source.key? :format) && (source[:ellipsis].nil? || (source[:ellipsis].is_a? Proc) || (source[:ellipsis].is_a? String))
|
66
73
|
target[:format] = source[:format]
|
67
74
|
end
|
68
75
|
target
|
69
76
|
end
|
77
|
+
|
70
78
|
# Aligns and cuts a given string.
|
71
79
|
# @param src [String]
|
72
80
|
# @param align [Symbol] `:left`, `:right`.
|
@@ -75,32 +83,31 @@ module TermUtils
|
|
75
83
|
# @param ellipsis [String] The ellipsis when not fixed.
|
76
84
|
# @return [String]
|
77
85
|
def self.align_cut(src, align, fixed, width, ellipsis)
|
78
|
-
res = src
|
79
86
|
if align == :left
|
80
87
|
# Align left
|
81
88
|
if fixed && (src.length > width)
|
82
89
|
if ellipsis.length >= width
|
83
|
-
|
90
|
+
ellipsis[0..(width - 1)]
|
84
91
|
else
|
85
|
-
|
92
|
+
format '%<value>s%<ellipsis>s', value: src[0..(width - (ellipsis.length + 1))], ellipsis: ellipsis
|
86
93
|
end
|
87
94
|
else
|
88
|
-
|
95
|
+
src.ljust(width)
|
89
96
|
end
|
90
97
|
elsif align == :right
|
91
98
|
# Align right
|
92
99
|
if fixed && (src.length > width)
|
93
100
|
if ellipsis.length >= width
|
94
|
-
|
101
|
+
ellipsis[0..(width - 1)]
|
95
102
|
else
|
96
|
-
|
103
|
+
format '%<ellipsis>s%<value>s', ellipsis: ellipsis, value: src[(src.length - width + ellipsis.length)..(src.length - 1)]
|
97
104
|
end
|
98
105
|
else
|
99
|
-
|
106
|
+
src.rjust(width)
|
100
107
|
end
|
101
108
|
end
|
102
|
-
res
|
103
109
|
end
|
110
|
+
|
104
111
|
# Represents a table.
|
105
112
|
class Table
|
106
113
|
# @return [Symbol]
|
@@ -113,6 +120,7 @@ module TermUtils
|
|
113
120
|
attr_accessor :column_defaults
|
114
121
|
# @return [Array<Tab::Column>]
|
115
122
|
attr_accessor :columns
|
123
|
+
|
116
124
|
# @param opts [Hash]
|
117
125
|
# @option opts [Symbol] :id
|
118
126
|
# @option opts [Integer] :offset
|
@@ -122,18 +130,16 @@ module TermUtils
|
|
122
130
|
@id = opts.fetch(:id, nil)
|
123
131
|
@offset = opts.fetch(:offset)
|
124
132
|
@column_separator_width = opts.fetch(:column_separator_width)
|
125
|
-
|
126
|
-
@column_defaults = opts[:column_defaults].dup
|
127
|
-
else
|
128
|
-
@column_defaults = TermUtils::Tab.default_column_props
|
129
|
-
end
|
133
|
+
@column_defaults = opts.key?(:column_defaults) ? opts[:column_defaults].dup : TermUtils::Tab.default_column_props
|
130
134
|
@columns = []
|
131
135
|
end
|
136
|
+
|
132
137
|
# Returns the properties of this one.
|
133
138
|
# @return [Hash]
|
134
139
|
def props
|
135
|
-
{:
|
140
|
+
{ offset: @offset, column_separator_width: @column_separator_width }
|
136
141
|
end
|
142
|
+
|
137
143
|
# Sets column default properties.
|
138
144
|
# @param opts [Hash]
|
139
145
|
# @option opts [Integer] :width
|
@@ -144,6 +150,7 @@ module TermUtils
|
|
144
150
|
def set_column_defaults(opts = {})
|
145
151
|
TermUtils::Tab.assign_column_props(@column_defaults, opts)
|
146
152
|
end
|
153
|
+
|
147
154
|
# Defines a column.
|
148
155
|
# @param id [Symbol]
|
149
156
|
# @param opts [Hash]
|
@@ -156,24 +163,26 @@ module TermUtils
|
|
156
163
|
def define_column(id, opts = {}, &block)
|
157
164
|
col = @columns.find { |c| c.id == id }
|
158
165
|
if col
|
159
|
-
block
|
166
|
+
block&.call(col)
|
160
167
|
col.validate
|
161
168
|
else
|
162
169
|
opts[:id] = id
|
163
170
|
opts[:index] = @columns.length
|
164
171
|
col = Column.new(@column_defaults.merge(opts))
|
165
|
-
block
|
172
|
+
block&.call(col)
|
166
173
|
col.validate
|
167
174
|
@columns << col
|
168
175
|
end
|
169
176
|
col
|
170
177
|
end
|
178
|
+
|
171
179
|
# Finds a column.
|
172
180
|
# @param id [Symbol]
|
173
181
|
# @return [Tab::Column, nil]
|
174
182
|
def find_column(id)
|
175
183
|
@columns.find { |c| c.id == id }
|
176
184
|
end
|
185
|
+
|
177
186
|
# Creates a new table printer.
|
178
187
|
# @param io [#puts]
|
179
188
|
# @param opts [Hash]
|
@@ -182,9 +191,10 @@ module TermUtils
|
|
182
191
|
# @return [Tab::Printer]
|
183
192
|
def printer(io, opts = {}, &block)
|
184
193
|
ptr = Printer.new(self, io, props.merge(opts))
|
185
|
-
block
|
194
|
+
block&.call(ptr)
|
186
195
|
ptr
|
187
196
|
end
|
197
|
+
|
188
198
|
# Prints a header row.
|
189
199
|
# @param io [#puts]
|
190
200
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
@@ -203,17 +213,19 @@ module TermUtils
|
|
203
213
|
vals << values[col.id]
|
204
214
|
end
|
205
215
|
end
|
206
|
-
raise TermUtils::Tab::TableError,
|
216
|
+
raise TermUtils::Tab::TableError, 'wrong values (not array)' unless vals.is_a? Array
|
217
|
+
|
207
218
|
offset = opts.fetch(:offset)
|
208
219
|
column_separator_width = opts.fetch(:column_separator_width)
|
209
220
|
sb = StringIO.new
|
210
|
-
sb <<
|
221
|
+
sb << ' ' * offset if offset.positive?
|
211
222
|
@columns.each do |col|
|
212
|
-
sb <<
|
223
|
+
sb << ' ' * column_separator_width if col.index.positive?
|
213
224
|
sb << col.render_header(vals[col.index])
|
214
225
|
end
|
215
226
|
io.puts sb.string
|
216
227
|
end
|
228
|
+
|
217
229
|
# Prints a data row.
|
218
230
|
# @param io [#puts]
|
219
231
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
@@ -230,17 +242,19 @@ module TermUtils
|
|
230
242
|
vals << values[col.id]
|
231
243
|
end
|
232
244
|
end
|
233
|
-
raise TermUtils::Tab::TableError,
|
245
|
+
raise TermUtils::Tab::TableError, 'wrong values (not array)' unless vals.is_a? Array
|
246
|
+
|
234
247
|
offset = opts.fetch(:offset)
|
235
248
|
column_separator_width = opts.fetch(:column_separator_width)
|
236
249
|
sb = StringIO.new
|
237
|
-
sb <<
|
250
|
+
sb << ' ' * offset if offset.positive?
|
238
251
|
@columns.each do |col|
|
239
|
-
sb <<
|
252
|
+
sb << ' ' * column_separator_width if col.index.positive?
|
240
253
|
sb << col.render_data(vals[col.index])
|
241
254
|
end
|
242
255
|
io.puts sb.string
|
243
256
|
end
|
257
|
+
|
244
258
|
# Prints a separator row.
|
245
259
|
# @param io [#puts]
|
246
260
|
# @param opts [Hash]
|
@@ -251,13 +265,14 @@ module TermUtils
|
|
251
265
|
offset = opts.fetch(:offset)
|
252
266
|
column_separator_width = opts.fetch(:column_separator_width)
|
253
267
|
sb = StringIO.new
|
254
|
-
sb <<
|
268
|
+
sb << ' ' * offset if offset.positive?
|
255
269
|
@columns.each do |col|
|
256
|
-
sb <<
|
257
|
-
sb <<
|
270
|
+
sb << ' ' * column_separator_width if col.index.positive?
|
271
|
+
sb << '-' * col.width
|
258
272
|
end
|
259
273
|
io.puts sb.string
|
260
274
|
end
|
275
|
+
|
261
276
|
# Returns column titles.
|
262
277
|
# @return [Hash<Symbol, String>]
|
263
278
|
def titles
|
@@ -268,6 +283,7 @@ module TermUtils
|
|
268
283
|
h
|
269
284
|
end
|
270
285
|
end
|
286
|
+
|
271
287
|
# Represents a table column.
|
272
288
|
class Column
|
273
289
|
# @return [Symbol]
|
@@ -286,6 +302,7 @@ module TermUtils
|
|
286
302
|
attr_accessor :format
|
287
303
|
# @return [TermUtils::Tab::Header]
|
288
304
|
attr_accessor :header
|
305
|
+
|
289
306
|
# @param opts [Hash]
|
290
307
|
# @option opts [Symbol] :id
|
291
308
|
# @option opts [Integer] :index
|
@@ -300,31 +317,35 @@ module TermUtils
|
|
300
317
|
@width = opts.fetch(:width, 8)
|
301
318
|
@align = opts.fetch(:align, :left)
|
302
319
|
@fixed = opts.fetch(:fixed, false)
|
303
|
-
@ellipsis = opts.fetch(:ellipsis,
|
320
|
+
@ellipsis = opts.fetch(:ellipsis, '?')
|
304
321
|
@format = opts.fetch(:format, nil)
|
305
|
-
@header = TermUtils::Tab::Header.new(:
|
322
|
+
@header = TermUtils::Tab::Header.new(title: @id.to_s, align: @align)
|
306
323
|
end
|
324
|
+
|
307
325
|
# Validates the column represented by this one.
|
308
326
|
# @return [nil]
|
309
327
|
# @raise [TermUtils::Tab::TableError]
|
310
328
|
def validate
|
311
|
-
raise TermUtils::Tab::TableError,
|
312
|
-
raise TermUtils::Tab::TableError,
|
313
|
-
raise TermUtils::Tab::TableError,
|
314
|
-
raise TermUtils::Tab::TableError,
|
315
|
-
raise TermUtils::Tab::TableError,
|
316
|
-
raise TermUtils::Tab::TableError,
|
317
|
-
raise TermUtils::Tab::TableError,
|
318
|
-
raise TermUtils::Tab::TableError,
|
329
|
+
raise TermUtils::Tab::TableError, 'missing column id (nil)' if @id.nil?
|
330
|
+
raise TermUtils::Tab::TableError, 'missing column index (nil)' if @index.nil?
|
331
|
+
raise TermUtils::Tab::TableError, 'wrong column index (not integer)' unless @index.is_a? Integer
|
332
|
+
raise TermUtils::Tab::TableError, 'wrong column index (not >= 0)' if @index.negative?
|
333
|
+
raise TermUtils::Tab::TableError, 'missing column width (nil)' if @width.nil?
|
334
|
+
raise TermUtils::Tab::TableError, 'wrong column width (not integer)' unless @width.is_a? Integer
|
335
|
+
raise TermUtils::Tab::TableError, 'wrong column width (not > 0)' if @width <= 0
|
336
|
+
raise TermUtils::Tab::TableError, 'wrong column align (not :left or :right)' unless %i[left right].index(@align)
|
337
|
+
|
319
338
|
@header.validate
|
320
339
|
end
|
340
|
+
|
321
341
|
# Renders a given header.
|
322
342
|
# @param val [Object]
|
323
343
|
# return [String]
|
324
344
|
def render_header(val)
|
325
|
-
src =
|
345
|
+
src = val.is_a?(String) ? val : val.to_s
|
326
346
|
TermUtils::Tab.align_cut(src, @header.align, @fixed, @width, @ellipsis)
|
327
347
|
end
|
348
|
+
|
328
349
|
# Renders a given value.
|
329
350
|
# @param val [Object]
|
330
351
|
# return [String]
|
@@ -337,16 +358,18 @@ module TermUtils
|
|
337
358
|
src = @format % val
|
338
359
|
end
|
339
360
|
end
|
340
|
-
src =
|
361
|
+
src = src.is_a?(String) ? src : src.to_s
|
341
362
|
TermUtils::Tab.align_cut(src, @align, @fixed, @width, @ellipsis)
|
342
363
|
end
|
343
364
|
end
|
365
|
+
|
344
366
|
# Represents a column header.
|
345
367
|
class Header
|
346
368
|
# @return [String]
|
347
369
|
attr_accessor :title
|
348
370
|
# @return [Symbol] `:left`, `:right`.
|
349
371
|
attr_accessor :align
|
372
|
+
|
350
373
|
# Constructs a new Header.
|
351
374
|
# @param opts [Hash]
|
352
375
|
# @option opts [String] :title
|
@@ -355,12 +378,13 @@ module TermUtils
|
|
355
378
|
@title = opts.fetch(:title)
|
356
379
|
@align = opts.fetch(:align, :left)
|
357
380
|
end
|
381
|
+
|
358
382
|
# Validates the column represented by this one.
|
359
383
|
# @return [nil]
|
360
384
|
# @raise [TermUtils::Tab::TableError]
|
361
385
|
def validate
|
362
|
-
raise TermUtils::Tab::TableError,
|
363
|
-
raise TermUtils::Tab::TableError,
|
386
|
+
raise TermUtils::Tab::TableError, 'missing header title (nil)' if @title.nil?
|
387
|
+
raise TermUtils::Tab::TableError, 'wrong header align (not :left or :right)' unless %i[left right].index(@align)
|
364
388
|
end
|
365
389
|
end
|
366
390
|
# Represents a table printer.
|
@@ -371,6 +395,7 @@ module TermUtils
|
|
371
395
|
attr_accessor :io
|
372
396
|
# @return [Hash]
|
373
397
|
attr_accessor :options
|
398
|
+
|
374
399
|
# @param table [Tab::Table]
|
375
400
|
# @param io [IO]
|
376
401
|
# @param options [Hash]
|
@@ -379,10 +404,12 @@ module TermUtils
|
|
379
404
|
@io = io
|
380
405
|
@options = options
|
381
406
|
end
|
407
|
+
|
382
408
|
# Prints an empty line.
|
383
409
|
def line
|
384
|
-
@io.puts
|
410
|
+
@io.puts
|
385
411
|
end
|
412
|
+
|
386
413
|
# Prints a header row.
|
387
414
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
388
415
|
# @param opts [Hash]
|
@@ -392,6 +419,7 @@ module TermUtils
|
|
392
419
|
def header(values = nil, opts = nil)
|
393
420
|
@table.print_header(@io, values, opts ? @options.merge(opts) : @options)
|
394
421
|
end
|
422
|
+
|
395
423
|
# Prints a data row.
|
396
424
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
397
425
|
# @param opts [Hash]
|
@@ -401,6 +429,7 @@ module TermUtils
|
|
401
429
|
def data(values, opts = nil)
|
402
430
|
@table.print_data(@io, values, opts ? @options.merge(opts) : @options)
|
403
431
|
end
|
432
|
+
|
404
433
|
# Prints a separator.
|
405
434
|
# @param opts [Hash]
|
406
435
|
# @option opts [Integer] :offset
|
@@ -410,7 +439,7 @@ module TermUtils
|
|
410
439
|
@table.print_separator(@io, opts ? @options.merge(opts) : @options)
|
411
440
|
end
|
412
441
|
end
|
413
|
-
# Represents a
|
442
|
+
# Represents a Holder of Table(s).
|
414
443
|
class Holder
|
415
444
|
# @return [Hash] `:offset`, `:column_separator_width`.
|
416
445
|
attr_accessor :table_defaults
|
@@ -418,11 +447,14 @@ module TermUtils
|
|
418
447
|
attr_accessor :column_defaults
|
419
448
|
# @return [Hash<Symbol, Tab::Table>]
|
420
449
|
attr_accessor :tables
|
421
|
-
|
450
|
+
|
451
|
+
# Creates a new Holder.
|
452
|
+
def initialize
|
422
453
|
@table_defaults = TermUtils::Tab.init_table_props
|
423
454
|
@column_defaults = TermUtils::Tab.init_column_props
|
424
455
|
@tables = {}
|
425
456
|
end
|
457
|
+
|
426
458
|
# Sets table default properties.
|
427
459
|
# @param opts [Hash]
|
428
460
|
# @option opts [Integer] :offset
|
@@ -430,6 +462,7 @@ module TermUtils
|
|
430
462
|
def set_table_defaults(opts = {})
|
431
463
|
TermUtils::Tab.assign_table_props(@table_defaults, opts)
|
432
464
|
end
|
465
|
+
|
433
466
|
# Sets column default properties.
|
434
467
|
# @param opts [Hash]
|
435
468
|
# @option opts [Integer] :width
|
@@ -440,6 +473,7 @@ module TermUtils
|
|
440
473
|
def set_column_defaults(opts = {})
|
441
474
|
TermUtils::Tab.assign_column_props(@column_defaults, opts)
|
442
475
|
end
|
476
|
+
|
443
477
|
# Creates a new table, using default properties, without registering it.
|
444
478
|
# @param opts [Hash]
|
445
479
|
# @return [Tab::Table]
|
@@ -448,33 +482,36 @@ module TermUtils
|
|
448
482
|
opts[:column_separator_width] = @table_defaults.fetch(:column_separator_width)
|
449
483
|
opts[:column_defaults] = @column_defaults.dup
|
450
484
|
new_tab = Table.new(opts)
|
451
|
-
block
|
485
|
+
block&.call(new_tab)
|
452
486
|
new_tab
|
453
487
|
end
|
488
|
+
|
454
489
|
# Defines a table, using default properties.
|
455
490
|
# @param id [Symbol]
|
456
491
|
# @param opts [Hash]
|
457
492
|
# @return [Tab::Table]
|
458
493
|
def define_table(id, opts = {}, &block)
|
459
|
-
if @tables.
|
460
|
-
block
|
494
|
+
if @tables.key? id
|
495
|
+
block&.call(@tables[id])
|
461
496
|
else
|
462
497
|
opts[:id] = id
|
463
498
|
opts[:offset] = @table_defaults.fetch(:offset)
|
464
499
|
opts[:column_separator_width] = @table_defaults.fetch(:column_separator_width)
|
465
500
|
opts[:column_defaults] = @column_defaults.dup
|
466
501
|
new_tab = Table.new(opts)
|
467
|
-
block
|
502
|
+
block&.call(new_tab)
|
468
503
|
@tables[id] = new_tab
|
469
504
|
end
|
470
505
|
@tables[id]
|
471
506
|
end
|
507
|
+
|
472
508
|
# Finds a table.
|
473
509
|
# @param id [Symbol]
|
474
510
|
# @return [Tab::Table, nil]
|
475
511
|
def find_table(id)
|
476
512
|
@tables[id]
|
477
513
|
end
|
514
|
+
|
478
515
|
# Creates a new table printer.
|
479
516
|
# @param id [Symbol]
|
480
517
|
# @param io [IO]
|
@@ -486,7 +523,9 @@ module TermUtils
|
|
486
523
|
find_table(id).printer(io, opts, &block)
|
487
524
|
end
|
488
525
|
end
|
489
|
-
|
526
|
+
|
527
|
+
@@default_holder = Holder.new # rubocop:disable Style/ClassVars
|
528
|
+
|
490
529
|
# Sets table default properties.
|
491
530
|
# @param opts [Hash]
|
492
531
|
# @option opts [Integer] :offset
|
@@ -494,6 +533,7 @@ module TermUtils
|
|
494
533
|
def self.set_table_defaults(opts = {})
|
495
534
|
@@default_holder.set_table_defaults(opts)
|
496
535
|
end
|
536
|
+
|
497
537
|
# Sets column default properties.
|
498
538
|
# @param opts [Hash]
|
499
539
|
# @option opts [Integer] :width
|
@@ -504,12 +544,14 @@ module TermUtils
|
|
504
544
|
def self.set_column_defaults(opts = {})
|
505
545
|
@@default_holder.set_column_defaults(opts)
|
506
546
|
end
|
547
|
+
|
507
548
|
# Creates a new Table, using default properties, without registering it.
|
508
549
|
# @param opts [Hash]
|
509
550
|
# @return [Tab::Table]
|
510
551
|
def self.create_table(opts = {}, &block)
|
511
552
|
@@default_holder.create_table(opts, &block)
|
512
553
|
end
|
554
|
+
|
513
555
|
# Defines a new Table, using default properties, and registers it.
|
514
556
|
# @param id [Symbol]
|
515
557
|
# @param opts [Hash]
|
@@ -517,12 +559,14 @@ module TermUtils
|
|
517
559
|
def self.define_table(id, opts = {}, &block)
|
518
560
|
@@default_holder.define_table(id, opts, &block)
|
519
561
|
end
|
562
|
+
|
520
563
|
# Finds a registered table.
|
521
564
|
# @param id [Symbol]
|
522
565
|
# @return [Tab::Table, nil]
|
523
566
|
def self.find_table(id)
|
524
567
|
@@default_holder.find_table(id)
|
525
568
|
end
|
569
|
+
|
526
570
|
# Creates a new Printer for a registered Table.
|
527
571
|
# @param id [Symbol]
|
528
572
|
# @param io [IO]
|