tty 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|