term_utils 0.3.2 → 0.5.0

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