tty 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -3
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +42 -306
  5. data/lib/tty/{text → shell}/distance.rb +5 -27
  6. data/lib/tty/shell/suggestion.rb +42 -22
  7. data/lib/tty/version.rb +1 -1
  8. data/lib/tty.rb +2 -42
  9. data/spec/tty/{text → shell}/distance/distance_spec.rb +4 -4
  10. data/spec/tty/shell/distance/initialize_spec.rb +14 -0
  11. data/tty.gemspec +4 -3
  12. metadata +37 -269
  13. data/benchmarks/table.rb +0 -40
  14. data/lib/tty/table/border/ascii.rb +0 -32
  15. data/lib/tty/table/border/null.rb +0 -37
  16. data/lib/tty/table/border/row_line.rb +0 -18
  17. data/lib/tty/table/border/unicode.rb +0 -32
  18. data/lib/tty/table/border.rb +0 -222
  19. data/lib/tty/table/border_dsl.rb +0 -251
  20. data/lib/tty/table/border_options.rb +0 -53
  21. data/lib/tty/table/column_set.rb +0 -121
  22. data/lib/tty/table/columns.rb +0 -170
  23. data/lib/tty/table/error.rb +0 -18
  24. data/lib/tty/table/field.rb +0 -139
  25. data/lib/tty/table/header.rb +0 -133
  26. data/lib/tty/table/indentation.rb +0 -52
  27. data/lib/tty/table/operation/alignment.rb +0 -107
  28. data/lib/tty/table/operation/alignment_set.rb +0 -77
  29. data/lib/tty/table/operation/escape.rb +0 -30
  30. data/lib/tty/table/operation/filter.rb +0 -34
  31. data/lib/tty/table/operation/padding.rb +0 -95
  32. data/lib/tty/table/operation/truncation.rb +0 -55
  33. data/lib/tty/table/operation/wrapped.rb +0 -58
  34. data/lib/tty/table/operations.rb +0 -69
  35. data/lib/tty/table/orientation/horizontal.rb +0 -48
  36. data/lib/tty/table/orientation/vertical.rb +0 -38
  37. data/lib/tty/table/orientation.rb +0 -57
  38. data/lib/tty/table/padder.rb +0 -180
  39. data/lib/tty/table/renderer/ascii.rb +0 -16
  40. data/lib/tty/table/renderer/basic.rb +0 -294
  41. data/lib/tty/table/renderer/color.rb +0 -12
  42. data/lib/tty/table/renderer/unicode.rb +0 -21
  43. data/lib/tty/table/renderer.rb +0 -101
  44. data/lib/tty/table/row.rb +0 -217
  45. data/lib/tty/table/transformation.rb +0 -39
  46. data/lib/tty/table/validatable.rb +0 -64
  47. data/lib/tty/table.rb +0 -476
  48. data/lib/tty/text/truncation.rb +0 -99
  49. data/lib/tty/text/wrapping.rb +0 -118
  50. data/lib/tty/text.rb +0 -98
  51. data/spec/tty/table/access_spec.rb +0 -86
  52. data/spec/tty/table/add_row_spec.rb +0 -28
  53. data/spec/tty/table/border/ascii/rendering_spec.rb +0 -90
  54. data/spec/tty/table/border/new_spec.rb +0 -27
  55. data/spec/tty/table/border/null/rendering_spec.rb +0 -130
  56. data/spec/tty/table/border/options/from_spec.rb +0 -38
  57. data/spec/tty/table/border/options/new_spec.rb +0 -14
  58. data/spec/tty/table/border/unicode/rendering_spec.rb +0 -63
  59. data/spec/tty/table/border_options/new_spec.rb +0 -20
  60. data/spec/tty/table/border_options/update_spec.rb +0 -18
  61. data/spec/tty/table/column_set/extract_widths_spec.rb +0 -15
  62. data/spec/tty/table/column_set/total_width_spec.rb +0 -15
  63. data/spec/tty/table/column_set/widths_from_spec.rb +0 -51
  64. data/spec/tty/table/columns/enforce_spec.rb +0 -68
  65. data/spec/tty/table/columns/widths_spec.rb +0 -35
  66. data/spec/tty/table/data_spec.rb +0 -14
  67. data/spec/tty/table/each_spec.rb +0 -41
  68. data/spec/tty/table/each_with_index_spec.rb +0 -57
  69. data/spec/tty/table/empty_spec.rb +0 -23
  70. data/spec/tty/table/eql_spec.rb +0 -34
  71. data/spec/tty/table/field/equality_spec.rb +0 -51
  72. data/spec/tty/table/field/length_spec.rb +0 -21
  73. data/spec/tty/table/field/lines_spec.rb +0 -21
  74. data/spec/tty/table/field/new_spec.rb +0 -29
  75. data/spec/tty/table/field/width_spec.rb +0 -23
  76. data/spec/tty/table/filter_spec.rb +0 -23
  77. data/spec/tty/table/header/call_spec.rb +0 -30
  78. data/spec/tty/table/header/height_spec.rb +0 -27
  79. data/spec/tty/table/header/new_spec.rb +0 -25
  80. data/spec/tty/table/header/set_spec.rb +0 -20
  81. data/spec/tty/table/header/to_ary_spec.rb +0 -14
  82. data/spec/tty/table/header_spec.rb +0 -13
  83. data/spec/tty/table/indentation/insert_indent_spec.rb +0 -27
  84. data/spec/tty/table/initialize_spec.rb +0 -88
  85. data/spec/tty/table/operation/alignment/format_spec.rb +0 -47
  86. data/spec/tty/table/operation/alignment/new_spec.rb +0 -31
  87. data/spec/tty/table/operation/alignment_set/call_spec.rb +0 -39
  88. data/spec/tty/table/operation/alignment_set/each_spec.rb +0 -17
  89. data/spec/tty/table/operation/alignment_set/new_spec.rb +0 -27
  90. data/spec/tty/table/operation/alignment_set/to_ary_spec.rb +0 -14
  91. data/spec/tty/table/operation/escape/call_spec.rb +0 -16
  92. data/spec/tty/table/operation/filter/call_spec.rb +0 -17
  93. data/spec/tty/table/operation/truncation/call_spec.rb +0 -32
  94. data/spec/tty/table/operation/truncation/truncate_spec.rb +0 -22
  95. data/spec/tty/table/operation/wrapped/call_spec.rb +0 -33
  96. data/spec/tty/table/operation/wrapped/wrap_spec.rb +0 -23
  97. data/spec/tty/table/operations/new_spec.rb +0 -30
  98. data/spec/tty/table/options_spec.rb +0 -25
  99. data/spec/tty/table/orientation_spec.rb +0 -145
  100. data/spec/tty/table/padder/parse_spec.rb +0 -45
  101. data/spec/tty/table/padder/to_s_spec.rb +0 -14
  102. data/spec/tty/table/padding_spec.rb +0 -120
  103. data/spec/tty/table/properties_spec.rb +0 -25
  104. data/spec/tty/table/render_spec.rb +0 -63
  105. data/spec/tty/table/render_with_spec.rb +0 -106
  106. data/spec/tty/table/renderer/ascii/indentation_spec.rb +0 -41
  107. data/spec/tty/table/renderer/ascii/padding_spec.rb +0 -61
  108. data/spec/tty/table/renderer/ascii/render_spec.rb +0 -68
  109. data/spec/tty/table/renderer/ascii/resizing_spec.rb +0 -114
  110. data/spec/tty/table/renderer/ascii/separator_spec.rb +0 -28
  111. data/spec/tty/table/renderer/basic/alignment_spec.rb +0 -88
  112. data/spec/tty/table/renderer/basic/coloring_spec.rb +0 -46
  113. data/spec/tty/table/renderer/basic/extract_column_widths_spec.rb +0 -28
  114. data/spec/tty/table/renderer/basic/filter_spec.rb +0 -53
  115. data/spec/tty/table/renderer/basic/indentation_spec.rb +0 -48
  116. data/spec/tty/table/renderer/basic/multiline_content_spec.rb +0 -135
  117. data/spec/tty/table/renderer/basic/new_spec.rb +0 -22
  118. data/spec/tty/table/renderer/basic/options_spec.rb +0 -48
  119. data/spec/tty/table/renderer/basic/padding_spec.rb +0 -52
  120. data/spec/tty/table/renderer/basic/render_spec.rb +0 -57
  121. data/spec/tty/table/renderer/basic/resizing_spec.rb +0 -96
  122. data/spec/tty/table/renderer/basic/separator_spec.rb +0 -43
  123. data/spec/tty/table/renderer/basic/truncation_spec.rb +0 -35
  124. data/spec/tty/table/renderer/basic/wrapping_spec.rb +0 -40
  125. data/spec/tty/table/renderer/basic_spec.rb +0 -0
  126. data/spec/tty/table/renderer/border_spec.rb +0 -104
  127. data/spec/tty/table/renderer/render_spec.rb +0 -36
  128. data/spec/tty/table/renderer/select_spec.rb +0 -22
  129. data/spec/tty/table/renderer/style_spec.rb +0 -72
  130. data/spec/tty/table/renderer/unicode/indentation_spec.rb +0 -41
  131. data/spec/tty/table/renderer/unicode/padding_spec.rb +0 -61
  132. data/spec/tty/table/renderer/unicode/render_spec.rb +0 -68
  133. data/spec/tty/table/renderer/unicode/separator_spec.rb +0 -26
  134. data/spec/tty/table/renderer_spec.rb +0 -19
  135. data/spec/tty/table/rotate_spec.rb +0 -86
  136. data/spec/tty/table/row/access_spec.rb +0 -25
  137. data/spec/tty/table/row/call_spec.rb +0 -41
  138. data/spec/tty/table/row/data_spec.rb +0 -26
  139. data/spec/tty/table/row/each_spec.rb +0 -31
  140. data/spec/tty/table/row/equality_spec.rb +0 -73
  141. data/spec/tty/table/row/height_spec.rb +0 -27
  142. data/spec/tty/table/row/new_spec.rb +0 -41
  143. data/spec/tty/table/row/to_ary_spec.rb +0 -14
  144. data/spec/tty/table/to_s_spec.rb +0 -63
  145. data/spec/tty/table/transformation/extract_tuples_spec.rb +0 -35
  146. data/spec/tty/table/validatable/validate_options_spec.rb +0 -33
  147. data/spec/tty/table/validatable_spec.rb +0 -32
  148. data/spec/tty/text/distance/initialize_spec.rb +0 -14
  149. data/spec/tty/text/distance_spec.rb +0 -11
  150. data/spec/tty/text/truncate_spec.rb +0 -12
  151. data/spec/tty/text/truncation/initialize_spec.rb +0 -29
  152. data/spec/tty/text/truncation/truncate_spec.rb +0 -94
  153. data/spec/tty/text/wrap_spec.rb +0 -13
  154. data/spec/tty/text/wrapping/initialize_spec.rb +0 -25
  155. data/spec/tty/text/wrapping/wrap_spec.rb +0 -97
