tty 0.0.9 → 0.0.10
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.
- data/.rspec +2 -1
- data/.travis.yml +3 -6
- data/README.md +232 -134
- data/lib/tty/plugins/plugin.rb +56 -0
- data/lib/tty/plugins.rb +75 -0
- data/lib/tty/shell/suggestion.rb +102 -0
- data/lib/tty/shell.rb +41 -14
- data/lib/tty/system/editor.rb +111 -0
- data/lib/tty/system/which.rb +13 -1
- data/lib/tty/system.rb +44 -28
- data/lib/tty/table/border/null.rb +0 -9
- data/lib/tty/table/border/row_line.rb +21 -0
- data/lib/tty/table/border.rb +63 -32
- data/lib/tty/table/border_dsl.rb +1 -1
- data/lib/tty/table/column_set.rb +16 -17
- data/lib/tty/table/field.rb +27 -7
- data/lib/tty/table/header.rb +18 -9
- data/lib/tty/table/operation/alignment_set.rb +20 -25
- data/lib/tty/table/operation/escape.rb +30 -0
- data/lib/tty/table/operation/filter.rb +36 -0
- data/lib/tty/table/operation/truncation.rb +22 -11
- data/lib/tty/table/operation/wrapped.rb +21 -10
- data/lib/tty/table/operations.rb +10 -8
- data/lib/tty/table/orientation/horizontal.rb +1 -1
- data/lib/tty/table/renderer/ascii.rb +3 -3
- data/lib/tty/table/renderer/basic.rb +135 -65
- data/lib/tty/table/renderer/color.rb +1 -4
- data/lib/tty/table/renderer/unicode.rb +3 -3
- data/lib/tty/table/renderer.rb +48 -61
- data/lib/tty/table/row.rb +30 -3
- data/lib/tty/table/transformation.rb +38 -0
- data/lib/tty/table/validatable.rb +7 -5
- data/lib/tty/table.rb +78 -99
- data/lib/tty/terminal/color.rb +2 -2
- data/lib/tty/terminal/echo.rb +1 -1
- data/lib/tty/terminal/pager/basic.rb +52 -0
- data/lib/tty/terminal/pager/system.rb +39 -0
- data/lib/tty/terminal/pager.rb +95 -0
- data/lib/tty/terminal.rb +30 -1
- data/lib/tty/version.rb +1 -1
- data/lib/tty.rb +41 -1
- data/spec/spec_helper.rb +20 -0
- data/spec/tty/plugins/find_spec.rb +28 -0
- data/spec/tty/plugins/load_spec.rb +20 -0
- data/spec/tty/plugins/plugin/load_spec.rb +30 -0
- data/spec/tty/plugins/plugin/new_spec.rb +18 -0
- data/spec/tty/shell/suggest_spec.rb +50 -0
- data/spec/tty/support/conversion_spec.rb +3 -3
- data/spec/tty/support/delegatable_spec.rb +1 -1
- data/spec/tty/support/equatable_spec.rb +6 -9
- data/spec/tty/system/editor/available_spec.rb +40 -0
- data/spec/tty/system/editor/build_spec.rb +40 -0
- data/spec/tty/system/editor/command_spec.rb +16 -0
- data/spec/tty/system/editor/executables_spec.rb +13 -0
- data/spec/tty/system/editor/invoke_spec.rb +38 -0
- data/spec/tty/system/editor/open_spec.rb +27 -0
- data/spec/tty/system/platform_spec.rb +4 -6
- data/spec/tty/system/which/which_spec.rb +48 -0
- data/spec/tty/system/which_spec.rb +8 -34
- data/spec/tty/table/border/ascii/rendering_spec.rb +19 -5
- data/spec/tty/table/border/new_spec.rb +1 -1
- data/spec/tty/table/border/null/rendering_spec.rb +24 -8
- data/spec/tty/table/border/unicode/rendering_spec.rb +19 -5
- data/spec/tty/table/column_set/extract_widths_spec.rb +4 -15
- data/spec/tty/table/column_set/total_width_spec.rb +15 -0
- data/spec/tty/table/data_spec.rb +14 -0
- data/spec/tty/table/each_spec.rb +17 -4
- data/spec/tty/table/each_with_index_spec.rb +34 -6
- data/spec/tty/table/field/length_spec.rb +21 -0
- data/spec/tty/table/field/lines_spec.rb +21 -0
- data/spec/tty/table/filter_spec.rb +23 -0
- data/spec/tty/table/header/call_spec.rb +1 -1
- data/spec/tty/table/header/height_spec.rb +27 -0
- data/spec/tty/table/initialize_spec.rb +6 -6
- data/spec/tty/table/operation/alignment_set/call_spec.rb +39 -0
- data/spec/tty/table/operation/escape/call_spec.rb +16 -0
- data/spec/tty/table/operation/filter/call_spec.rb +17 -0
- data/spec/tty/table/operation/truncation/call_spec.rb +15 -10
- data/spec/tty/table/operation/truncation/truncate_spec.rb +1 -1
- data/spec/tty/table/operation/wrapped/call_spec.rb +15 -10
- data/spec/tty/table/operation/wrapped/wrap_spec.rb +1 -1
- data/spec/tty/table/operations/new_spec.rb +4 -4
- data/spec/tty/table/options_spec.rb +0 -28
- data/spec/tty/table/orientation_spec.rb +5 -6
- data/spec/tty/table/properties_spec.rb +1 -4
- data/spec/tty/table/render_spec.rb +57 -0
- data/spec/tty/table/{renders_with_spec.rb → render_with_spec.rb} +29 -10
- data/spec/tty/table/renderer/ascii/render_spec.rb +68 -0
- data/spec/tty/table/renderer/ascii/separator_spec.rb +28 -0
- data/spec/tty/table/renderer/basic/alignment_spec.rb +18 -16
- data/spec/tty/table/renderer/basic/extract_column_widths_spec.rb +17 -12
- data/spec/tty/table/renderer/basic/filter_spec.rb +53 -0
- data/spec/tty/table/renderer/basic/multiline_content_spec.rb +135 -0
- data/spec/tty/table/renderer/basic/new_spec.rb +13 -2
- data/spec/tty/table/renderer/basic/options_spec.rb +48 -0
- data/spec/tty/table/renderer/basic/render_spec.rb +19 -121
- data/spec/tty/table/renderer/basic/separator_spec.rb +14 -48
- data/spec/tty/table/renderer/basic/truncation_spec.rb +35 -0
- data/spec/tty/table/renderer/basic/wrapping_spec.rb +40 -0
- data/spec/tty/table/{border_spec.rb → renderer/border_spec.rb} +17 -20
- data/spec/tty/table/renderer/select_spec.rb +22 -0
- data/spec/tty/table/{border → renderer}/style_spec.rb +13 -14
- data/spec/tty/table/renderer/unicode/render_spec.rb +68 -0
- data/spec/tty/table/renderer/unicode/separator_spec.rb +26 -0
- data/spec/tty/table/rotate_spec.rb +2 -3
- data/spec/tty/table/row/call_spec.rb +1 -1
- data/spec/tty/table/row/each_spec.rb +31 -0
- data/spec/tty/table/row/height_spec.rb +27 -0
- data/spec/tty/table/to_s_spec.rb +3 -3
- data/spec/tty/table/transformation/extract_tuples_spec.rb +35 -0
- data/spec/tty/table/validatable/validate_options_spec.rb +1 -2
- data/spec/tty/terminal/home_spec.rb +3 -3
- data/spec/tty/terminal/page_spec.rb +13 -0
- data/spec/tty/terminal/pager/available_spec.rb +40 -0
- data/spec/tty/terminal/pager/basic/page_spec.rb +54 -0
- data/spec/tty/terminal/pager/command_spec.rb +16 -0
- data/spec/tty/terminal/pager/executables_spec.rb +13 -0
- data/spec/tty/terminal/pager/page_spec.rb +47 -0
- data/spec/tty/terminal/pager/system/page_spec.rb +29 -0
- data/spec/tty/text/distance/distance_spec.rb +12 -0
- data/tty.gemspec +7 -3
- metadata +160 -27
- data/spec/tty/table/operation/alignment_set/align_rows_spec.rb +0 -53
- data/spec/tty/table/renderer/pick_renderer_spec.rb +0 -25
- data/spec/tty/table/renderer_spec.rb +0 -49
@@ -5,10 +5,11 @@ require 'spec_helper'
|
|
5
5
|
describe TTY::Table::Border::Null, '#rendering' do
|
6
6
|
let(:border) { nil }
|
7
7
|
|
8
|
-
subject { described_class.new
|
8
|
+
subject { described_class.new column_widths, border }
|
9
9
|
|
10
10
|
context 'with empty row' do
|
11
|
-
let(:row) { [] }
|
11
|
+
let(:row) { TTY::Table::Row.new([]) }
|
12
|
+
let(:column_widths) { [] }
|
12
13
|
|
13
14
|
it 'draws top line' do
|
14
15
|
subject.top_line.should be_nil
|
@@ -23,12 +24,13 @@ describe TTY::Table::Border::Null, '#rendering' do
|
|
23
24
|
end
|
24
25
|
|
25
26
|
it 'draws row line' do
|
26
|
-
subject.row_line.should == ''
|
27
|
+
subject.row_line(row).should == ''
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
31
|
context 'with row' do
|
31
|
-
let(:row) { ['a1', 'a2', 'a3'] }
|
32
|
+
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
33
|
+
let(:column_widths) { [2,2,2] }
|
32
34
|
|
33
35
|
it 'draws top line' do
|
34
36
|
subject.top_line.should be_nil
|
@@ -43,12 +45,26 @@ describe TTY::Table::Border::Null, '#rendering' do
|
|
43
45
|
end
|
44
46
|
|
45
47
|
it 'draws row line' do
|
46
|
-
subject.row_line.should == 'a1 a2 a3'
|
48
|
+
subject.row_line(row).should == 'a1 a2 a3'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'with multiline row' do
|
53
|
+
let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
|
54
|
+
let(:column_widths) { [2,2,2] }
|
55
|
+
|
56
|
+
it 'draws row line' do
|
57
|
+
subject.row_line(row).should == <<-EOS.normalize
|
58
|
+
a1 a2 a3
|
59
|
+
b1
|
60
|
+
c1
|
61
|
+
EOS
|
47
62
|
end
|
48
63
|
end
|
49
64
|
|
50
65
|
context 'with border' do
|
51
|
-
let(:row) { ['a1', 'a2', 'a3'] }
|
66
|
+
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
67
|
+
let(:column_widths) { [2,2,2] }
|
52
68
|
let(:border) { { :characters => {
|
53
69
|
'top' => '=',
|
54
70
|
'top_mid' => '=',
|
@@ -67,6 +83,7 @@ describe TTY::Table::Border::Null, '#rendering' do
|
|
67
83
|
'right' => '='
|
68
84
|
} } }
|
69
85
|
|
86
|
+
|
70
87
|
it 'draws top line' do
|
71
88
|
expect(subject.top_line).to eql '=========='
|
72
89
|
end
|
@@ -80,8 +97,7 @@ describe TTY::Table::Border::Null, '#rendering' do
|
|
80
97
|
end
|
81
98
|
|
82
99
|
it 'draws row line' do
|
83
|
-
expect(subject.row_line).to eql '=a1=a2=a3='
|
100
|
+
expect(subject.row_line(row)).to eql '=a1=a2=a3='
|
84
101
|
end
|
85
102
|
end
|
86
|
-
|
87
103
|
end
|
@@ -4,10 +4,11 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe TTY::Table::Border::Unicode, '#rendering' do
|
6
6
|
|
7
|
-
subject { described_class.new
|
7
|
+
subject { described_class.new(column_widths) }
|
8
8
|
|
9
9
|
context 'with empty row' do
|
10
|
-
let(:row) { [] }
|
10
|
+
let(:row) { TTY::Table::Row.new([]) }
|
11
|
+
let(:column_widths) { [] }
|
11
12
|
|
12
13
|
it 'draws top line' do
|
13
14
|
subject.top_line.should == "┌┐"
|
@@ -22,12 +23,13 @@ describe TTY::Table::Border::Unicode, '#rendering' do
|
|
22
23
|
end
|
23
24
|
|
24
25
|
it 'draws row line' do
|
25
|
-
subject.row_line.should == "││"
|
26
|
+
subject.row_line(row).should == "││"
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
context 'with row' do
|
30
|
-
let(:row) { ['a1', 'a2', 'a3'] }
|
31
|
+
let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
|
32
|
+
let(:column_widths) { [2,2,2] }
|
31
33
|
|
32
34
|
it 'draws top line' do
|
33
35
|
subject.top_line.should == "┌──┬──┬──┐"
|
@@ -42,8 +44,20 @@ describe TTY::Table::Border::Unicode, '#rendering' do
|
|
42
44
|
end
|
43
45
|
|
44
46
|
it 'draws row line' do
|
45
|
-
subject.row_line.should == "│a1│a2│a3│"
|
47
|
+
subject.row_line(row).should == "│a1│a2│a3│"
|
46
48
|
end
|
47
49
|
end
|
48
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
|
+
subject.row_line(row).should == <<-EOS.normalize
|
57
|
+
│a1│a2│a3│
|
58
|
+
│b1│ │ │
|
59
|
+
│c1│ │ │
|
60
|
+
EOS
|
61
|
+
end
|
62
|
+
end
|
49
63
|
end
|
@@ -3,24 +3,13 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe TTY::Table::ColumnSet, '#extract_widths!' do
|
6
|
-
|
7
6
|
let(:header) { ['h1', 'h2', 'h3'] }
|
8
|
-
let(:rows)
|
9
|
-
|
10
|
-
let(:table) {
|
11
|
-
stub(:table, :column_widths => column_widths,
|
12
|
-
:header => header, :to_a => rows).as_null_object
|
13
|
-
}
|
7
|
+
let(:rows) { [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']] }
|
8
|
+
let(:table) { TTY::Table.new header, rows }
|
14
9
|
|
15
10
|
subject { described_class.new table }
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
it '' do
|
21
|
-
subject.extract_widths!
|
22
|
-
subject.column_widths.should == column_widths
|
23
|
-
end
|
24
|
-
|
12
|
+
it 'extract widths' do
|
13
|
+
expect(subject.extract_widths).to eql([2,2,2])
|
25
14
|
end
|
26
15
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::ColumnSet, '#extract_widths!' do
|
6
|
+
let(:header) { ['h1', 'h2', 'h3'] }
|
7
|
+
let(:rows) { [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']] }
|
8
|
+
let(:table) { TTY::Table.new header, rows }
|
9
|
+
|
10
|
+
subject { described_class.new table }
|
11
|
+
|
12
|
+
it 'extract widths' do
|
13
|
+
expect(subject.total_width).to eql(6)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, '#data' do
|
6
|
+
let(:header) { ['h1', 'h2', 'h3'] }
|
7
|
+
let(:rows) { [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']] }
|
8
|
+
|
9
|
+
subject { described_class.new header, rows }
|
10
|
+
|
11
|
+
it 'gets all table data' do
|
12
|
+
expect(subject.data).to eql([header] + rows)
|
13
|
+
end
|
14
|
+
end
|
data/spec/tty/table/each_spec.rb
CHANGED
@@ -4,8 +4,9 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe TTY::Table, '#each' do
|
6
6
|
let(:object) { described_class.new header, rows }
|
7
|
-
let(:header) { ['Header1'
|
8
|
-
let(:rows)
|
7
|
+
let(:header) { ['Header1'] }
|
8
|
+
let(:rows) { [['a1'], ['b1']] }
|
9
|
+
let(:field) { TTY::Table::Field }
|
9
10
|
|
10
11
|
context 'with no block' do
|
11
12
|
subject { object.each }
|
@@ -18,13 +19,25 @@ describe TTY::Table, '#each' do
|
|
18
19
|
end
|
19
20
|
|
20
21
|
context 'with block' do
|
21
|
-
subject { object.each { |row| yields << row } }
|
22
22
|
let(:yields) { [] }
|
23
23
|
|
24
|
+
subject { object.each { |row| yields << row } }
|
25
|
+
|
26
|
+
it 'yields header and rows' do
|
27
|
+
subject
|
28
|
+
expect(yields.first).to be_instance_of(TTY::Table::Header)
|
29
|
+
expect(yields.last).to be_instance_of(TTY::Table::Row)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'yields header and rows with expected attributes' do
|
33
|
+
subject
|
34
|
+
expect(yields).to eql(object.data)
|
35
|
+
end
|
36
|
+
|
24
37
|
it 'yields each row' do
|
25
38
|
expect { subject }.to change { yields }.
|
26
39
|
from( [] ).
|
27
|
-
to(
|
40
|
+
to( object.data )
|
28
41
|
end
|
29
42
|
end
|
30
43
|
end
|
@@ -2,10 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
+
def to_field(value)
|
6
|
+
end
|
7
|
+
|
5
8
|
describe TTY::Table, '#each_with_index' do
|
6
9
|
let(:object) { described_class.new header, rows }
|
7
10
|
let(:header) { ['Header1', 'Header2'] }
|
8
11
|
let(:rows) { [['a1', 'a2'], ['b1', 'b2']] }
|
12
|
+
let(:field) { TTY::Table::Field }
|
9
13
|
|
10
14
|
context 'with no block' do
|
11
15
|
subject { object.each_with_index }
|
@@ -17,14 +21,38 @@ describe TTY::Table, '#each_with_index' do
|
|
17
21
|
end
|
18
22
|
|
19
23
|
context 'with block' do
|
20
|
-
subject { object.each_with_index { |el, row, col| yields << [el, row, col]}}
|
21
24
|
let(:yields) { [] }
|
22
|
-
let(:expected) { [['a1', 0, 0], ['a2', 0, 1], ['b1', 1, 0], ['b2', 1, 1]] }
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
subject { object.each_with_index { |el, row, col| yields << [el, row, col]}}
|
27
|
+
|
28
|
+
context 'without header' do
|
29
|
+
let(:header) { nil }
|
30
|
+
|
31
|
+
let(:expected) {
|
32
|
+
[ [field.new('a1'), 0, 0], [field.new('a2'), 0, 1],
|
33
|
+
[field.new('b1'), 1, 0], [field.new('b2'), 1, 1] ]
|
34
|
+
}
|
35
|
+
|
36
|
+
it "yields rows with expected data" do
|
37
|
+
expect { subject }.to change { yields }.
|
38
|
+
from( [] ).
|
39
|
+
to( expected )
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with header' do
|
44
|
+
|
45
|
+
let(:expected) {
|
46
|
+
[ [field.new('Header1'), 0, 0], [field.new('Header2'), 0, 1],
|
47
|
+
[field.new('a1'), 1, 0], [field.new('a2'), 1, 1],
|
48
|
+
[field.new('b1'), 2, 0], [field.new('b2'), 2, 1] ]
|
49
|
+
}
|
50
|
+
|
51
|
+
it "yields header and rows with expected data" do
|
52
|
+
expect { subject }.to change { yields }.
|
53
|
+
from( [] ).
|
54
|
+
to( expected )
|
55
|
+
end
|
28
56
|
end
|
29
57
|
end
|
30
58
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Field, '#lines' do
|
6
|
+
let(:object) { described_class.new value }
|
7
|
+
|
8
|
+
subject { object.length }
|
9
|
+
|
10
|
+
context 'with escaped value' do
|
11
|
+
let(:value) { "Multi\nLine" }
|
12
|
+
|
13
|
+
it { should eql(5) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with unescaped value' do
|
17
|
+
let(:value) { "Multi\\nLine" }
|
18
|
+
|
19
|
+
it { should eql(11) }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Field, '#lines' do
|
6
|
+
let(:object) { described_class.new value }
|
7
|
+
|
8
|
+
subject { object.lines }
|
9
|
+
|
10
|
+
context 'with escaped value' do
|
11
|
+
let(:value) { "Multi\nLine" }
|
12
|
+
|
13
|
+
it { should eql(["Multi", "Line"]) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with unescaped value' do
|
17
|
+
let(:value) { "Multi\\nLine" }
|
18
|
+
|
19
|
+
it { should eql(["Multi\\nLine"]) }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, '#filter' do
|
6
|
+
let(:header) { ['h1', 'h2', 'h3'] }
|
7
|
+
let(:rows) { [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']] }
|
8
|
+
let(:table) { described_class.new(header, rows) }
|
9
|
+
let(:filter) { Proc.new { |val, row, col|
|
10
|
+
(col == 1 and row > 0) ? val.capitalize : val
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'filters rows' do
|
15
|
+
table.render do |renderer|
|
16
|
+
renderer.filter = filter
|
17
|
+
end.should == <<-EOS.normalize
|
18
|
+
h1 h2 h3
|
19
|
+
a1 A2 a3
|
20
|
+
b1 B2 b3
|
21
|
+
EOS
|
22
|
+
end
|
23
|
+
end
|
@@ -6,7 +6,7 @@ describe TTY::Table::Header, '#call' do
|
|
6
6
|
let(:object) { described_class.new(attributes) }
|
7
7
|
let(:attributes) { [:id, :name, :age] }
|
8
8
|
|
9
|
-
subject { object
|
9
|
+
subject { object[attribute] }
|
10
10
|
|
11
11
|
context 'with a known attribute' do
|
12
12
|
context 'when symbol' do
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Header, '#height' do
|
6
|
+
let(:object) { described_class.new header }
|
7
|
+
|
8
|
+
subject { object.height }
|
9
|
+
|
10
|
+
context 'single row' do
|
11
|
+
let(:header) { ['h1', 'h1'] }
|
12
|
+
|
13
|
+
it { expect(subject).to eql(1) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'non escaped multiline' do
|
17
|
+
let(:header) { ["h1\nh1\nh1", 'h2'] }
|
18
|
+
|
19
|
+
it { expect(subject).to eql(3)}
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'escaped multiline' do
|
23
|
+
let(:header) { ["h1\\h1\\h1", 'h2'] }
|
24
|
+
|
25
|
+
it { expect(subject).to eql(1) }
|
26
|
+
end
|
27
|
+
end
|
@@ -15,12 +15,12 @@ describe TTY::Table, '#initialize' do
|
|
15
15
|
context 'with rows only' do
|
16
16
|
it 'initializes with rows as arguments' do
|
17
17
|
table = TTY::Table[*rows]
|
18
|
-
table.to_a.
|
18
|
+
expect(table.to_a).to eql rows
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'initializes with rows' do
|
22
22
|
table = TTY::Table.new rows
|
23
|
-
table.to_a.
|
23
|
+
expect(table.to_a).to eql(rows)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'initializes table rows as an option' do
|
@@ -69,20 +69,20 @@ describe TTY::Table, '#initialize' do
|
|
69
69
|
context 'with header and rows' do
|
70
70
|
it 'initializes header as an option' do
|
71
71
|
table = TTY::Table.new :header => header
|
72
|
-
table.header.
|
72
|
+
expect(table.header).to eql header
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'initializes table rows as an argument' do
|
76
76
|
table = TTY::Table.new header, rows
|
77
|
-
table.header.
|
78
|
-
table.
|
77
|
+
expect(table.header).to eql(header)
|
78
|
+
expect(table.rows).to eql(rows)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
context 'coercion' do
|
83
83
|
it 'converts row arguments from hash to array' do
|
84
84
|
table = TTY::Table.new :rows => {:a => 1, :b => 2}
|
85
|
-
table.to_a.
|
85
|
+
expect(table.to_a).to include [:a, 1 ]
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Operation::AlignmentSet, '#call' do
|
6
|
+
let(:object) { described_class.new alignments, widths }
|
7
|
+
let(:value) { 'a1' }
|
8
|
+
let(:field) { TTY::Table::Field.new(value)}
|
9
|
+
|
10
|
+
subject { object.call(field, 0, 0) }
|
11
|
+
|
12
|
+
context 'aligned with column widths and no alignments' do
|
13
|
+
let(:alignments) { [] }
|
14
|
+
let(:widths) { [4, 4] }
|
15
|
+
|
16
|
+
it { should == "#{value} " }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'aligned with column widths and alignments' do
|
20
|
+
let(:alignments) { [:right, :left] }
|
21
|
+
let(:widths) { [4, 4] }
|
22
|
+
|
23
|
+
it { should == " #{value}" }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'aligned with no column widths and no alignments' do
|
27
|
+
let(:alignments) { [] }
|
28
|
+
let(:widths) { [] }
|
29
|
+
|
30
|
+
it { should == "#{value}" }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'aligned with no column widths and alignments' do
|
34
|
+
let(:alignments) { [:right, :left] }
|
35
|
+
let(:widths) { [] }
|
36
|
+
|
37
|
+
it { should == "#{value}" }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Operation::Escape, '#call' do
|
6
|
+
let(:object) { described_class }
|
7
|
+
let(:text) { "太丸\nゴシ\tック体\r" }
|
8
|
+
let(:field) { TTY::Table::Field.new(text) }
|
9
|
+
|
10
|
+
subject { object.new }
|
11
|
+
|
12
|
+
it 'changes field value' do
|
13
|
+
subject.call(field, 0, 0)
|
14
|
+
expect(field.value).to eql("太丸\\nゴシ\\tック体\\r")
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Operation::Filter, '#call' do
|
6
|
+
let(:object) { described_class }
|
7
|
+
let(:field) { TTY::Table::Field.new('a1') }
|
8
|
+
let(:filter) { Proc.new { |val, row, col| 'new' } }
|
9
|
+
let(:value) { 'new' }
|
10
|
+
|
11
|
+
subject { object.new(filter) }
|
12
|
+
|
13
|
+
it 'changes field value' do
|
14
|
+
subject.call(field, 0, 0)
|
15
|
+
expect(field.value).to eql(value)
|
16
|
+
end
|
17
|
+
end
|
@@ -3,25 +3,30 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe TTY::Table::Operation::Truncation, '#call' do
|
6
|
-
let(:object) { described_class.new }
|
7
|
-
let(:text)
|
8
|
-
let(:
|
6
|
+
let(:object) { described_class.new column_widths }
|
7
|
+
let(:text) { '太丸ゴシック体' }
|
8
|
+
let(:field) { TTY::Table::Field.new(text) }
|
9
9
|
|
10
10
|
context 'without column width' do
|
11
|
+
let(:column_widths) { [] }
|
12
|
+
|
11
13
|
it "truncates string" do
|
12
|
-
object.call(
|
13
|
-
expect(
|
14
|
-
expect(row[1]).to eql(text)
|
14
|
+
object.call(field, 0, 0)
|
15
|
+
expect(field.value).to eql(text)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
context 'with column width ' do
|
19
20
|
let(:column_widths) { [3, 6] }
|
20
21
|
|
21
|
-
it "truncates string" do
|
22
|
-
object.call(
|
23
|
-
expect(
|
24
|
-
|
22
|
+
it "truncates string for 0 column" do
|
23
|
+
object.call(field, 0, 0)
|
24
|
+
expect(field.value).to eql('太丸…')
|
25
|
+
end
|
26
|
+
|
27
|
+
it "truncates string for 1 column" do
|
28
|
+
object.call(field, 0, 1)
|
29
|
+
expect(field.value).to eql('太丸ゴシッ…')
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
@@ -3,25 +3,30 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe TTY::Table::Operation::Wrapped, '#call' do
|
6
|
-
let(:object) { described_class.new }
|
7
|
-
let(:text)
|
8
|
-
let(:
|
6
|
+
let(:object) { described_class.new column_widths }
|
7
|
+
let(:text) { 'ラドクリフ、マラソン五輪代表に1万m出場にも含み' }
|
8
|
+
let(:field) { TTY::Table::Field.new(text) }
|
9
9
|
|
10
10
|
context 'without column width' do
|
11
|
+
let(:column_widths) { [] }
|
12
|
+
|
11
13
|
it "doesn't wrap string" do
|
12
|
-
object.call(
|
13
|
-
expect(
|
14
|
-
expect(row[1]).to eql(text)
|
14
|
+
object.call(field, 0, 0)
|
15
|
+
expect(field.value).to eql(text)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
context 'with column width' do
|
19
20
|
let(:column_widths) { [12, 14] }
|
20
21
|
|
21
|
-
it "
|
22
|
-
object.call(
|
23
|
-
expect(
|
24
|
-
|
22
|
+
it "wraps string for 0 column" do
|
23
|
+
object.call(field, 0, 0)
|
24
|
+
expect(field.value).to eql("ラドクリフ、マラソン五輪\n代表に1万m出場にも含み")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "wraps string for 1 column" do
|
28
|
+
object.call(field, 0, 1)
|
29
|
+
expect(field.value).to eql("ラドクリフ、マラソン五輪代表\nに1万m出場にも含み")
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
@@ -8,8 +8,8 @@ describe TTY::Table::Operations, '#new' do
|
|
8
8
|
let(:table) { TTY::Table.new :rows => [row] }
|
9
9
|
let(:callable) {
|
10
10
|
Class.new do
|
11
|
-
def call(row,
|
12
|
-
|
11
|
+
def call(val, row, col)
|
12
|
+
val.value= val.value + 1
|
13
13
|
end
|
14
14
|
end
|
15
15
|
}
|
@@ -26,7 +26,7 @@ describe TTY::Table::Operations, '#new' do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'runs selected operations' do
|
29
|
-
subject.run_operations(:alignment
|
30
|
-
expect(
|
29
|
+
subject.run_operations(:alignment)
|
30
|
+
expect(table.data[0]).to eql([2,3,4])
|
31
31
|
end
|
32
32
|
end
|
@@ -21,33 +21,5 @@ describe TTY::Table, 'options' do
|
|
21
21
|
|
22
22
|
its(:rows) { should == rows }
|
23
23
|
|
24
|
-
its(:border) { should be_kind_of TTY::Table::BorderOptions }
|
25
|
-
|
26
24
|
its(:orientation) { should be_kind_of TTY::Table::Orientation::Horizontal }
|
27
|
-
|
28
|
-
its(:column_widths) { should be_empty }
|
29
|
-
|
30
|
-
its(:column_aligns) { should eql(aligns) }
|
31
|
-
|
32
|
-
it { subject.column_aligns.to_a.should be_empty }
|
33
|
-
|
34
|
-
context '#column_widths' do
|
35
|
-
let(:widths) { [10, 10] }
|
36
|
-
|
37
|
-
its(:column_widths) { should == widths }
|
38
|
-
end
|
39
|
-
|
40
|
-
context '#column_widths empty' do
|
41
|
-
let(:widths) { [] }
|
42
|
-
|
43
|
-
it { expect { subject }.to raise_error(TTY::InvalidArgument) }
|
44
|
-
end
|
45
|
-
|
46
|
-
context '#column_aligns' do
|
47
|
-
let(:aligns) { [:center, :center] }
|
48
|
-
|
49
|
-
it 'unwraps original array' do
|
50
|
-
subject.column_aligns.to_a.should == aligns
|
51
|
-
end
|
52
|
-
end
|
53
25
|
end
|