tty 0.1.2 → 0.1.3
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/.travis.yml +4 -3
- data/CHANGELOG.md +5 -0
- data/README.md +42 -306
- data/lib/tty/{text → shell}/distance.rb +5 -27
- data/lib/tty/shell/suggestion.rb +42 -22
- data/lib/tty/version.rb +1 -1
- data/lib/tty.rb +2 -42
- data/spec/tty/{text → shell}/distance/distance_spec.rb +4 -4
- data/spec/tty/shell/distance/initialize_spec.rb +14 -0
- data/tty.gemspec +4 -3
- metadata +37 -269
- data/benchmarks/table.rb +0 -40
- data/lib/tty/table/border/ascii.rb +0 -32
- data/lib/tty/table/border/null.rb +0 -37
- data/lib/tty/table/border/row_line.rb +0 -18
- data/lib/tty/table/border/unicode.rb +0 -32
- data/lib/tty/table/border.rb +0 -222
- data/lib/tty/table/border_dsl.rb +0 -251
- data/lib/tty/table/border_options.rb +0 -53
- data/lib/tty/table/column_set.rb +0 -121
- data/lib/tty/table/columns.rb +0 -170
- data/lib/tty/table/error.rb +0 -18
- data/lib/tty/table/field.rb +0 -139
- data/lib/tty/table/header.rb +0 -133
- data/lib/tty/table/indentation.rb +0 -52
- data/lib/tty/table/operation/alignment.rb +0 -107
- data/lib/tty/table/operation/alignment_set.rb +0 -77
- data/lib/tty/table/operation/escape.rb +0 -30
- data/lib/tty/table/operation/filter.rb +0 -34
- data/lib/tty/table/operation/padding.rb +0 -95
- data/lib/tty/table/operation/truncation.rb +0 -55
- data/lib/tty/table/operation/wrapped.rb +0 -58
- data/lib/tty/table/operations.rb +0 -69
- data/lib/tty/table/orientation/horizontal.rb +0 -48
- data/lib/tty/table/orientation/vertical.rb +0 -38
- data/lib/tty/table/orientation.rb +0 -57
- data/lib/tty/table/padder.rb +0 -180
- data/lib/tty/table/renderer/ascii.rb +0 -16
- data/lib/tty/table/renderer/basic.rb +0 -294
- data/lib/tty/table/renderer/color.rb +0 -12
- data/lib/tty/table/renderer/unicode.rb +0 -21
- data/lib/tty/table/renderer.rb +0 -101
- data/lib/tty/table/row.rb +0 -217
- data/lib/tty/table/transformation.rb +0 -39
- data/lib/tty/table/validatable.rb +0 -64
- data/lib/tty/table.rb +0 -476
- data/lib/tty/text/truncation.rb +0 -99
- data/lib/tty/text/wrapping.rb +0 -118
- data/lib/tty/text.rb +0 -98
- data/spec/tty/table/access_spec.rb +0 -86
- data/spec/tty/table/add_row_spec.rb +0 -28
- data/spec/tty/table/border/ascii/rendering_spec.rb +0 -90
- data/spec/tty/table/border/new_spec.rb +0 -27
- data/spec/tty/table/border/null/rendering_spec.rb +0 -130
- data/spec/tty/table/border/options/from_spec.rb +0 -38
- data/spec/tty/table/border/options/new_spec.rb +0 -14
- data/spec/tty/table/border/unicode/rendering_spec.rb +0 -63
- data/spec/tty/table/border_options/new_spec.rb +0 -20
- data/spec/tty/table/border_options/update_spec.rb +0 -18
- data/spec/tty/table/column_set/extract_widths_spec.rb +0 -15
- data/spec/tty/table/column_set/total_width_spec.rb +0 -15
- data/spec/tty/table/column_set/widths_from_spec.rb +0 -51
- data/spec/tty/table/columns/enforce_spec.rb +0 -68
- data/spec/tty/table/columns/widths_spec.rb +0 -35
- data/spec/tty/table/data_spec.rb +0 -14
- data/spec/tty/table/each_spec.rb +0 -41
- data/spec/tty/table/each_with_index_spec.rb +0 -57
- data/spec/tty/table/empty_spec.rb +0 -23
- data/spec/tty/table/eql_spec.rb +0 -34
- data/spec/tty/table/field/equality_spec.rb +0 -51
- data/spec/tty/table/field/length_spec.rb +0 -21
- data/spec/tty/table/field/lines_spec.rb +0 -21
- data/spec/tty/table/field/new_spec.rb +0 -29
- data/spec/tty/table/field/width_spec.rb +0 -23
- data/spec/tty/table/filter_spec.rb +0 -23
- data/spec/tty/table/header/call_spec.rb +0 -30
- data/spec/tty/table/header/height_spec.rb +0 -27
- data/spec/tty/table/header/new_spec.rb +0 -25
- data/spec/tty/table/header/set_spec.rb +0 -20
- data/spec/tty/table/header/to_ary_spec.rb +0 -14
- data/spec/tty/table/header_spec.rb +0 -13
- data/spec/tty/table/indentation/insert_indent_spec.rb +0 -27
- data/spec/tty/table/initialize_spec.rb +0 -88
- data/spec/tty/table/operation/alignment/format_spec.rb +0 -47
- data/spec/tty/table/operation/alignment/new_spec.rb +0 -31
- data/spec/tty/table/operation/alignment_set/call_spec.rb +0 -39
- data/spec/tty/table/operation/alignment_set/each_spec.rb +0 -17
- data/spec/tty/table/operation/alignment_set/new_spec.rb +0 -27
- data/spec/tty/table/operation/alignment_set/to_ary_spec.rb +0 -14
- data/spec/tty/table/operation/escape/call_spec.rb +0 -16
- data/spec/tty/table/operation/filter/call_spec.rb +0 -17
- data/spec/tty/table/operation/truncation/call_spec.rb +0 -32
- data/spec/tty/table/operation/truncation/truncate_spec.rb +0 -22
- data/spec/tty/table/operation/wrapped/call_spec.rb +0 -33
- data/spec/tty/table/operation/wrapped/wrap_spec.rb +0 -23
- data/spec/tty/table/operations/new_spec.rb +0 -30
- data/spec/tty/table/options_spec.rb +0 -25
- data/spec/tty/table/orientation_spec.rb +0 -145
- data/spec/tty/table/padder/parse_spec.rb +0 -45
- data/spec/tty/table/padder/to_s_spec.rb +0 -14
- data/spec/tty/table/padding_spec.rb +0 -120
- data/spec/tty/table/properties_spec.rb +0 -25
- data/spec/tty/table/render_spec.rb +0 -63
- data/spec/tty/table/render_with_spec.rb +0 -106
- data/spec/tty/table/renderer/ascii/indentation_spec.rb +0 -41
- data/spec/tty/table/renderer/ascii/padding_spec.rb +0 -61
- data/spec/tty/table/renderer/ascii/render_spec.rb +0 -68
- data/spec/tty/table/renderer/ascii/resizing_spec.rb +0 -114
- data/spec/tty/table/renderer/ascii/separator_spec.rb +0 -28
- data/spec/tty/table/renderer/basic/alignment_spec.rb +0 -88
- data/spec/tty/table/renderer/basic/coloring_spec.rb +0 -46
- data/spec/tty/table/renderer/basic/extract_column_widths_spec.rb +0 -28
- data/spec/tty/table/renderer/basic/filter_spec.rb +0 -53
- data/spec/tty/table/renderer/basic/indentation_spec.rb +0 -48
- data/spec/tty/table/renderer/basic/multiline_content_spec.rb +0 -135
- data/spec/tty/table/renderer/basic/new_spec.rb +0 -22
- data/spec/tty/table/renderer/basic/options_spec.rb +0 -48
- data/spec/tty/table/renderer/basic/padding_spec.rb +0 -52
- data/spec/tty/table/renderer/basic/render_spec.rb +0 -57
- data/spec/tty/table/renderer/basic/resizing_spec.rb +0 -96
- data/spec/tty/table/renderer/basic/separator_spec.rb +0 -43
- data/spec/tty/table/renderer/basic/truncation_spec.rb +0 -35
- data/spec/tty/table/renderer/basic/wrapping_spec.rb +0 -40
- data/spec/tty/table/renderer/basic_spec.rb +0 -0
- data/spec/tty/table/renderer/border_spec.rb +0 -104
- data/spec/tty/table/renderer/render_spec.rb +0 -36
- data/spec/tty/table/renderer/select_spec.rb +0 -22
- data/spec/tty/table/renderer/style_spec.rb +0 -72
- data/spec/tty/table/renderer/unicode/indentation_spec.rb +0 -41
- data/spec/tty/table/renderer/unicode/padding_spec.rb +0 -61
- data/spec/tty/table/renderer/unicode/render_spec.rb +0 -68
- data/spec/tty/table/renderer/unicode/separator_spec.rb +0 -26
- data/spec/tty/table/renderer_spec.rb +0 -19
- data/spec/tty/table/rotate_spec.rb +0 -86
- data/spec/tty/table/row/access_spec.rb +0 -25
- data/spec/tty/table/row/call_spec.rb +0 -41
- data/spec/tty/table/row/data_spec.rb +0 -26
- data/spec/tty/table/row/each_spec.rb +0 -31
- data/spec/tty/table/row/equality_spec.rb +0 -73
- data/spec/tty/table/row/height_spec.rb +0 -27
- data/spec/tty/table/row/new_spec.rb +0 -41
- data/spec/tty/table/row/to_ary_spec.rb +0 -14
- data/spec/tty/table/to_s_spec.rb +0 -63
- data/spec/tty/table/transformation/extract_tuples_spec.rb +0 -35
- data/spec/tty/table/validatable/validate_options_spec.rb +0 -33
- data/spec/tty/table/validatable_spec.rb +0 -32
- data/spec/tty/text/distance/initialize_spec.rb +0 -14
- data/spec/tty/text/distance_spec.rb +0 -11
- data/spec/tty/text/truncate_spec.rb +0 -12
- data/spec/tty/text/truncation/initialize_spec.rb +0 -29
- data/spec/tty/text/truncation/truncate_spec.rb +0 -94
- data/spec/tty/text/wrap_spec.rb +0 -13
- data/spec/tty/text/wrapping/initialize_spec.rb +0 -25
- data/spec/tty/text/wrapping/wrap_spec.rb +0 -97
data/lib/tty/text/wrapping.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module TTY
|
4
|
-
class Text
|
5
|
-
# A class responsible for text wrapping operations
|
6
|
-
class Wrapping
|
7
|
-
include Unicode
|
8
|
-
|
9
|
-
attr_reader :text
|
10
|
-
|
11
|
-
attr_reader :length
|
12
|
-
|
13
|
-
attr_reader :indent
|
14
|
-
|
15
|
-
attr_reader :padding
|
16
|
-
|
17
|
-
attr_reader :color
|
18
|
-
|
19
|
-
# Initialize a Wrapping
|
20
|
-
#
|
21
|
-
# @param [String] text
|
22
|
-
# the text to be wrapped
|
23
|
-
#
|
24
|
-
# @overload new(text, value)
|
25
|
-
# wraps text at given value
|
26
|
-
#
|
27
|
-
# @param [Integer] value
|
28
|
-
#
|
29
|
-
# @overload new(text, value, options)
|
30
|
-
# @param [Integer] value
|
31
|
-
# @param [Hash] options
|
32
|
-
# @option options [Symbol] :indent the indentation
|
33
|
-
# @option options [Symbol] :length the desired length
|
34
|
-
#
|
35
|
-
# @api private
|
36
|
-
def initialize(text, *args)
|
37
|
-
options = Utils.extract_options!(args)
|
38
|
-
@text = text
|
39
|
-
@length = options.fetch(:length) { DEFAULT_WIDTH }
|
40
|
-
@indent = options.fetch(:indent) { 0 }
|
41
|
-
@padding = options.fetch(:padding) { [] }
|
42
|
-
@length = args[0] unless args.empty?
|
43
|
-
@color = Pastel.new
|
44
|
-
end
|
45
|
-
|
46
|
-
# Wrap a text into lines no longer than length
|
47
|
-
#
|
48
|
-
# @see TTY::Text#wrap
|
49
|
-
#
|
50
|
-
# @api private
|
51
|
-
def wrap
|
52
|
-
return text unless length && length > 0
|
53
|
-
|
54
|
-
as_unicode do
|
55
|
-
text.split(NEWLINE, -1).map do |line|
|
56
|
-
pad_line(indent_line(wrap_line(line)))
|
57
|
-
end * NEWLINE
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
private
|
62
|
-
|
63
|
-
# Calculate string length without color escapes
|
64
|
-
#
|
65
|
-
# @param [String] string
|
66
|
-
#
|
67
|
-
# @api private
|
68
|
-
def actual_length(string)
|
69
|
-
length + (string.length - color.strip(string).length)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Wrap line at given length
|
73
|
-
#
|
74
|
-
# @param [String] line
|
75
|
-
#
|
76
|
-
# @return [String]
|
77
|
-
#
|
78
|
-
# @api private
|
79
|
-
def wrap_line(line)
|
80
|
-
wrap_at = actual_length line
|
81
|
-
line.strip.gsub(/\n/, ' ').squeeze(' ')
|
82
|
-
.gsub(/(.{1,#{wrap_at}})(?:\s+|$\n?)|(.{1,#{wrap_at}})/, "\\1\\2\n")
|
83
|
-
.strip
|
84
|
-
end
|
85
|
-
|
86
|
-
# Indent string by given value
|
87
|
-
#
|
88
|
-
# @param [String] text
|
89
|
-
#
|
90
|
-
# @return [String]
|
91
|
-
#
|
92
|
-
# @api private
|
93
|
-
def indent_line(text)
|
94
|
-
text.split(NEWLINE).each do |line|
|
95
|
-
line.insert(0, SPACE * indent)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Add padding to each line in wrapped text
|
100
|
-
#
|
101
|
-
# @param [String] text
|
102
|
-
# the wrapped text
|
103
|
-
#
|
104
|
-
# @return [String]
|
105
|
-
#
|
106
|
-
# @api private
|
107
|
-
def pad_line(text)
|
108
|
-
return text if text.empty? || padding.empty?
|
109
|
-
|
110
|
-
padding_left = ' ' * padding[3].to_i
|
111
|
-
padding_right = ' ' * padding[1].to_i
|
112
|
-
text.map! do |part|
|
113
|
-
part.insert(0, padding_left).insert(-1, padding_right)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end # Wrapping
|
117
|
-
end # Text
|
118
|
-
end # TTY
|
data/lib/tty/text.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module TTY
|
4
|
-
# A class responsible for text manipulations
|
5
|
-
class Text
|
6
|
-
SPACE = ' '
|
7
|
-
|
8
|
-
NEWLINE = "\n"
|
9
|
-
|
10
|
-
DEFAULT_WIDTH = 80.freeze
|
11
|
-
|
12
|
-
# Specifies the split mode for words
|
13
|
-
def split_mode
|
14
|
-
end
|
15
|
-
|
16
|
-
# Calculate the distance between strings
|
17
|
-
#
|
18
|
-
# @param [String] first
|
19
|
-
# the first string for comparison
|
20
|
-
#
|
21
|
-
# @param [String] second
|
22
|
-
# the second string for comparison
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
# distance("which", "witch") # => 2
|
26
|
-
#
|
27
|
-
# @api public
|
28
|
-
def self.distance(first, second, *args)
|
29
|
-
Distance.new(first, second, *args).distance
|
30
|
-
end
|
31
|
-
|
32
|
-
# Wrap a text into lines no longer than provided length
|
33
|
-
#
|
34
|
-
# @param [String] text
|
35
|
-
# the text to be wrapped
|
36
|
-
#
|
37
|
-
# @overload wrap(text, value)
|
38
|
-
# wraps text at given value
|
39
|
-
#
|
40
|
-
# @param [Integer] value
|
41
|
-
#
|
42
|
-
# @overload wrap(text, value, options)
|
43
|
-
# @param [Integer] value
|
44
|
-
# @param [Hash] options
|
45
|
-
# @option options [Symbol] :indent the indentation
|
46
|
-
#
|
47
|
-
# @example
|
48
|
-
# wrap("Some longish text", 8)
|
49
|
-
# # => "Some\nlongish\ntext"
|
50
|
-
#
|
51
|
-
# wrap("Some longish text", length: 8)
|
52
|
-
# # => "Some\nlongish\ntext"
|
53
|
-
#
|
54
|
-
# wrap("Some longish text", 8, indent: 4)
|
55
|
-
# # => > Some
|
56
|
-
# > longish
|
57
|
-
# > text
|
58
|
-
#
|
59
|
-
# @api public
|
60
|
-
def self.wrap(text, *args)
|
61
|
-
Wrapping.new(text, *args).wrap
|
62
|
-
end
|
63
|
-
|
64
|
-
# Truncate a text at a given length (defaults to 30)
|
65
|
-
#
|
66
|
-
# @param [String] text
|
67
|
-
# the text to be truncated
|
68
|
-
#
|
69
|
-
# @overload truncate(text, value)
|
70
|
-
# truncates text at given value
|
71
|
-
#
|
72
|
-
# @param [Integer] value
|
73
|
-
#
|
74
|
-
# @overload truncate(text, value, options)
|
75
|
-
# @param [Integer] value
|
76
|
-
# @param [Hash] options
|
77
|
-
# @option options [Symbol] :separator the separation character
|
78
|
-
# @option options [Symbol] :trailing the trailing characters
|
79
|
-
#
|
80
|
-
# @example
|
81
|
-
# truncate("The sovereignest thing on earth is parmacetti for an inward bruise.")
|
82
|
-
# # => "The sovereignest thing on ear…"
|
83
|
-
#
|
84
|
-
# truncate("The sovereignest thing on earth is parmacetti for an inward bruise.", length: 20)
|
85
|
-
# # => "The sovereignest th…"
|
86
|
-
#
|
87
|
-
# truncate("The sovereignest thing on earth is parmacetti for an inward bruise.", length: 20, separator: ' ' )
|
88
|
-
# # => "The sovereignest…"
|
89
|
-
#
|
90
|
-
# truncate("The sovereignest thing on earth is parmacetti for an inward bruise.", length: 40, trailing: '... (see more)' )
|
91
|
-
# # => "The sovereignest thing on... (see more)"
|
92
|
-
#
|
93
|
-
# @api public
|
94
|
-
def self.truncate(text, *args)
|
95
|
-
Truncation.new(text, *args).truncate
|
96
|
-
end
|
97
|
-
end # Text
|
98
|
-
end # TTY
|
@@ -1,86 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table, 'access' do
|
6
|
-
let(:header) { [:head1, :head2] }
|
7
|
-
let(:rows) { [['a1', 'a2'], ['b1', 'b2']] }
|
8
|
-
|
9
|
-
subject(:table) { TTY::Table.new rows: rows, header: header }
|
10
|
-
|
11
|
-
it { is_expected.to respond_to(:element) }
|
12
|
-
|
13
|
-
it { should respond_to(:component) }
|
14
|
-
|
15
|
-
it { should respond_to(:at) }
|
16
|
-
|
17
|
-
context 'when array like access' do
|
18
|
-
it { expect(table[0,0]).to eq('a1') }
|
19
|
-
|
20
|
-
it { expect(table[0]).to eq(rows[0]) }
|
21
|
-
|
22
|
-
it { expect(table[5]).to eq(nil) }
|
23
|
-
|
24
|
-
it { expect(table[-1]).to eq(rows[-1]) }
|
25
|
-
|
26
|
-
it { expect(table[5,5]).to eq(nil) }
|
27
|
-
|
28
|
-
it 'raises error for negative indices' do
|
29
|
-
expect { table[-5,-5] }.to raise_error(IndexError)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context '#row' do
|
34
|
-
it 'returns nil for wrong index' do
|
35
|
-
expect(table.row(11)).to be_nil
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'gets row at index' do
|
39
|
-
expect(table.row(1)).to eq(rows[1])
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'yields self for wrong index' do
|
43
|
-
block = lambda { |el| [] << el }
|
44
|
-
expect(table.row(11, &block)).to eq(table)
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'yields row at index' do
|
48
|
-
yields = []
|
49
|
-
expect { table.row(1).each { |el| yields << el } }.to change { yields }.
|
50
|
-
from( [] ).
|
51
|
-
to( rows[1] )
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context '#column' do
|
56
|
-
it "gets based on header name" do
|
57
|
-
expect(table.column(:head1)).to eq(['a1', 'b1'])
|
58
|
-
end
|
59
|
-
|
60
|
-
it "yields based on header name" do
|
61
|
-
yielded = []
|
62
|
-
table.column(:head1) { |el| yielded << el }
|
63
|
-
expect(yielded).to eql(['a1', 'b1'])
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'returns nil for wrong index' do
|
67
|
-
expect(table.column(11)).to be_nil
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'gets column at index' do
|
71
|
-
expect(table.column(0)).to eq(['a1', 'b1'])
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'yields self for wrong index' do
|
75
|
-
block = lambda { |el| [] << el }
|
76
|
-
expect(table.column(11, &block)).to eq(table)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'yields column at index' do
|
80
|
-
yields = []
|
81
|
-
expect { table.column(1).each { |el| yields << el } }.to change { yields }.
|
82
|
-
from( [] ).
|
83
|
-
to( ['a2', 'b2'])
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table, '#<<' do
|
6
|
-
let(:rows) { ['a', 'b', 'c'] }
|
7
|
-
let(:object) { described_class }
|
8
|
-
|
9
|
-
subject(:table) { object[rows] }
|
10
|
-
|
11
|
-
context 'with primitive values' do
|
12
|
-
let(:row) { [1, 2, 3] }
|
13
|
-
|
14
|
-
it 'extracts values correctly' do
|
15
|
-
table << row
|
16
|
-
expect(table.to_a.last).to eql(row)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'with complex values' do
|
21
|
-
let(:row) { [1, { value: 2 }, 3] }
|
22
|
-
|
23
|
-
it 'extracts values correctly' do
|
24
|
-
table << row
|
25
|
-
expect(table.to_a.last).to eql([1,2,3])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::Border::ASCII, '#rendering' do
|
6
|
-
|
7
|
-
subject { described_class.new(column_widths) }
|
8
|
-
|
9
|
-
context 'with empty row' do
|
10
|
-
let(:row) { TTY::Table::Row.new([]) }
|
11
|
-
let(:column_widths) { [] }
|
12
|
-
|
13
|
-
it 'draws top line' do
|
14
|
-
expect(subject.top_line).to eq("++")
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'draws middle line' do
|
18
|
-
expect(subject.separator).to eq("++")
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'draw bottom line' do
|
22
|
-
expect(subject.bottom_line).to eq("++")
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'draws row line' do
|
26
|
-
expect(subject.row_line(row)).to eq("||")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'with row' do
|
31
|
-
let(:column_widths) { [2,2,2] }
|
32
|
-
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
33
|
-
|
34
|
-
it 'draws top line' do
|
35
|
-
expect(subject.top_line).to eq("+--+--+--+")
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'draw middle line' do
|
39
|
-
expect(subject.separator).to eq("+--+--+--+")
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'draw bottom line' do
|
43
|
-
expect(subject.bottom_line).to eq("+--+--+--+")
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'draws row line' do
|
47
|
-
expect(subject.row_line(row)).to eq("|a1|a2|a3|")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'with multiline row' do
|
52
|
-
let(:column_widths) { [2,2,2]}
|
53
|
-
|
54
|
-
context 'with mixed data' do
|
55
|
-
let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
|
56
|
-
|
57
|
-
it 'draws row line' do
|
58
|
-
expect(subject.row_line(row)).to eq <<-EOS.normalize
|
59
|
-
|a1|a2|a3|
|
60
|
-
|b1| | |
|
61
|
-
|c1| | |
|
62
|
-
EOS
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'with sparse data' do
|
67
|
-
let(:row) { TTY::Table::Row.new(["a1\n\n", "\na2\n", "\n\na3"]) }
|
68
|
-
|
69
|
-
it 'draws row line' do
|
70
|
-
expect(subject.row_line(row)).to eq <<-EOS.normalize
|
71
|
-
|a1| | |
|
72
|
-
| |a2| |
|
73
|
-
| | |a3|
|
74
|
-
EOS
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'with empty data' do
|
79
|
-
let(:row) { TTY::Table::Row.new(["\na1\n", "\na2\n", "\na3\n"]) }
|
80
|
-
|
81
|
-
it 'draws row line' do
|
82
|
-
expect(subject.row_line(row)).to eq <<-EOS.normalize
|
83
|
-
| | | |
|
84
|
-
|a1|a2|a3|
|
85
|
-
| | | |
|
86
|
-
EOS
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::Border, '#new' do
|
6
|
-
let(:row) { [] }
|
7
|
-
|
8
|
-
subject(:instance) { klass.new row }
|
9
|
-
|
10
|
-
context 'when abstract' do
|
11
|
-
let(:klass) { described_class }
|
12
|
-
|
13
|
-
it { expect { instance }.to raise_error(NotImplementedError) }
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when concrete' do
|
17
|
-
let(:klass) {
|
18
|
-
Class.new do
|
19
|
-
def initialize(row); end
|
20
|
-
end
|
21
|
-
}
|
22
|
-
|
23
|
-
it { expect { instance }.to_not raise_error() }
|
24
|
-
|
25
|
-
it { is_expected.to be_instance_of klass }
|
26
|
-
end
|
27
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::Border::Null, '#rendering' do
|
6
|
-
let(:border) { nil }
|
7
|
-
|
8
|
-
subject { described_class.new column_widths, border }
|
9
|
-
|
10
|
-
context 'with empty row' do
|
11
|
-
let(:row) { TTY::Table::Row.new([]) }
|
12
|
-
let(:column_widths) { [] }
|
13
|
-
|
14
|
-
it 'draws top line' do
|
15
|
-
expect(subject.top_line).to be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'draws middle line' do
|
19
|
-
expect(subject.separator).to be_nil
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'draw bottom line' do
|
23
|
-
expect(subject.bottom_line).to be_nil
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'draws row line' do
|
27
|
-
expect(subject.row_line(row)).to eq('')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'with row' do
|
32
|
-
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
33
|
-
let(:column_widths) { [2,2,2] }
|
34
|
-
|
35
|
-
it 'draws top line' do
|
36
|
-
expect(subject.top_line).to be_nil
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'draw middle line' do
|
40
|
-
expect(subject.separator).to be_nil
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'draw bottom line' do
|
44
|
-
expect(subject.bottom_line).to be_nil
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'draws row line' do
|
48
|
-
expect(subject.row_line(row)).to eq('a1 a2 a3')
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'with multiline row' do
|
53
|
-
let(:column_widths) { [2,2,2] }
|
54
|
-
|
55
|
-
context 'with mixed data' do
|
56
|
-
let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
|
57
|
-
|
58
|
-
it 'draws row line' do
|
59
|
-
expect(subject.row_line(row)).to eq <<-EOS.normalize
|
60
|
-
a1 a2 a3
|
61
|
-
b1
|
62
|
-
c1
|
63
|
-
EOS
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'with sparse data' do
|
68
|
-
let(:row) { TTY::Table::Row.new(["a1\n\n", "\na2\n", "\n\na3"]) }
|
69
|
-
|
70
|
-
it 'draws row line' do
|
71
|
-
expect(subject.row_line(row)).to eq <<-EOS.chomp
|
72
|
-
a1
|
73
|
-
a2
|
74
|
-
a3
|
75
|
-
EOS
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'with empty data' do
|
80
|
-
let(:row) { TTY::Table::Row.new(["\na1\n", "\na2\n", "\na3\n"]) }
|
81
|
-
|
82
|
-
it 'draws row line' do
|
83
|
-
expect(subject.row_line(row)).to eq <<-EOS.chomp
|
84
|
-
|
85
|
-
a1 a2 a3
|
86
|
-
|
87
|
-
EOS
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'with border' do
|
93
|
-
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
94
|
-
let(:column_widths) { [2,2,2] }
|
95
|
-
let(:border) { { :characters => {
|
96
|
-
'top' => '=',
|
97
|
-
'top_mid' => '=',
|
98
|
-
'top_left' => '=',
|
99
|
-
'top_right' => '=',
|
100
|
-
'bottom' => '=',
|
101
|
-
'bottom_mid' => '=',
|
102
|
-
'bottom_left' => '=',
|
103
|
-
'bottom_right' => '=',
|
104
|
-
'mid' => '=',
|
105
|
-
'mid_mid' => '=',
|
106
|
-
'mid_left' => '=',
|
107
|
-
'mid_right' => '=',
|
108
|
-
'left' => '=',
|
109
|
-
'center' => '=',
|
110
|
-
'right' => '='
|
111
|
-
} } }
|
112
|
-
|
113
|
-
|
114
|
-
it 'draws top line' do
|
115
|
-
expect(subject.top_line).to eql '=========='
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'draws separator line' do
|
119
|
-
expect(subject.separator).to eql '=========='
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'draws bottom line' do
|
123
|
-
expect(subject.bottom_line).to eql '=========='
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'draws row line' do
|
127
|
-
expect(subject.row_line(row)).to eql '=a1=a2=a3='
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::BorderOptions, '#from' do
|
6
|
-
|
7
|
-
subject(:options) { described_class.from object }
|
8
|
-
|
9
|
-
context 'when empty hash' do
|
10
|
-
let(:object) { {} }
|
11
|
-
|
12
|
-
it { expect(options.style).to be_nil }
|
13
|
-
|
14
|
-
it { expect(options.separator).to be_nil }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when hash' do
|
18
|
-
let(:object) { { style: :red, separator: :none } }
|
19
|
-
|
20
|
-
it { expect(options).to be_kind_of(described_class) }
|
21
|
-
|
22
|
-
it { expect(options.style).to eql :red }
|
23
|
-
|
24
|
-
it { expect(options.separator).to eql :none }
|
25
|
-
|
26
|
-
it { expect(options.characters).to eql({}) }
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'when other BorderOptions' do
|
30
|
-
let(:object) { described_class.new(nil, nil, :blue) }
|
31
|
-
|
32
|
-
it { expect(options).to eql object }
|
33
|
-
|
34
|
-
it { expect(options.characters).to eql({}) }
|
35
|
-
|
36
|
-
it { expect(options.style).to eql :blue }
|
37
|
-
end
|
38
|
-
end # from
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::BorderOptions, '.new' do
|
6
|
-
|
7
|
-
subject(:options) { described_class.new }
|
8
|
-
|
9
|
-
it { expect(subject.characters).to eql({}) }
|
10
|
-
|
11
|
-
it { expect(subject.separator).to be_nil }
|
12
|
-
|
13
|
-
it { expect(subject.style).to be_nil }
|
14
|
-
end # new
|
@@ -1,63 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe TTY::Table::Border::Unicode, '#rendering' do
|
6
|
-
|
7
|
-
subject { described_class.new(column_widths) }
|
8
|
-
|
9
|
-
context 'with empty row' do
|
10
|
-
let(:row) { TTY::Table::Row.new([]) }
|
11
|
-
let(:column_widths) { [] }
|
12
|
-
|
13
|
-
it 'draws top line' do
|
14
|
-
expect(subject.top_line).to eq("┌┐")
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'draws middle line' do
|
18
|
-
expect(subject.separator).to eq("├┤")
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'draw bottom line' do
|
22
|
-
expect(subject.bottom_line).to eq("└┘")
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'draws row line' do
|
26
|
-
expect(subject.row_line(row)).to eq("││")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'with row' do
|
31
|
-
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
32
|
-
let(:column_widths) { [2,2,2] }
|
33
|
-
|
34
|
-
it 'draws top line' do
|
35
|
-
expect(subject.top_line).to eq("┌──┬──┬──┐")
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'draw middle line' do
|
39
|
-
expect(subject.separator).to eq("├──┼──┼──┤")
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'draw bottom line' do
|
43
|
-
expect(subject.bottom_line).to eq("└──┴──┴──┘")
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'draws row line' do
|
47
|
-
expect(subject.row_line(row)).to eq("│a1│a2│a3│")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'with multiline row' do
|
52
|
-
let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
|
53
|
-
let(:column_widths) { [2,2,2] }
|
54
|
-
|
55
|
-
it 'draws row line' do
|
56
|
-
expect(subject.row_line(row)).to eq <<-EOS.normalize
|
57
|
-
│a1│a2│a3│
|
58
|
-
│b1│ │ │
|
59
|
-
│c1│ │ │
|
60
|
-
EOS
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|