@@ -1,64 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module TTY
4
- class Table
5
- # Mixin to provide validation for {Table}.
6
- #
7
- # Include this mixin to add validation for options.
8
- #
9
- # @api private
10
- module Validatable
11
- # Check if table rows are the equal size
12
- #
13
- # @raise [DimensionMismatchError]
14
- # if the rows are not equal length
15
- #
16
- # @return [nil]
17
- #
18
- # @api private
19
- def assert_row_sizes(rows)
20
- size = (rows[0] || []).size
21
- rows.each do |row|
22
- next if row.size == size
23
- fail TTY::Table::DimensionMismatchError,
24
- "row size differs (#{row.size} should be #{size})"
25
- end
26
- end
27
-
28
- # Check if table type is provided
29
- #
30
- # @raise [ArgumentRequired]
31
- #
32
- # @return [Table]
33
- #
34
- # @api private
35
- def assert_table_type(value)
36
- return value if value.is_a?(TTY::Table)
37
- fail ArgumentRequired,
38
- "Expected TTY::Table instance, got #{value.inspect}"
39
- end
40
-
41
- # def assert_matching_widths(rows)
42
- # end
43
- #
44
- # def assert_string_values(rows)
45
- # end
46
-
47
- # Check if options are of required type
48
- #
49
- # @api private
50
- def validate_options!(options)
51
- header = options[:header]
52
- rows = options[:rows]
53
-
54
- if header && (!header.is_a?(Array) || header.empty?)
55
- fail InvalidArgument, ':header must be a non-empty array'
56
- end
57
-
58
- if rows && !(rows.is_a?(Array) || rows.is_a?(Hash))
59
- fail InvalidArgument, ':rows must be a non-empty array or hash'
60
- end
61
- end
62
- end # Validatable
63
- end # Table
64
- end # TTY
data/lib/tty/table.rb DELETED
@@ -1,476 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'forwardable'
4
- require 'tty/table/renderer'
5
- require 'tty/table/error'
6
- require 'tty/table/validatable'
7
- require 'tty/table/header'
8
- require 'tty/table/row'
9
-
10
- module TTY
11
- # A core class intended for storing data in a structured, tabular form.
12
- # Once the data is stored in a TTY::Table various operations can be performed
13
- # before the information is dumped into a stdout.
14
- class Table
15
- include Comparable, Enumerable, Validatable, Equatable
16
- extend Forwardable
17
-
18
- # The table header
19
- #
20
- # @return [Enumerable]
21
- #
22
- # @api public
23
- attr_reader :header
24
-
25
- # The table rows
26
- #
27
- # @return [Enumerable]
28
- #
29
- # @api private
30
- attr_reader :rows
31
- # private :rows
32
-
33
- # The table orientation out of :horizontal and :vertical
34
- #
35
- # @reutrn [TTY::Table::Orientation]
36
- #
37
- # @api public
38
- attr_reader :orientation
39
-
40
- # The table original row count
41
- #
42
- # @reutrn [Integer]
43
- #
44
- # @api public
45
- attr_reader :original_rows
46
-
47
- # The table original column count
48
- #
49
- # @reutrn [Integer]
50
- #
51
- # @api public
52
- attr_reader :original_columns
53
-
54
- # Subset of safe methods that both Array and Hash implement
55
- def_delegators(:data, :assoc, :flatten, :include?, :index,
56
- :length, :select, :to_a, :values_at, :pretty_print, :rassoc)
57
-
58
- # Create a new Table where each argument is a row
59
- #
60
- # @example
61
- # table = TTY::Table[['a1', 'a2'], ['b1', 'b2']]
62
- #
63
- # @api public
64
- def self.[](*rows)
65
- new(rows: rows)
66
- end
67
-
68
- # Instantiate a new Table
69
- #
70
- # @example of no header
71
- # rows = [ ['a1', 'a2'], ['b1', 'b2'] ]
72
- # table = Table.new rows
73
- #
74
- # @example of direct parameters
75
- # rows = [ ['a1', 'a2'], ['b1', 'b2'] ]
76
- # table = Table.new ['Header 1', 'Header 2'], rows
77
- #
78
- # @example of parameters passed as options
79
- # rows = [ ['a1', 'a2'], ['b1', 'b2'] ]
80
- # table = Table.new header: ['Header 1', 'Header 2'], rows: rows
81
- #
82
- # @example of parameters passed as hash
83
- # Table.new [ {'Header1' => ['a1','a2'], 'Header2' => ['b1', 'b2'] }] }
84
- #
85
- # @param [Array[Symbol], Hash] *args
86
- #
87
- # @api public
88
- def self.new(*args, &block)
89
- options = Utils.extract_options!(args)
90
- if args.size.nonzero?
91
- super(Transformation.extract_tuples(args).merge(options), &block)
92
- else
93
- super(options, &block)
94
- end
95
- end
96
-
97
- # Initialize a Table
98
- #
99
- # @param [Hash] options
100
- # the options to create the table with
101
- # @option options [String] :header
102
- # column names to be displayed
103
- # @option options [String] :rows
104
- # Array of Arrays expressing the rows
105
- # @option options [Symbol] :orientation
106
- # used to transform table orientation
107
- #
108
- # @return [TTY::Table]
109
- #
110
- # @api private
111
- def initialize(options = {}, &block)
112
- validate_options! options
113
- @converter = Necromancer.new
114
- @header = (value = options[:header]) ? Header.new(value) : nil
115
- @rows = coerce(options.fetch(:rows) { Row.new([]) })
116
- @rotated = false
117
- self.orientation = options.fetch(:orientation) { :horizontal }
118
-
119
- assert_row_sizes @rows
120
- orientation.transform(self)
121
-
122
- yield_or_eval(&block) if block_given?
123
- end
124
-
125
- # Provides access to all table data
126
- #
127
- # @return [Array]
128
- #
129
- # @api public
130
- def data
131
- (header && !header.empty?) ? [header] + rows : rows
132
- end
133
-
134
- # Sets table orientation
135
- #
136
- # @param [String,Symbol] value
137
- #
138
- # @api public
139
- def orientation=(value)
140
- @orientation = Orientation.coerce(value)
141
- end
142
-
143
- # Marks this table as rotated
144
- #
145
- # @return [Boolean]
146
- #
147
- # @api public
148
- def rotated?
149
- @rotated
150
- end
151
-
152
- # Rotate the table between vertical and horizontal orientation
153
- #
154
- # @return [self]
155
- #
156
- # @api private
157
- def rotate
158
- orientation.transform(self)
159
- self
160
- end
161
-
162
- # Rotate the table vertically
163
- #
164
- # @api private
165
- def rotate_vertical
166
- @original_columns = column_size
167
- @original_rows = row_size
168
- @rows = orientation.slice(self)
169
- @header = [] if header
170
- @rotated = true
171
- end
172
-
173
- # Rotate the table horizontally
174
- #
175
- # @api private
176
- def rotate_horizontal
177
- return unless rotated?
178
- head, body = orientation.slice(self)
179
- if header && header.empty?
180
- @header = head[0]
181
- @rows = body.map { |row| to_row(row, @header) }
182
- else
183
- @rows = body.map { |row| to_row(row) }
184
- end
185
- end
186
-
187
- # Lookup element of the table given a row(i) and column(j)
188
- #
189
- # @api public
190
- def [](row_index, column_index = false)
191
- return row(row_index) unless column_index
192
- if row_index >= 0 && column_index >= 0
193
- rows.fetch(row_index) { return nil }[column_index]
194
- else
195
- fail TTY::Table::TupleMissing.new(row_index, column_index)
196
- end
197
- end
198
- alias at []
199
- alias element []
200
- alias component []
201
-
202
- # Set table value at row(i) and column(j)
203
- #
204
- # @api private
205
- def []=(row_index, column_index, val)
206
- @rows[row_index][column_index] = val
207
- end
208
- private :[]=
209
-
210
- # Return a row number at the index of the table as an Array.
211
- # When a block is given, the elements of that Array are iterated over.
212
- #
213
- # @example
214
- # rows = [ ['a1', 'a2'], ['b1', 'b2'] ]
215
- # table = TTY::Table.new :rows => rows
216
- # table.row(1) { |element| ... }
217
- #
218
- # @param [Integer] index
219
- #
220
- # @yield []
221
- # optional block to execute in the iteration operation
222
- #
223
- # @return [self]
224
- #
225
- # @api public
226
- def row(index, &block)
227
- if block_given?
228
- rows.fetch(index) { return self }.each(&block)
229
- self
230
- else
231
- rows.fetch(index) { return nil }
232
- end
233
- end
234
-
235
- # Return a column number at the index of the table as an Array.
236
- # If the table has a header then column can be searched by header name.
237
- # When a block is given, the elements of that Array are iterated over.
238
- #
239
- # @example
240
- # header = [:h1, :h2]
241
- # rows = [ ['a1', 'a2'], ['b1', 'b2'] ]
242
- # table = TTY::Table.new :rows => rows, :header => header
243
- # table.column(1)
244
- # table.column(1) { |element| ... }
245
- # table.column(:h1)
246
- # table.column(:h1) { |element| ... }
247
- #
248
- # @param [Integer, String, Symbol] index
249
- #
250
- # @yield []
251
- # optional block to execute in the iteration operation
252
- #
253
- # @return [self]
254
- #
255
- # @api public
256
- def column(index)
257
- index_unknown = index.is_a?(Integer) && (index >= column_size || index < 0)
258
- if block_given?
259
- return self if index_unknown
260
- rows.map { |row| yield row[index] }
261
- else
262
- return nil if index_unknown
263
- rows.map { |row| row[index] }.compact
264
- end
265
- end
266
-
267
- # Add row to table
268
- #
269
- # @param [Array] row
270
- #
271
- # @return [self]
272
- #
273
- # @api public
274
- def <<(row)
275
- rows_copy = rows.dup
276
- assert_row_sizes rows_copy << row
277
- rows << to_row(row)
278
- self
279
- end
280
-
281
- # Iterate over each tuple in the set
282
- #
283
- # @example
284
- # table = TTY::Table.new(header, tuples)
285
- # table.each { |row| ... }
286
- #
287
- # @yield [Array[Array]]
288
- #
289
- # @return [self]
290
- #
291
- # @api public
292
- def each
293
- return to_enum unless block_given?
294
- data.each { |row| yield row }
295
- self
296
- end
297
-
298
- # Iterate over each element yielding in addition row and column index
299
- #
300
- # @example
301
- # table = TTY::Table.new(header, tuples)
302
- # table.each_with_index { |el, row, col| puts "#{el} at #{row},#{col}" }
303
- #
304
- # @return self
305
- #
306
- # @api public
307
- def each_with_index
308
- return to_enum unless block_given?
309
- start_index = 0
310
- if header && !header.empty?
311
- header.attributes.each_with_index do |el, col_index|
312
- yield el, 0, col_index
313
- end
314
- start_index = 1
315
- end
316
-
317
- rows.each_with_index do |row, row_index|
318
- row.fields.each_with_index do |el, col_index|
319
- yield el, row_index + start_index, col_index
320
- end
321
- end
322
- self
323
- end
324
-
325
- # Return the number of columns
326
- #
327
- # @example
328
- # table.column_size # => 5
329
- #
330
- # @return [Integer]
331
- #
332
- # @api public
333
- # TODO: renmae to columns_size
334
- def column_size
335
- rows.size > 0 ? rows[0].size : 0
336
- end
337
-
338
- # Return the number of rows
339
- #
340
- # @example
341
- # table.row_size # => 5
342
- #
343
- # @return [Integer]
344
- #
345
- # @api public
346
- def row_size
347
- rows.size
348
- end
349
-
350
- # Return the number of rows and columns
351
- #
352
- # @example
353
- # table.size # => [3,5]
354
- #
355
- # @return [Array] row x columns
356
- #
357
- # @api public
358
- def size
359
- [row_size, column_size]
360
- end
361
-
362
- # Check table width
363
- #
364
- # @return [Integer] width
365
- #
366
- # @api public
367
- def width
368
- ColumnSet.new(self).total_width
369
- end
370
-
371
- # Return true if this is an empty table, i.e. if the number of
372
- # rows or the number of columns is 0
373
- #
374
- # @return [Boolean]
375
- #
376
- # @api public
377
- def empty?
378
- column_size == 0 || row_size == 0
379
- end
380
-
381
- # Return string representation of table using basic renderer.
382
- #
383
- # @return [String]
384
- #
385
- # @api public
386
- def to_s
387
- render(:basic)
388
- end
389
-
390
- # Return renderer for this table
391
- #
392
- # @param [Symbol] type
393
- # the renderer type
394
- #
395
- # @param [Hash] options
396
- # the renderer options
397
- #
398
- def renderer(type = :basic, options = {})
399
- @renderer ||= Renderer.select(type).new(self, options)
400
- end
401
-
402
- # Render a given table. This method takes options which will be passed
403
- # to the renderer prior to rendering, which allows the caller to set any
404
- # table rendering variables.
405
- #
406
- # @param [Symbol] renderer_type
407
- # the renderer to be used
408
- #
409
- # @param [Hash] options
410
- #
411
- # @yield [renderer]
412
- #
413
- # @yieldparam [TTY::Table::Renderer] renderer
414
- # the renderer for the table
415
- #
416
- # @return [String]
417
- #
418
- # @api public
419
- def render(*args, &block)
420
- render_with(nil, *args, &block)
421
- end
422
-
423
- # Render a given table using custom border class.
424
- #
425
- # @param [TTY::Table::Border]
426
- #
427
- # @param [Symbol] renderer_type
428
- #
429
- # @yield [renderer]
430
- #
431
- # @yieldparam [TTY::Table::Renderer] renderer
432
- # the renderer for the table
433
- #
434
- # @return [String]
435
- #
436
- # @api public
437
- def render_with(border_class, renderer_type=(not_set=true), options={}, &block)
438
- unless not_set
439
- if renderer_type.respond_to?(:to_hash)
440
- options = renderer_type
441
- else
442
- options[:renderer] = renderer_type
443
- end
444
- end
445
-
446
- Renderer.render_with(border_class, self, options, &block)
447
- end
448
-
449
- # Coerce an Enumerable into a Table
450
- # This coercion mechanism is used by Table to handle Enumerable types
451
- # and force them into array type.
452
- #
453
- # @param [Enumerable] object
454
- # the object to coerce
455
- #
456
- # @return [Array]
457
- #
458
- # @api public
459
- def coerce(rows)
460
- rows = @converter.convert(rows).to(:array)
461
- rows.map { |row| to_row(row, header) }
462
- end
463
-
464
- private
465
-
466
- # Evaluate block
467
- #
468
- # @return [Table]
469
- #
470
- # @api private
471
- def yield_or_eval(&block)
472
- return unless block
473
- block.arity > 0 ? yield(self) : instance_eval(&block)
474
- end
475
- end # Table
476
- end # TTY
@@ -1,99 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module TTY
4
- class Text
5
- # A class responsible for text truncation operations
6
- class Truncation
7
- include Unicode
8
-
9
- DEFAULT_TRAILING = '…'.freeze
10
-
11
- DEFAULT_TRUNCATION_LENGTH = 30.freeze
12
-
13
- attr_reader :text
14
-
15
- attr_reader :length
16
-
17
- attr_reader :separator
18
-
19
- attr_reader :trailing
20
-
21
- attr_reader :escape
22
-
23
- attr_reader :color
24
-
25
- # Initialize a Truncation
26
- #
27
- # @param [String] text
28
- # the text to be truncated
29
- #
30
- # @overload new(text, value)
31
- # truncates text at given value
32
- #
33
- # @param [Integer] value
34
- #
35
- # @overload new(text, value, options)
36
- # @param [Integer] value
37
- #
38
- # @param [Hash] options
39
- # @option options [Symbol] :length the desired length
40
- # @option options [Symbol] :separator the character for splitting words
41
- # @option options [Symbol] :trailing the character for ending sentence
42
- # @option options [Symbol] :escape remove ANSI escape sequences
43
- #
44
- # @api private
45
- def initialize(text, *args)
46
- options = Utils.extract_options!(args)
47
- @color = Pastel.new
48
- @text = text
49
- @length = options.fetch(:length) { DEFAULT_TRUNCATION_LENGTH }
50
- @length = args[0] unless args.empty?
51
- @separator = options.fetch(:separator) { nil }
52
- @trailing = options.fetch(:trailing) { DEFAULT_TRAILING }
53
- @escape = options.fetch(:escape) { true }
54
- end
55
-
56
- # Truncate a text
57
- #
58
- # @see TTY::Text.truncate
59
- #
60
- # @api private
61
- def truncate
62
- return text unless length && length > 0
63
-
64
- as_unicode do
65
- chars = (escape ? escape_text : text).chars.to_a
66
- return chars.join if chars.length <= length
67
- stop = chars[0, length_without_trailing].rindex(separator)
68
-
69
- chars[0, stop || length_without_trailing].join + trailing
70
- end
71
- end
72
-
73
- private
74
-
75
- # Strip ANSI characters from the text
76
- #
77
- # @param [String] text
78
- #
79
- # @return [String]
80
- #
81
- # @api private
82
- def escape_text
83
- color.strip text.dup
84
- end
85
-
86
- # Leave space for the trailing characters
87
- #
88
- # @return [Integer]
89
- #
90
- # @api private
91
- def length_without_trailing
92
- as_unicode do
93
- trailing_size = trailing.chars.to_a.size
94
- length - trailing_size
95
- end
96
- end
97
- end # Truncation
98
- end # Text
99
- end # TTY