tty 0.0.1 → 0.0.2
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/.gitignore +1 -0
- data/README.md +45 -6
- data/lib/tty.rb +23 -2
- data/lib/tty/color.rb +0 -4
- data/lib/tty/support/conversion.rb +34 -0
- data/lib/tty/support/delegatable.rb +44 -0
- data/lib/tty/support/utils.rb +2 -0
- data/lib/tty/system.rb +31 -0
- data/lib/tty/table.rb +155 -20
- data/lib/tty/table/error.rb +10 -0
- data/lib/tty/table/renderer.rb +16 -6
- data/lib/tty/table/renderer/basic.rb +60 -20
- data/lib/tty/table/renderer/color.rb +1 -1
- data/lib/tty/table/renderer/unicode.rb +1 -1
- data/lib/tty/table/validatable.rb +34 -0
- data/lib/tty/terminal.rb +149 -0
- data/lib/tty/version.rb +1 -1
- data/spec/tty/support/conversion_spec.rb +38 -0
- data/spec/tty/support/delegatable_spec.rb +26 -0
- data/spec/tty/support/fixtures/classes.rb +17 -0
- data/spec/tty/system/platform_spec.rb +21 -0
- data/spec/tty/table/access_spec.rb +59 -0
- data/spec/tty/table/eql_spec.rb +28 -0
- data/spec/tty/table/initialize_spec.rb +53 -0
- data/spec/tty/table/properties_spec.rb +24 -0
- data/spec/tty/table/renderer/basic_spec.rb +20 -0
- data/spec/tty/table/renderer_spec.rb +7 -0
- data/spec/tty/table/validatable_spec.rb +19 -0
- data/spec/tty/terminal/size_spec.rb +94 -0
- metadata +34 -11
- data/lib/tty/support/.utils.rb.swo +0 -0
- data/spec/tty/table/table_spec.rb +0 -75
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::System, '#platform' do
|
6
|
+
subject { described_class }
|
7
|
+
|
8
|
+
it { should respond_to(:windows?) }
|
9
|
+
|
10
|
+
it { should respond_to(:unix?) }
|
11
|
+
|
12
|
+
it 'checks if windows' do
|
13
|
+
RbConfig::CONFIG.stub(:[]).with('host_os').and_return 'windows'
|
14
|
+
subject.windows?.should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'checks if unix' do
|
18
|
+
RbConfig::CONFIG.stub(:[]).with('host_os').and_return 'darwin'
|
19
|
+
subject.unix?.should be_true
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, 'access' do
|
6
|
+
let(:rows) { [['a1', 'a2'], ['b1', 'b2']] }
|
7
|
+
subject { TTY::Table.new :rows => rows }
|
8
|
+
|
9
|
+
it { should respond_to(:element) }
|
10
|
+
|
11
|
+
it { should respond_to(:component) }
|
12
|
+
|
13
|
+
its([0,0]) { should == 'a1'}
|
14
|
+
|
15
|
+
context '#row' do
|
16
|
+
|
17
|
+
it 'returns nil for wrong index' do
|
18
|
+
subject.row(11).should be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'gets row at index' do
|
22
|
+
subject.row(1).should == rows[1]
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'yields self for wrong index' do
|
26
|
+
block = lambda { |el| [] << el }
|
27
|
+
subject.row(11, &block).should eql subject
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'yields row at index' do
|
31
|
+
yields = []
|
32
|
+
expect { subject.row(1).each { |el| yields << el } }.to change { yields }.
|
33
|
+
from( [] ).
|
34
|
+
to( rows[1] )
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context '#column' do
|
39
|
+
it 'returns nil for wrong index' do
|
40
|
+
subject.column(11).should be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'gets column at index' do
|
44
|
+
subject.column(0).should == ['a1', 'b1']
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'yields self for wrong index' do
|
48
|
+
block = lambda { |el| [] << el }
|
49
|
+
subject.column(11, &block).should eql subject
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'yields column at index' do
|
53
|
+
yields = []
|
54
|
+
expect { subject.column(1).each { |el| yields << el } }.to change { yields }.
|
55
|
+
from( [] ).
|
56
|
+
to( ['a2', 'b2'])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, '#eql?' do
|
6
|
+
subject { object.eql?(other) }
|
7
|
+
let(:object) { described_class.new }
|
8
|
+
|
9
|
+
context 'with the same object' do
|
10
|
+
let(:other) { object }
|
11
|
+
|
12
|
+
it { should be_true }
|
13
|
+
|
14
|
+
it 'is symmetric' do
|
15
|
+
should eql(other.eql?(object))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with an equivalent object' do
|
20
|
+
let(:other) { object.dup }
|
21
|
+
|
22
|
+
it { should be_true }
|
23
|
+
|
24
|
+
it 'is symmetric' do
|
25
|
+
should eql(other.eql?(object))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, '#initialize' do
|
6
|
+
let(:header) { ['Header1', 'Header2'] }
|
7
|
+
let(:rows) { [['a1', 'a2'], ['b1', 'b2']] }
|
8
|
+
|
9
|
+
it { should be_kind_of(Enumerable) }
|
10
|
+
it { should be_kind_of(Comparable) }
|
11
|
+
|
12
|
+
it { (Enumerable === subject).should be_true }
|
13
|
+
|
14
|
+
it 'initializes table header' do
|
15
|
+
table = TTY::Table.new header
|
16
|
+
table.header.should == header
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'initializes table header as an option' do
|
20
|
+
table = TTY::Table.new :header => header
|
21
|
+
table.header.should == header
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'initializes with rows as arguments' do
|
25
|
+
table = TTY::Table[['a1', 'a2'], ['b1', 'b2']]
|
26
|
+
table.to_a.should == rows
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'initializes table rows as an option' do
|
30
|
+
table = TTY::Table.new :rows => rows
|
31
|
+
table.to_a.should == rows
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'initializes table rows as an argument' do
|
35
|
+
table = TTY::Table.new header, rows
|
36
|
+
table.to_a.should == rows
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'initializes table rows in a block with param' do
|
40
|
+
table = TTY::Table.new header do |t|
|
41
|
+
t << rows[0]
|
42
|
+
t << rows[1]
|
43
|
+
end
|
44
|
+
table.to_a.should == rows
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'initializes table and adds rows' do
|
48
|
+
table = TTY::Table.new header
|
49
|
+
table << rows[0]
|
50
|
+
table << rows[1]
|
51
|
+
table.to_a.should == rows
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table, 'properties' do
|
6
|
+
let(:rows) {[['a1', 'a2', 'a3'], ['b1', 'b2', 'c3']] }
|
7
|
+
subject { described_class.new :rows => rows, :renderer => :basic }
|
8
|
+
|
9
|
+
its(:width) { should == 6 }
|
10
|
+
|
11
|
+
its(:row_size) { should == 2 }
|
12
|
+
|
13
|
+
its(:column_size) { should == 3 }
|
14
|
+
|
15
|
+
its(:size) { should == [2,3] }
|
16
|
+
|
17
|
+
context 'no size' do
|
18
|
+
let(:rows) { [] }
|
19
|
+
|
20
|
+
its(:row_size) { should == 0 }
|
21
|
+
|
22
|
+
its(:column_size) { should == 0 }
|
23
|
+
end
|
24
|
+
end
|
@@ -7,6 +7,17 @@ describe TTY::Table::Renderer::Basic do
|
|
7
7
|
let(:header) { ['Header1', 'Header2'] }
|
8
8
|
let(:rows) { [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']] }
|
9
9
|
|
10
|
+
subject { described_class.new }
|
11
|
+
|
12
|
+
it { should respond_to(:render) }
|
13
|
+
|
14
|
+
context '#extract_column_widths' do
|
15
|
+
it 'calculates column widths' do
|
16
|
+
rows = [['a1a', 'a2a2a2'], ['b1b1b', 'b2b2']]
|
17
|
+
subject.extract_column_widths(rows).should == [5,6]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
10
21
|
context '#render' do
|
11
22
|
it 'displays table without styling' do
|
12
23
|
table = TTY::Table.new header, :renderer => :basic
|
@@ -17,5 +28,14 @@ describe TTY::Table::Renderer::Basic do
|
|
17
28
|
b1 b2 b3
|
18
29
|
EOS
|
19
30
|
end
|
31
|
+
|
32
|
+
it 'displays table according to widths' do
|
33
|
+
rows = [['aaa1', 'a2'], ['b1', 'bb1']]
|
34
|
+
table = TTY::Table.new header, rows, :renderer => :basic
|
35
|
+
table.to_s.should == <<-EOS.normalize
|
36
|
+
aaa1 a2
|
37
|
+
b1 bb1
|
38
|
+
EOS
|
39
|
+
end
|
20
40
|
end
|
21
41
|
end
|
@@ -15,6 +15,8 @@ describe TTY::Table, '#renderer' do
|
|
15
15
|
TTY::Table.renderer = basic_renderer
|
16
16
|
end
|
17
17
|
|
18
|
+
it { should respond_to(:render) }
|
19
|
+
|
18
20
|
it 'sets basic renderer' do
|
19
21
|
TTY::Table.renderer.should be TTY::Table::Renderer::Basic
|
20
22
|
end
|
@@ -34,4 +36,9 @@ describe TTY::Table, '#renderer' do
|
|
34
36
|
table = TTY::Table.new
|
35
37
|
table.renderer.should be_kind_of(unicode_renderer)
|
36
38
|
end
|
39
|
+
|
40
|
+
it 'delegates to renderer' do
|
41
|
+
table = TTY::Table.new
|
42
|
+
table.render( [['a']] ).should == 'a'
|
43
|
+
end
|
37
44
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Table::Validatable do
|
6
|
+
let(:described_class) { Class.new { include TTY::Table::Validatable } }
|
7
|
+
let(:rows) { [['a1', 'a2'], ['b1']] }
|
8
|
+
subject { described_class.new }
|
9
|
+
|
10
|
+
it 'raises no exception' do
|
11
|
+
rows[1] << ['b2']
|
12
|
+
expect { subject.assert_row_sizes(rows) }.not_to raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'raises exception for mismatched rows' do
|
16
|
+
expect { subject.assert_row_sizes(rows) }.
|
17
|
+
to raise_error(TTY::Table::DimensionMismatchError)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TTY::Terminal, '#size' do
|
6
|
+
let(:default_width) { 80 }
|
7
|
+
let(:default_height) { 24 }
|
8
|
+
|
9
|
+
it { should be_instance_of(described_class) }
|
10
|
+
|
11
|
+
it { should respond_to(:width) }
|
12
|
+
|
13
|
+
it { should respond_to(:height) }
|
14
|
+
|
15
|
+
its(:default_width) { should == default_width }
|
16
|
+
|
17
|
+
its(:default_height) { should == default_height }
|
18
|
+
|
19
|
+
context '#width' do
|
20
|
+
it 'sets the env variable' do
|
21
|
+
ENV.stub(:[]).with('TTY_COLUMNS').and_return '100'
|
22
|
+
subject.width.should == 100
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'is not unix system' do
|
26
|
+
TTY::System.stub(:unix?) { false }
|
27
|
+
subject.should_receive(:default_width)
|
28
|
+
subject.width
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'is unix system' do
|
32
|
+
TTY::System.stub(:unix?) { true }
|
33
|
+
subject.should_receive(:dynamic_width)
|
34
|
+
subject.width
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'cannot determine width' do
|
38
|
+
ENV.stub(:[]) { raise }
|
39
|
+
subject.should_receive(:default_width)
|
40
|
+
subject.width
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context '#height' do
|
45
|
+
it 'sets the env variable' do
|
46
|
+
ENV.stub(:[]).with('TTY_LINES').and_return '50'
|
47
|
+
subject.height.should == 50
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'is not unix system' do
|
51
|
+
TTY::System.stub(:unix?) { false }
|
52
|
+
subject.should_receive(:default_height)
|
53
|
+
subject.height
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'is unix system' do
|
57
|
+
TTY::System.stub(:unix?) { true }
|
58
|
+
subject.should_receive(:dynamic_height)
|
59
|
+
subject.height
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'cannot determine width' do
|
63
|
+
ENV.stub(:[]) { raise }
|
64
|
+
subject.should_receive(:default_height)
|
65
|
+
subject.height
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context '#dynamic_width' do
|
70
|
+
it 'uses stty' do
|
71
|
+
subject.should_receive(:dynamic_width_stty) { 100 }
|
72
|
+
subject.dynamic_width
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'uses tput' do
|
76
|
+
subject.stub(:dynamic_width_stty).and_return 0
|
77
|
+
subject.should_receive(:dynamic_width_tput) { 100 }
|
78
|
+
subject.dynamic_width
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context '#dynamic_height' do
|
83
|
+
it 'uses stty' do
|
84
|
+
subject.should_receive(:dynamic_height_stty) { 100 }
|
85
|
+
subject.dynamic_height
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'uses tput' do
|
89
|
+
subject.stub(:dynamic_height_stty).and_return 0
|
90
|
+
subject.should_receive(:dynamic_height_tput) { 100 }
|
91
|
+
subject.dynamic_height
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152405380 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152405380
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152404940 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152404940
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152404520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152404520
|
47
47
|
description: Toolbox for developing CLI clients
|
48
48
|
email:
|
49
49
|
- ''
|
@@ -62,20 +62,34 @@ files:
|
|
62
62
|
- Rakefile
|
63
63
|
- lib/tty.rb
|
64
64
|
- lib/tty/color.rb
|
65
|
-
- lib/tty/support
|
65
|
+
- lib/tty/support/conversion.rb
|
66
|
+
- lib/tty/support/delegatable.rb
|
66
67
|
- lib/tty/support/utils.rb
|
68
|
+
- lib/tty/system.rb
|
67
69
|
- lib/tty/table.rb
|
70
|
+
- lib/tty/table/error.rb
|
68
71
|
- lib/tty/table/renderer.rb
|
69
72
|
- lib/tty/table/renderer/basic.rb
|
70
73
|
- lib/tty/table/renderer/color.rb
|
71
74
|
- lib/tty/table/renderer/unicode.rb
|
75
|
+
- lib/tty/table/validatable.rb
|
76
|
+
- lib/tty/terminal.rb
|
72
77
|
- lib/tty/version.rb
|
73
78
|
- spec/spec_helper.rb
|
74
79
|
- spec/tty/color_spec.rb
|
80
|
+
- spec/tty/support/conversion_spec.rb
|
81
|
+
- spec/tty/support/delegatable_spec.rb
|
82
|
+
- spec/tty/support/fixtures/classes.rb
|
83
|
+
- spec/tty/system/platform_spec.rb
|
84
|
+
- spec/tty/table/access_spec.rb
|
75
85
|
- spec/tty/table/each_spec.rb
|
86
|
+
- spec/tty/table/eql_spec.rb
|
87
|
+
- spec/tty/table/initialize_spec.rb
|
88
|
+
- spec/tty/table/properties_spec.rb
|
76
89
|
- spec/tty/table/renderer/basic_spec.rb
|
77
90
|
- spec/tty/table/renderer_spec.rb
|
78
|
-
- spec/tty/table/
|
91
|
+
- spec/tty/table/validatable_spec.rb
|
92
|
+
- spec/tty/terminal/size_spec.rb
|
79
93
|
- tty.gemspec
|
80
94
|
homepage: http://github.com/peter-murach/tty
|
81
95
|
licenses: []
|
@@ -104,8 +118,17 @@ summary: Toolbox for developing CLI clients
|
|
104
118
|
test_files:
|
105
119
|
- spec/spec_helper.rb
|
106
120
|
- spec/tty/color_spec.rb
|
121
|
+
- spec/tty/support/conversion_spec.rb
|
122
|
+
- spec/tty/support/delegatable_spec.rb
|
123
|
+
- spec/tty/support/fixtures/classes.rb
|
124
|
+
- spec/tty/system/platform_spec.rb
|
125
|
+
- spec/tty/table/access_spec.rb
|
107
126
|
- spec/tty/table/each_spec.rb
|
127
|
+
- spec/tty/table/eql_spec.rb
|
128
|
+
- spec/tty/table/initialize_spec.rb
|
129
|
+
- spec/tty/table/properties_spec.rb
|
108
130
|
- spec/tty/table/renderer/basic_spec.rb
|
109
131
|
- spec/tty/table/renderer_spec.rb
|
110
|
-
- spec/tty/table/
|
132
|
+
- spec/tty/table/validatable_spec.rb
|
133
|
+
- spec/tty/terminal/size_spec.rb
|
111
134
|
has_rdoc:
|