term_utils 0.3.0 → 0.3.1
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 +14 -1
- data/Rakefile +22 -13
- data/doc/TermUtils/AP/Article.html +1 -1
- data/doc/TermUtils/AP/Element.html +1 -1
- data/doc/TermUtils/AP/Flag.html +1 -1
- data/doc/TermUtils/AP/Level.html +1 -1
- data/doc/TermUtils/AP/NoSuchValueError.html +1 -1
- data/doc/TermUtils/AP/Parameter.html +1 -1
- data/doc/TermUtils/AP/ParseError.html +1 -1
- data/doc/TermUtils/AP/Parser.html +1 -1
- data/doc/TermUtils/AP/Result.html +202 -67
- data/doc/TermUtils/AP/Syntax.html +1 -1
- data/doc/TermUtils/AP/SyntaxError.html +1 -1
- data/doc/TermUtils/AP.html +1 -1
- data/doc/TermUtils/FF/Config.html +1 -1
- data/doc/TermUtils/FF/Cursor/Context.html +1 -1
- data/doc/TermUtils/FF/Cursor.html +1 -1
- data/doc/TermUtils/FF/Query.html +1 -1
- data/doc/TermUtils/FF.html +1 -1
- data/doc/TermUtils/PropertyTreeNode.html +1 -1
- data/doc/TermUtils/Tab/Column.html +170 -199
- data/doc/TermUtils/Tab/Header.html +536 -0
- data/doc/TermUtils/Tab/Holder.html +570 -34
- data/doc/TermUtils/Tab/Printer.html +50 -50
- data/doc/TermUtils/Tab/Table.html +675 -119
- data/doc/TermUtils/Tab/TableError.html +217 -0
- data/doc/TermUtils/Tab.html +1016 -45
- data/doc/TermUtils.html +1 -1
- data/doc/_index.html +15 -1
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +1 -1
- data/doc/index.html +1 -1
- data/doc/method_list.html +261 -69
- data/doc/top-level-namespace.html +1 -1
- data/lib/term_utils/ap/result.rb +23 -1
- data/lib/term_utils/tab.rb +255 -68
- data/term_utils.gemspec +2 -2
- metadata +4 -3
- data/doc/TermUtils/AP/ResultView.html +0 -597
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Sat Nov 16 17:06:14 2019 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
105
|
0.9.20 (ruby-2.6.5).
|
106
106
|
</div>
|
data/lib/term_utils/ap/result.rb
CHANGED
@@ -35,8 +35,30 @@ module TermUtils
|
|
35
35
|
@value = TermUtils::PropertyTreeNode.new
|
36
36
|
end
|
37
37
|
end
|
38
|
+
# Collects IDs.
|
39
|
+
# @param id [Symbol, Array<Symbol>] ID path.
|
40
|
+
# @return [Array<Symbol>]
|
41
|
+
def collect(id, &block)
|
42
|
+
node = @value
|
43
|
+
if id
|
44
|
+
id = [id] if id.is_a? Symbol
|
45
|
+
node = @value.find_node(id)
|
46
|
+
end
|
47
|
+
res = []
|
48
|
+
return res unless node && node.child_nodes
|
49
|
+
if block
|
50
|
+
node.child_nodes.each do |n|
|
51
|
+
res << n.key if block.call(n.key)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
node.child_nodes.each do |n|
|
55
|
+
res << n.key
|
56
|
+
end
|
57
|
+
end
|
58
|
+
res
|
59
|
+
end
|
38
60
|
# Tests whether a given level/parameter/article is present in the result value.
|
39
|
-
# @param id [Symbol, Array<Symbol>]
|
61
|
+
# @param id [Symbol, Array<Symbol>] ID path.
|
40
62
|
# @return [Boolean]
|
41
63
|
def present?(id)
|
42
64
|
if id.is_a? Symbol
|
data/lib/term_utils/tab.rb
CHANGED
@@ -16,22 +16,142 @@
|
|
16
16
|
module TermUtils
|
17
17
|
# The tab module provides a way to print formatted tables.
|
18
18
|
module Tab
|
19
|
+
# Represents a table error.
|
20
|
+
class TableError < StandardError
|
21
|
+
def initialize(msg)
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
# Creates initial column properties.
|
26
|
+
# @return [Hash] `:offset`, `:column_separator_width`.
|
27
|
+
def self.init_table_props
|
28
|
+
{:offset => 0, :column_separator_width => 2}
|
29
|
+
end
|
30
|
+
# Creates initial column properties.
|
31
|
+
# @return [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
32
|
+
def self.init_column_props
|
33
|
+
{:width => 8, :align => :left, :fixed => false, :ellipsis => "?", :format => nil}
|
34
|
+
end
|
35
|
+
# Assigns table properties.
|
36
|
+
# @param target [Hash]
|
37
|
+
# @param source [Hash] `:offset`, `:column_separator_width`.
|
38
|
+
# @return [Hash]
|
39
|
+
def self.assign_table_props(target, source)
|
40
|
+
if (source.has_key? :offset) && (source[:offset].is_a? Integer) && (source[:offset] >= 0)
|
41
|
+
target[:offset] = source[:offset]
|
42
|
+
end
|
43
|
+
if (source.has_key? :column_separator_width) && (source[:column_separator_width].is_a? Integer) && (source[:column_separator_width] > 0)
|
44
|
+
target[:column_separator_width] = source[:column_separator_width]
|
45
|
+
end
|
46
|
+
target
|
47
|
+
end
|
48
|
+
# Assigns column properties.
|
49
|
+
# @param target [Hash]
|
50
|
+
# @param source [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
51
|
+
# @return [Hash]
|
52
|
+
def self.assign_column_props(target, source)
|
53
|
+
if (source.has_key? :width) && (source[:width].is_a? Integer) && (source[:width] > 0)
|
54
|
+
target[:width] = source[:width]
|
55
|
+
end
|
56
|
+
if (source.has_key? :align) && %i[left right].index(source[:align])
|
57
|
+
target[:align] = source[:align]
|
58
|
+
end
|
59
|
+
if (source.has_key? :fixed) && (!!source[:fixed] == source[:fixed])
|
60
|
+
target[:fixed] = source[:fixed]
|
61
|
+
end
|
62
|
+
if (source.has_key? :ellipsis) && (source[:ellipsis].is_a? String)
|
63
|
+
target[:ellipsis] = source[:ellipsis]
|
64
|
+
end
|
65
|
+
if (source.has_key? :format) && ((source[:ellipsis] == nil) || (source[:ellipsis].is_a? Proc) || (source[:ellipsis].is_a? String))
|
66
|
+
target[:format] = source[:format]
|
67
|
+
end
|
68
|
+
target
|
69
|
+
end
|
70
|
+
# Aligns and cuts a given string.
|
71
|
+
# @param src [String]
|
72
|
+
# @param align [Symbol] `:left`, `:right`.
|
73
|
+
# @param fixed [Boolean] Whether the column width is fixed.
|
74
|
+
# @param width [Integer] The column width.
|
75
|
+
# @param ellipsis [String] The ellipsis when not fixed.
|
76
|
+
# @return [String]
|
77
|
+
def self.align_cut(src, align, fixed, width, ellipsis)
|
78
|
+
res = src
|
79
|
+
if align == :left
|
80
|
+
# Align left
|
81
|
+
if fixed && (src.length > width)
|
82
|
+
if ellipsis.length >= width
|
83
|
+
res = ellipsis[0..(width - 1)]
|
84
|
+
else
|
85
|
+
res = "%s%s" % [src[0..(width - (ellipsis.length + 1))], ellipsis]
|
86
|
+
end
|
87
|
+
else
|
88
|
+
res = "%-*s" % [width, src]
|
89
|
+
end
|
90
|
+
elsif align == :right
|
91
|
+
# Align right
|
92
|
+
if fixed && (src.length > width)
|
93
|
+
if ellipsis.length >= width
|
94
|
+
res = ellipsis[0..(width - 1)]
|
95
|
+
else
|
96
|
+
res = "%s%s" % [ellipsis, src[(src.length - width + ellipsis.length)..(src.length - 1)]]
|
97
|
+
end
|
98
|
+
else
|
99
|
+
res = "%*s" % [width, src]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
res
|
103
|
+
end
|
19
104
|
# Represents a table.
|
20
105
|
class Table
|
21
106
|
# @return [Symbol]
|
22
107
|
attr_accessor :id
|
108
|
+
# @return [Integer]
|
109
|
+
attr_accessor :offset
|
110
|
+
# @return [Integer]
|
111
|
+
attr_accessor :column_separator_width
|
112
|
+
# @return [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
113
|
+
attr_accessor :column_defaults
|
23
114
|
# @return [Array<Tab::Column>]
|
24
115
|
attr_accessor :columns
|
25
116
|
# @param opts [Hash]
|
26
117
|
# @option opts [Symbol] :id
|
118
|
+
# @option opts [Integer] :offset
|
119
|
+
# @option opts [Hash] :column_defaults
|
27
120
|
def initialize(opts = {})
|
121
|
+
opts = TermUtils::Tab.init_table_props.merge(opts)
|
28
122
|
@id = opts.fetch(:id, nil)
|
123
|
+
@offset = opts.fetch(:offset)
|
124
|
+
@column_separator_width = opts.fetch(:column_separator_width)
|
125
|
+
if opts.has_key? :column_defaults
|
126
|
+
@column_defaults = opts[:column_defaults].dup
|
127
|
+
else
|
128
|
+
@column_defaults = TermUtils::Tab.default_column_props
|
129
|
+
end
|
29
130
|
@columns = []
|
30
131
|
end
|
132
|
+
# Returns the properties of this one.
|
133
|
+
# @return [Hash]
|
134
|
+
def props
|
135
|
+
{:offset => @offset, :column_separator_width => @column_separator_width}
|
136
|
+
end
|
137
|
+
# Sets column default properties.
|
138
|
+
# @param opts [Hash]
|
139
|
+
# @option opts [Integer] :width
|
140
|
+
# @option opts [Symbol] :align
|
141
|
+
# @option opts [Boolean] :fixed
|
142
|
+
# @option opts [String] :ellipsis
|
143
|
+
# @option opts [Proc, String, nil] :format
|
144
|
+
def set_column_defaults(opts = {})
|
145
|
+
TermUtils::Tab.assign_column_props(@column_defaults, opts)
|
146
|
+
end
|
31
147
|
# Defines a column.
|
32
148
|
# @param id [Symbol]
|
33
149
|
# @param opts [Hash]
|
34
150
|
# @option opts [Integer] :width
|
151
|
+
# @option opts [Symbol] :align
|
152
|
+
# @option opts [Boolean] :fixed
|
153
|
+
# @option opts [String] :ellipsis
|
154
|
+
# @option opts [Proc, String, nil] :format
|
35
155
|
# @return [Tab::Column]
|
36
156
|
def define_column(id, opts = {}, &block)
|
37
157
|
col = @columns.find { |c| c.id == id }
|
@@ -41,7 +161,7 @@ module TermUtils
|
|
41
161
|
else
|
42
162
|
opts[:id] = id
|
43
163
|
opts[:index] = @columns.length
|
44
|
-
col = Column.new(opts)
|
164
|
+
col = Column.new(@column_defaults.merge(opts))
|
45
165
|
block.call(col) if block
|
46
166
|
col.validate
|
47
167
|
@columns << col
|
@@ -55,36 +175,37 @@ module TermUtils
|
|
55
175
|
@columns.find { |c| c.id == id }
|
56
176
|
end
|
57
177
|
# Creates a new table printer.
|
58
|
-
# @param io [
|
178
|
+
# @param io [#puts]
|
59
179
|
# @param opts [Hash]
|
60
180
|
# @option opts [Integer] :offset
|
61
181
|
# @option opts [Integer] :column_separator_width
|
62
182
|
# @return [Tab::Printer]
|
63
183
|
def printer(io, opts = {}, &block)
|
64
|
-
ptr = Printer.new(self, io, opts)
|
184
|
+
ptr = Printer.new(self, io, props.merge(opts))
|
65
185
|
block.call(ptr) if block
|
66
186
|
ptr
|
67
187
|
end
|
68
188
|
# Prints a header row.
|
69
|
-
# @param io [
|
189
|
+
# @param io [#puts]
|
70
190
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
71
191
|
# @param opts [Hash]
|
72
192
|
# @option opts [Integer] :offset
|
73
193
|
# @option opts [Integer] :column_separator_width
|
74
194
|
# @return [nil]
|
195
|
+
# @raise [TermUtils::Tab::TableError]
|
75
196
|
def print_header(io, values = nil, opts = {})
|
76
197
|
vals = values
|
77
198
|
if values.nil?
|
78
|
-
vals = @columns.map { |col| col.
|
199
|
+
vals = @columns.map { |col| col.header.title }
|
79
200
|
elsif values.is_a? Hash
|
80
201
|
vals = []
|
81
202
|
@columns.each do |col|
|
82
203
|
vals << values[col.id]
|
83
204
|
end
|
84
205
|
end
|
85
|
-
raise "wrong values (not array)" unless vals.is_a? Array
|
86
|
-
offset = opts.fetch(:offset
|
87
|
-
column_separator_width = opts.fetch(:column_separator_width
|
206
|
+
raise TermUtils::Tab::TableError, "wrong values (not array)" unless vals.is_a? Array
|
207
|
+
offset = opts.fetch(:offset)
|
208
|
+
column_separator_width = opts.fetch(:column_separator_width)
|
88
209
|
sb = StringIO.new
|
89
210
|
sb << " " * offset if offset > 0
|
90
211
|
@columns.each do |col|
|
@@ -94,12 +215,13 @@ module TermUtils
|
|
94
215
|
io.puts sb.string
|
95
216
|
end
|
96
217
|
# Prints a data row.
|
97
|
-
# @param io [
|
218
|
+
# @param io [#puts]
|
98
219
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
99
220
|
# @param opts [Hash]
|
100
221
|
# @option opts [Integer] :offset
|
101
222
|
# @option opts [Integer] :column_separator_width
|
102
223
|
# @return [nil]
|
224
|
+
# @raise [TermUtils::Tab::TableError]
|
103
225
|
def print_data(io, values, opts = {})
|
104
226
|
vals = values
|
105
227
|
if values.is_a? Hash
|
@@ -108,9 +230,9 @@ module TermUtils
|
|
108
230
|
vals << values[col.id]
|
109
231
|
end
|
110
232
|
end
|
111
|
-
raise "wrong values (not array)" unless vals.is_a? Array
|
112
|
-
offset = opts.fetch(:offset
|
113
|
-
column_separator_width = opts.fetch(:column_separator_width
|
233
|
+
raise TermUtils::Tab::TableError, "wrong values (not array)" unless vals.is_a? Array
|
234
|
+
offset = opts.fetch(:offset)
|
235
|
+
column_separator_width = opts.fetch(:column_separator_width)
|
114
236
|
sb = StringIO.new
|
115
237
|
sb << " " * offset if offset > 0
|
116
238
|
@columns.each do |col|
|
@@ -120,14 +242,14 @@ module TermUtils
|
|
120
242
|
io.puts sb.string
|
121
243
|
end
|
122
244
|
# Prints a separator row.
|
123
|
-
# @param io [
|
245
|
+
# @param io [#puts]
|
124
246
|
# @param opts [Hash]
|
125
247
|
# @option opts [Integer] :offset
|
126
248
|
# @option opts [Integer] :column_separator_width
|
127
249
|
# @return [nil]
|
128
250
|
def print_separator(io, opts = {})
|
129
|
-
offset = opts.fetch(:offset
|
130
|
-
column_separator_width = opts.fetch(:column_separator_width
|
251
|
+
offset = opts.fetch(:offset)
|
252
|
+
column_separator_width = opts.fetch(:column_separator_width)
|
131
253
|
sb = StringIO.new
|
132
254
|
sb << " " * offset if offset > 0
|
133
255
|
@columns.each do |col|
|
@@ -162,6 +284,8 @@ module TermUtils
|
|
162
284
|
attr_accessor :ellipsis
|
163
285
|
# @return [Proc, String, nil]
|
164
286
|
attr_accessor :format
|
287
|
+
# @return [TermUtils::Tab::Header]
|
288
|
+
attr_accessor :header
|
165
289
|
# @param opts [Hash]
|
166
290
|
# @option opts [Symbol] :id
|
167
291
|
# @option opts [Integer] :index
|
@@ -178,62 +302,65 @@ module TermUtils
|
|
178
302
|
@fixed = opts.fetch(:fixed, false)
|
179
303
|
@ellipsis = opts.fetch(:ellipsis, "?")
|
180
304
|
@format = opts.fetch(:format, nil)
|
305
|
+
@header = TermUtils::Tab::Header.new(:title => @id.to_s, :align => @align)
|
181
306
|
end
|
182
307
|
# Validates the column represented by this one.
|
183
308
|
# @return [nil]
|
309
|
+
# @raise [TermUtils::Tab::TableError]
|
184
310
|
def validate
|
185
|
-
raise "missing column id (nil)" if @id.nil?
|
186
|
-
raise "missing column index (nil)" if @index.nil?
|
187
|
-
raise "wrong column index (not integer)" unless @index.is_a? Integer
|
188
|
-
raise "wrong column index (not >= 0)" if @index < 0
|
189
|
-
raise "missing column width (nil)" if @width.nil?
|
190
|
-
raise "wrong column width (not integer)" unless @width.is_a? Integer
|
191
|
-
raise "wrong column width (not > 0)" if @width <= 0
|
192
|
-
raise "wrong column align (not :left or :right)" unless %i
|
193
|
-
|
194
|
-
# Aligns and cuts a given string.
|
195
|
-
# @param str [String]
|
196
|
-
# @return [String]
|
197
|
-
def align_cut(str)
|
198
|
-
if @align == :left
|
199
|
-
# Align left
|
200
|
-
if @fixed and (str.length > @width)
|
201
|
-
str = "#{str[0..(@width - (@ellipsis.length + 1))]}#{@ellipsis}"
|
202
|
-
else
|
203
|
-
str = "%-*s" % [@width, str]
|
204
|
-
end
|
205
|
-
else
|
206
|
-
# Align right
|
207
|
-
if @fixed and (str.length > @width)
|
208
|
-
str = "#{@ellipsis}#{str[(str.length - @width + @ellipsis.length)..(str.length - 1)]}"
|
209
|
-
else
|
210
|
-
str = "%*s" % [@width, str]
|
211
|
-
end
|
212
|
-
end
|
213
|
-
str
|
311
|
+
raise TermUtils::Tab::TableError, "missing column id (nil)" if @id.nil?
|
312
|
+
raise TermUtils::Tab::TableError, "missing column index (nil)" if @index.nil?
|
313
|
+
raise TermUtils::Tab::TableError, "wrong column index (not integer)" unless @index.is_a? Integer
|
314
|
+
raise TermUtils::Tab::TableError, "wrong column index (not >= 0)" if @index < 0
|
315
|
+
raise TermUtils::Tab::TableError, "missing column width (nil)" if @width.nil?
|
316
|
+
raise TermUtils::Tab::TableError, "wrong column width (not integer)" unless @width.is_a? Integer
|
317
|
+
raise TermUtils::Tab::TableError, "wrong column width (not > 0)" if @width <= 0
|
318
|
+
raise TermUtils::Tab::TableError, "wrong column align (not :left or :right)" unless %i[left right].index(@align)
|
319
|
+
@header.validate
|
214
320
|
end
|
215
321
|
# Renders a given header.
|
216
|
-
# @param
|
322
|
+
# @param val [Object]
|
217
323
|
# return [String]
|
218
|
-
def render_header(
|
219
|
-
|
220
|
-
|
221
|
-
align_cut str
|
324
|
+
def render_header(val)
|
325
|
+
src = (val.is_a? String) ? val : val.to_s
|
326
|
+
TermUtils::Tab.align_cut(src, @header.align, @fixed, @width, @ellipsis)
|
222
327
|
end
|
223
328
|
# Renders a given value.
|
224
|
-
# @param
|
329
|
+
# @param val [Object]
|
225
330
|
# return [String]
|
226
|
-
def render_data(
|
227
|
-
|
228
|
-
if
|
331
|
+
def render_data(val)
|
332
|
+
src = val
|
333
|
+
if val
|
229
334
|
if @format.is_a? Proc
|
230
|
-
|
335
|
+
src = @format.call(val)
|
231
336
|
elsif @format.is_a? String
|
232
|
-
|
337
|
+
src = @format % val
|
233
338
|
end
|
234
339
|
end
|
235
|
-
|
236
|
-
align_cut
|
340
|
+
src = (src.is_a? String) ? src : src.to_s
|
341
|
+
TermUtils::Tab.align_cut(src, @align, @fixed, @width, @ellipsis)
|
342
|
+
end
|
343
|
+
end
|
344
|
+
# Represents a column header.
|
345
|
+
class Header
|
346
|
+
# @return [String]
|
347
|
+
attr_accessor :title
|
348
|
+
# @return [Symbol] `:left`, `:right`.
|
349
|
+
attr_accessor :align
|
350
|
+
# Constructs a new Header.
|
351
|
+
# @param opts [Hash]
|
352
|
+
# @option opts [String] :title
|
353
|
+
# @option opts [Symbol] :align
|
354
|
+
def initialize(opts = {})
|
355
|
+
@title = opts.fetch(:title)
|
356
|
+
@align = opts.fetch(:align, :left)
|
357
|
+
end
|
358
|
+
# Validates the column represented by this one.
|
359
|
+
# @return [nil]
|
360
|
+
# @raise [TermUtils::Tab::TableError]
|
361
|
+
def validate
|
362
|
+
raise TermUtils::Tab::TableError, "missing header title (nil)" if @title.nil?
|
363
|
+
raise TermUtils::Tab::TableError, "wrong header align (not :left or :right)" unless %i[left right].index(@align)
|
237
364
|
end
|
238
365
|
end
|
239
366
|
# Represents a table printer.
|
@@ -262,8 +389,8 @@ module TermUtils
|
|
262
389
|
# @option opts [Integer] :offset
|
263
390
|
# @option opts [Integer] :column_separator_width
|
264
391
|
# @return [nil]
|
265
|
-
def header(values = nil, opts =
|
266
|
-
@table.print_header(@io, values, @options.merge(opts))
|
392
|
+
def header(values = nil, opts = nil)
|
393
|
+
@table.print_header(@io, values, opts ? @options.merge(opts) : @options)
|
267
394
|
end
|
268
395
|
# Prints a data row.
|
269
396
|
# @param values [Array<Object>, Hash<Symbol, Object>]
|
@@ -271,26 +398,60 @@ module TermUtils
|
|
271
398
|
# @option opts [Integer] :offset
|
272
399
|
# @option opts [Integer] :column_separator_width
|
273
400
|
# @return [nil]
|
274
|
-
def data(values, opts =
|
275
|
-
@table.print_data(@io, values, @options.merge(opts))
|
401
|
+
def data(values, opts = nil)
|
402
|
+
@table.print_data(@io, values, opts ? @options.merge(opts) : @options)
|
276
403
|
end
|
277
404
|
# Prints a separator.
|
278
405
|
# @param opts [Hash]
|
279
406
|
# @option opts [Integer] :offset
|
280
407
|
# @option opts [Integer] :column_separator_width
|
281
408
|
# @return [nil]
|
282
|
-
def separator(opts =
|
283
|
-
@table.print_separator(@io, @options.merge(opts))
|
409
|
+
def separator(opts = nil)
|
410
|
+
@table.print_separator(@io, opts ? @options.merge(opts) : @options)
|
284
411
|
end
|
285
412
|
end
|
286
413
|
# Represents a holder of tables.
|
287
414
|
class Holder
|
415
|
+
# @return [Hash] `:offset`, `:column_separator_width`.
|
416
|
+
attr_accessor :table_defaults
|
417
|
+
# @return [Hash] `:width`, `:align`, `:fixed`, `:ellipsis`, `:format`.
|
418
|
+
attr_accessor :column_defaults
|
288
419
|
# @return [Hash<Symbol, Tab::Table>]
|
289
420
|
attr_accessor :tables
|
290
421
|
def initialize(opts = {})
|
422
|
+
@table_defaults = TermUtils::Tab.init_table_props
|
423
|
+
@column_defaults = TermUtils::Tab.init_column_props
|
291
424
|
@tables = {}
|
292
425
|
end
|
293
|
-
#
|
426
|
+
# Sets table default properties.
|
427
|
+
# @param opts [Hash]
|
428
|
+
# @option opts [Integer] :offset
|
429
|
+
# @option opts [Symbol] :column_separator_width
|
430
|
+
def set_table_defaults(opts = {})
|
431
|
+
TermUtils::Tab.assign_table_props(@table_defaults, opts)
|
432
|
+
end
|
433
|
+
# Sets column default properties.
|
434
|
+
# @param opts [Hash]
|
435
|
+
# @option opts [Integer] :width
|
436
|
+
# @option opts [Symbol] :align
|
437
|
+
# @option opts [Boolean] :fixed
|
438
|
+
# @option opts [String] :ellipsis
|
439
|
+
# @option opts [Proc, String, nil] :format
|
440
|
+
def set_column_defaults(opts = {})
|
441
|
+
TermUtils::Tab.assign_column_props(@column_defaults, opts)
|
442
|
+
end
|
443
|
+
# Creates a new table, using default properties, without registering it.
|
444
|
+
# @param opts [Hash]
|
445
|
+
# @return [Tab::Table]
|
446
|
+
def create_table(opts = {}, &block)
|
447
|
+
opts[:offset] = @table_defaults.fetch(:offset)
|
448
|
+
opts[:column_separator_width] = @table_defaults.fetch(:column_separator_width)
|
449
|
+
opts[:column_defaults] = @column_defaults.dup
|
450
|
+
new_tab = Table.new(opts)
|
451
|
+
block.call(new_tab) if block
|
452
|
+
new_tab
|
453
|
+
end
|
454
|
+
# Defines a table, using default properties.
|
294
455
|
# @param id [Symbol]
|
295
456
|
# @param opts [Hash]
|
296
457
|
# @return [Tab::Table]
|
@@ -299,6 +460,9 @@ module TermUtils
|
|
299
460
|
block.call(@tables[id]) if block
|
300
461
|
else
|
301
462
|
opts[:id] = id
|
463
|
+
opts[:offset] = @table_defaults.fetch(:offset)
|
464
|
+
opts[:column_separator_width] = @table_defaults.fetch(:column_separator_width)
|
465
|
+
opts[:column_defaults] = @column_defaults.dup
|
302
466
|
new_tab = Table.new(opts)
|
303
467
|
block.call(new_tab) if block
|
304
468
|
@tables[id] = new_tab
|
@@ -323,20 +487,43 @@ module TermUtils
|
|
323
487
|
end
|
324
488
|
end
|
325
489
|
@@default_holder = Holder.new
|
326
|
-
#
|
490
|
+
# Sets table default properties.
|
491
|
+
# @param opts [Hash]
|
492
|
+
# @option opts [Integer] :offset
|
493
|
+
# @option opts [Symbol] :column_separator_width
|
494
|
+
def self.set_table_defaults(opts = {})
|
495
|
+
@@default_holder.set_table_defaults(opts)
|
496
|
+
end
|
497
|
+
# Sets column default properties.
|
498
|
+
# @param opts [Hash]
|
499
|
+
# @option opts [Integer] :width
|
500
|
+
# @option opts [Symbol] :align
|
501
|
+
# @option opts [Boolean] :fixed
|
502
|
+
# @option opts [String] :ellipsis
|
503
|
+
# @option opts [Proc, String, nil] :format
|
504
|
+
def self.set_column_defaults(opts = {})
|
505
|
+
@@default_holder.set_column_defaults(opts)
|
506
|
+
end
|
507
|
+
# Creates a new Table, using default properties, without registering it.
|
508
|
+
# @param opts [Hash]
|
509
|
+
# @return [Tab::Table]
|
510
|
+
def self.create_table(opts = {}, &block)
|
511
|
+
@@default_holder.create_table(opts, &block)
|
512
|
+
end
|
513
|
+
# Defines a new Table, using default properties, and registers it.
|
327
514
|
# @param id [Symbol]
|
328
515
|
# @param opts [Hash]
|
329
516
|
# @return [Tab::Table]
|
330
517
|
def self.define_table(id, opts = {}, &block)
|
331
|
-
@@default_holder.define_table(id, opts
|
518
|
+
@@default_holder.define_table(id, opts, &block)
|
332
519
|
end
|
333
|
-
# Finds a table.
|
520
|
+
# Finds a registered table.
|
334
521
|
# @param id [Symbol]
|
335
522
|
# @return [Tab::Table, nil]
|
336
523
|
def self.find_table(id)
|
337
524
|
@@default_holder.find_table(id)
|
338
525
|
end
|
339
|
-
# Creates a new
|
526
|
+
# Creates a new Printer for a registered Table.
|
340
527
|
# @param id [Symbol]
|
341
528
|
# @param io [IO]
|
342
529
|
# @param opts [Hash]
|
data/term_utils.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: term_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Baron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Provides terminal utilities like table formatting.
|
14
14
|
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- doc/TermUtils/AP/ParseError.html
|
35
35
|
- doc/TermUtils/AP/Parser.html
|
36
36
|
- doc/TermUtils/AP/Result.html
|
37
|
-
- doc/TermUtils/AP/ResultView.html
|
38
37
|
- doc/TermUtils/AP/Syntax.html
|
39
38
|
- doc/TermUtils/AP/SyntaxError.html
|
40
39
|
- doc/TermUtils/FF.html
|
@@ -45,9 +44,11 @@ files:
|
|
45
44
|
- doc/TermUtils/PropertyTreeNode.html
|
46
45
|
- doc/TermUtils/Tab.html
|
47
46
|
- doc/TermUtils/Tab/Column.html
|
47
|
+
- doc/TermUtils/Tab/Header.html
|
48
48
|
- doc/TermUtils/Tab/Holder.html
|
49
49
|
- doc/TermUtils/Tab/Printer.html
|
50
50
|
- doc/TermUtils/Tab/Table.html
|
51
|
+
- doc/TermUtils/Tab/TableError.html
|
51
52
|
- doc/_index.html
|
52
53
|
- doc/class_list.html
|
53
54
|
- doc/css/common.css
|