command_line_reporter 3.2.1 → 3.3.0
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/README.md +16 -12
- data/lib/{column.rb → command_line_reporter/column.rb} +8 -3
- data/lib/{nested_formatter.rb → command_line_reporter/formatter/nested.rb} +0 -1
- data/lib/{progress_formatter.rb → command_line_reporter/formatter/progress.rb} +0 -1
- data/lib/{options_validator.rb → command_line_reporter/options_validator.rb} +0 -0
- data/lib/{row.rb → command_line_reporter/row.rb} +4 -5
- data/lib/command_line_reporter/table.rb +130 -0
- data/lib/{version.rb → command_line_reporter/version.rb} +1 -1
- data/lib/command_line_reporter.rb +9 -2
- data/spec/column_spec.rb +193 -202
- data/spec/command_line_reporter_spec.rb +146 -146
- data/spec/nested_formatter_spec.rb +101 -91
- data/spec/options_validator_spec.rb +0 -1
- data/spec/progress_formatter_spec.rb +20 -18
- data/spec/row_spec.rb +56 -52
- data/spec/spec_helper.rb +4 -2
- data/spec/table_spec.rb +54 -16
- metadata +54 -57
- data/examples/capture.rb +0 -32
- data/examples/nested.rb +0 -38
- data/examples/progress.rb +0 -68
- data/examples/quiet.rb +0 -40
- data/examples/simple.rb +0 -23
- data/examples/table.rb +0 -71
- data/examples/variable.rb +0 -30
- data/lib/table.rb +0 -96
data/spec/table_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'table'
|
3
2
|
|
4
3
|
describe CommandLineReporter::Table do
|
5
4
|
context 'creation' do
|
@@ -10,11 +9,19 @@ describe CommandLineReporter::Table do
|
|
10
9
|
end
|
11
10
|
|
12
11
|
it 'defaults the border' do
|
13
|
-
CommandLineReporter::Table.new.border.
|
12
|
+
expect(CommandLineReporter::Table.new.border).to be_false
|
14
13
|
end
|
15
14
|
|
16
15
|
it 'accepts the border' do
|
17
|
-
CommandLineReporter::Table.new(:border => true).border.
|
16
|
+
expect(CommandLineReporter::Table.new(:border => true).border).to eq(true)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'output encoding should be ascii' do
|
20
|
+
expect(CommandLineReporter::Table.new(:encoding => :ascii).encoding).to eq(:ascii)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'output encoding should be unicode' do
|
24
|
+
expect(CommandLineReporter::Table.new.encoding).to eq(:unicode)
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
@@ -55,24 +62,24 @@ describe CommandLineReporter::Table do
|
|
55
62
|
it 'positional attributes' do
|
56
63
|
[:align, :width, :size, :padding].each do |m|
|
57
64
|
4.times do |i|
|
58
|
-
@table.rows[1].columns[i].send(m).
|
65
|
+
expect(@table.rows[1].columns[i].send(m)).to eq(@table.rows[0].columns[i].send(m))
|
59
66
|
end
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
63
70
|
context 'no header row' do
|
64
71
|
it 'color' do
|
65
|
-
@table.rows[1].columns[0].color.
|
66
|
-
@table.rows[1].columns[1].color.
|
67
|
-
@table.rows[1].columns[2].color.
|
68
|
-
@table.rows[1].columns[3].color.
|
72
|
+
expect(@table.rows[1].columns[0].color).to eq('red')
|
73
|
+
expect(@table.rows[1].columns[1].color).to eq('purple')
|
74
|
+
expect(@table.rows[1].columns[2].color).to eq('blue')
|
75
|
+
expect(@table.rows[1].columns[3].color).to eq('red')
|
69
76
|
end
|
70
77
|
|
71
78
|
it 'bold' do
|
72
|
-
@table.rows[1].columns[0].bold.
|
73
|
-
@table.rows[1].columns[1].bold.
|
74
|
-
@table.rows[1].columns[2].bold.
|
75
|
-
@table.rows[1].columns[3].bold.
|
79
|
+
expect(@table.rows[1].columns[0].bold).to be_false
|
80
|
+
expect(@table.rows[1].columns[1].bold).to be_false
|
81
|
+
expect(@table.rows[1].columns[2].bold).to be_false
|
82
|
+
expect(@table.rows[1].columns[3].bold).to be_true
|
76
83
|
end
|
77
84
|
end
|
78
85
|
|
@@ -88,12 +95,43 @@ describe CommandLineReporter::Table do
|
|
88
95
|
end
|
89
96
|
|
90
97
|
it 'bold' do
|
91
|
-
@table.rows[1].columns[0].bold.
|
92
|
-
@table.rows[1].columns[1].bold.
|
93
|
-
@table.rows[1].columns[2].bold.
|
94
|
-
@table.rows[1].columns[3].bold.
|
98
|
+
expect(@table.rows[1].columns[0].bold).to be_false
|
99
|
+
expect(@table.rows[1].columns[1].bold).to be_false
|
100
|
+
expect(@table.rows[1].columns[2].bold).to be_false
|
101
|
+
expect(@table.rows[1].columns[3].bold).to be_true
|
95
102
|
end
|
96
103
|
end
|
97
104
|
end
|
98
105
|
end
|
106
|
+
|
107
|
+
describe '#auto_adjust_widths' do
|
108
|
+
it 'sets the widths of each column in each row to the maximum required width for that column' do
|
109
|
+
table = CommandLineReporter::Table.new.tap do |t|
|
110
|
+
t.add(
|
111
|
+
CommandLineReporter::Row.new.tap do |r|
|
112
|
+
r.add CommandLineReporter::Column.new('medium length')
|
113
|
+
r.add CommandLineReporter::Column.new('i am pretty long') # longest column
|
114
|
+
r.add CommandLineReporter::Column.new('short', :padding => 100)
|
115
|
+
end
|
116
|
+
)
|
117
|
+
|
118
|
+
t.add(
|
119
|
+
CommandLineReporter::Row.new.tap do |r|
|
120
|
+
r.add CommandLineReporter::Column.new('longer than medium length') # longest column
|
121
|
+
r.add CommandLineReporter::Column.new('shorter')
|
122
|
+
r.add CommandLineReporter::Column.new('longer than short') # longest column (inherits padding)
|
123
|
+
end
|
124
|
+
)
|
125
|
+
end
|
126
|
+
|
127
|
+
table.auto_adjust_widths
|
128
|
+
|
129
|
+
table.rows.each do |row|
|
130
|
+
expect(row.columns[0].width).to eq(CommandLineReporter::Column.new('longer than medium length').required_width)
|
131
|
+
expect(row.columns[1].width).to eq(CommandLineReporter::Column.new('i am pretty long').required_width)
|
132
|
+
expect(row.columns[2].width).to eq(CommandLineReporter::Column.new('longer than short', :padding => 100).required_width)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
99
137
|
end
|
metadata
CHANGED
@@ -1,64 +1,64 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: command_line_reporter
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.3.0
|
4
5
|
prerelease:
|
5
|
-
version: 3.2.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Wes
|
9
9
|
- Bailey
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: bundler
|
18
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
23
22
|
version: 1.0.0
|
24
23
|
type: :development
|
25
24
|
prerelease: false
|
26
|
-
version_requirements:
|
27
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 1.0.0
|
31
|
+
- !ruby/object:Gem::Dependency
|
28
32
|
name: colored
|
29
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
30
34
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '1.2'
|
35
39
|
type: :runtime
|
36
40
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.2'
|
47
|
+
description: This gem makes it easy to provide a report while your ruby script is
|
48
|
+
executing
|
39
49
|
email: baywes@gmail.com
|
40
50
|
executables: []
|
41
|
-
|
42
51
|
extensions: []
|
43
|
-
|
44
52
|
extra_rdoc_files: []
|
45
|
-
|
46
|
-
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
- examples/variable.rb
|
54
|
-
- lib/column.rb
|
53
|
+
files:
|
54
|
+
- lib/command_line_reporter/column.rb
|
55
|
+
- lib/command_line_reporter/formatter/nested.rb
|
56
|
+
- lib/command_line_reporter/formatter/progress.rb
|
57
|
+
- lib/command_line_reporter/options_validator.rb
|
58
|
+
- lib/command_line_reporter/row.rb
|
59
|
+
- lib/command_line_reporter/table.rb
|
60
|
+
- lib/command_line_reporter/version.rb
|
55
61
|
- lib/command_line_reporter.rb
|
56
|
-
- lib/nested_formatter.rb
|
57
|
-
- lib/options_validator.rb
|
58
|
-
- lib/progress_formatter.rb
|
59
|
-
- lib/row.rb
|
60
|
-
- lib/table.rb
|
61
|
-
- lib/version.rb
|
62
62
|
- README.md
|
63
63
|
- spec/column_spec.rb
|
64
64
|
- spec/command_line_reporter_spec.rb
|
@@ -72,35 +72,32 @@ files:
|
|
72
72
|
- spec/table_spec.rb
|
73
73
|
homepage: http://github.com/wbailey/command_line_reporter
|
74
74
|
licenses: []
|
75
|
-
|
76
75
|
post_install_message:
|
77
76
|
rdoc_options: []
|
78
|
-
|
79
|
-
require_paths:
|
77
|
+
require_paths:
|
80
78
|
- lib
|
81
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
80
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
segments:
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
segments:
|
88
86
|
- 0
|
89
|
-
|
90
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
hash: -3116512959293506911
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
89
|
none: false
|
92
|
-
requirements:
|
93
|
-
- -
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version:
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
96
94
|
requirements: []
|
97
|
-
|
98
95
|
rubyforge_project:
|
99
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.25
|
100
97
|
signing_key:
|
101
98
|
specification_version: 3
|
102
99
|
summary: A tool for providing interactive command line applications
|
103
|
-
test_files:
|
100
|
+
test_files:
|
104
101
|
- spec/column_spec.rb
|
105
102
|
- spec/command_line_reporter_spec.rb
|
106
103
|
- spec/nested_formatter_spec.rb
|
data/examples/capture.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
|
3
|
-
class Example
|
4
|
-
include CommandLineReporter
|
5
|
-
|
6
|
-
def run
|
7
|
-
suppress_output
|
8
|
-
|
9
|
-
table :border => true do
|
10
|
-
row :color => 'red' do
|
11
|
-
column 'MY NAME IS REALLY LONG AND WILL WRAP AND HOPE', :width => 20, :align => 'center', :color => 'blue'
|
12
|
-
column 'ADDRESS', :width => 30, :padding => 5
|
13
|
-
column 'CITY', :width => 15
|
14
|
-
end
|
15
|
-
row :color => 'green', :bold => true do
|
16
|
-
column 'caeser'
|
17
|
-
column '1 Appian Way'
|
18
|
-
column 'Rome'
|
19
|
-
end
|
20
|
-
row do
|
21
|
-
column 'Richard Feynman'
|
22
|
-
column '1 Golden Gate'
|
23
|
-
column 'Quantum Field'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
return capture_output
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# All the content is now in the report variable
|
32
|
-
report = Example.new.run
|
data/examples/nested.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
|
3
|
-
class Example
|
4
|
-
include CommandLineReporter
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
self.formatter = 'nested'
|
8
|
-
self.formatter.complete_string = 'done'
|
9
|
-
end
|
10
|
-
|
11
|
-
def run
|
12
|
-
x,y,z = 0,0,0
|
13
|
-
|
14
|
-
report(:message => 'calculating first expression') do
|
15
|
-
x = 2 + 2
|
16
|
-
sleep 1
|
17
|
-
|
18
|
-
2.times do
|
19
|
-
report(:message => 'calculating second expression') do
|
20
|
-
y = 10 - x
|
21
|
-
sleep 1
|
22
|
-
|
23
|
-
10.times do |i|
|
24
|
-
report(:message => 'pixelizing', :type => 'inline', :complete => "#{i*10+10}%") do
|
25
|
-
z = x + y
|
26
|
-
sleep 1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
horizontal_rule(:width => 20)
|
34
|
-
%w(x y z).each {|v| aligned "#{v}: #{eval v}"}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
Example.new.run
|
data/examples/progress.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
|
3
|
-
class Example
|
4
|
-
include CommandLineReporter
|
5
|
-
|
6
|
-
NYAN_CHARS = "****[;::;<](^-^)"
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
self.formatter = 'progress'
|
10
|
-
end
|
11
|
-
|
12
|
-
def run
|
13
|
-
x = 0
|
14
|
-
|
15
|
-
report do
|
16
|
-
10.times do
|
17
|
-
x += 1
|
18
|
-
sleep 0.1
|
19
|
-
# formatter.progress
|
20
|
-
progress
|
21
|
-
|
22
|
-
10.times do
|
23
|
-
x += 1
|
24
|
-
sleep 0.1
|
25
|
-
# formatter.progress
|
26
|
-
progress
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
y = 0
|
32
|
-
|
33
|
-
report do
|
34
|
-
10.times do
|
35
|
-
y += 1
|
36
|
-
sleep 0.1
|
37
|
-
progress("#{y*10}%")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
report do
|
42
|
-
3.times do
|
43
|
-
progress("\\")
|
44
|
-
sleep 0.1
|
45
|
-
progress("/")
|
46
|
-
sleep 0.1
|
47
|
-
progress("-")
|
48
|
-
sleep 0.1
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
report(:color => 'red') do
|
53
|
-
100.times do
|
54
|
-
progress(erase_chars + NYAN_CHARS)
|
55
|
-
sleep 0.1
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
aligned "x: #{x}"
|
60
|
-
aligned "y: #{y}"
|
61
|
-
end
|
62
|
-
|
63
|
-
def erase_chars
|
64
|
-
"\10" * NYAN_CHARS.size + " "
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
Example.new.run
|
data/examples/quiet.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
require 'ostruct'
|
3
|
-
require 'optparse'
|
4
|
-
|
5
|
-
class Example
|
6
|
-
include CommandLineReporter
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
self.formatter = 'progress'
|
10
|
-
end
|
11
|
-
|
12
|
-
def run(options = {})
|
13
|
-
x = 0
|
14
|
-
|
15
|
-
suppress_output if options.quiet
|
16
|
-
|
17
|
-
report do
|
18
|
-
10.times do
|
19
|
-
x += 1
|
20
|
-
sleep 0.1
|
21
|
-
progress
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
restore_output if options.quiet
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
options = OpenStruct.new({:quiet => false})
|
31
|
-
|
32
|
-
OptionParser.new do |opts|
|
33
|
-
opts.banner = "Usage: ruby -I lib example/quiet.rb [-q|--quiet]"
|
34
|
-
|
35
|
-
opts.on('-q', '--quiet', 'do not print any output') do
|
36
|
-
options.quiet = true
|
37
|
-
end
|
38
|
-
end.parse!
|
39
|
-
|
40
|
-
Example.new.run(options)
|
data/examples/simple.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
|
3
|
-
include CommandLineReporter
|
4
|
-
|
5
|
-
class Example
|
6
|
-
def initialize
|
7
|
-
self.formatter = 'progress'
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
report do
|
12
|
-
sum = 0
|
13
|
-
10.times do
|
14
|
-
sum += 10
|
15
|
-
progress
|
16
|
-
end
|
17
|
-
vertical_spacing
|
18
|
-
aligned("Sum: #{sum}")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
Example.new.run
|
data/examples/table.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
# recoil <co>mmand_<li>ne_<re>porter
|
2
|
-
require 'command_line_reporter'
|
3
|
-
|
4
|
-
class Example
|
5
|
-
include CommandLineReporter
|
6
|
-
|
7
|
-
def run
|
8
|
-
header(:title => 'TABLE EXAMPLES - Borders, Wrapping, Alignment and Padding', :align => 'center', :width => 70)
|
9
|
-
|
10
|
-
2.times do |j|
|
11
|
-
header :title => "Table #{j}", :align => 'center', :width => 65
|
12
|
-
|
13
|
-
table :border => j % 2 == 0 do
|
14
|
-
3.times do
|
15
|
-
row do
|
16
|
-
i = 0
|
17
|
-
3.times do
|
18
|
-
i += 10
|
19
|
-
column 'x' * (0 + rand(50)), :align => %w[left right center][rand(3)], :width => i, :padding => rand(5)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
vertical_spacing 2
|
26
|
-
end
|
27
|
-
|
28
|
-
header :title => 'An example of a table with a header row. The color and border properties are not inherited'
|
29
|
-
|
30
|
-
table :border => true do
|
31
|
-
row :header => true, :color => 'red' do
|
32
|
-
column 'MY NAME IS REALLY LONG AND WILL WRAP AND HOPE', :width => 20, :align => 'center', :color => 'blue'
|
33
|
-
column 'ADDRESS', :width => 30, :padding => 5
|
34
|
-
column 'CITY', :width => 15
|
35
|
-
end
|
36
|
-
row :color => 'green', :bold => true do
|
37
|
-
column 'caeser'
|
38
|
-
column '1 Appian Way'
|
39
|
-
column 'Rome'
|
40
|
-
end
|
41
|
-
row do
|
42
|
-
column 'Richard Feynman'
|
43
|
-
column '1 Golden Gate'
|
44
|
-
column 'Quantum Field'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
vertical_spacing 2
|
49
|
-
header :title => 'The same table with the properties inherited from the first row'
|
50
|
-
|
51
|
-
table :border => true do
|
52
|
-
row :color => 'red' do
|
53
|
-
column 'MY NAME IS REALLY LONG AND WILL WRAP AND HOPE', :width => 20, :align => 'center', :color => 'blue'
|
54
|
-
column 'ADDRESS', :width => 30, :padding => 5
|
55
|
-
column 'CITY', :width => 15
|
56
|
-
end
|
57
|
-
row :color => 'green', :bold => true do
|
58
|
-
column 'caeser'
|
59
|
-
column '1 Appian Way'
|
60
|
-
column 'Rome'
|
61
|
-
end
|
62
|
-
row do
|
63
|
-
column 'Richard Feynman'
|
64
|
-
column '1 Golden Gate'
|
65
|
-
column 'Quantum Field'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
Example.new.run
|
data/examples/variable.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'command_line_reporter'
|
2
|
-
|
3
|
-
include CommandLineReporter
|
4
|
-
|
5
|
-
class Example
|
6
|
-
def initialize
|
7
|
-
self.formatter = 'progress'
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
suppress_output
|
12
|
-
|
13
|
-
report do
|
14
|
-
sum = 0
|
15
|
-
10.times do
|
16
|
-
sum += 10
|
17
|
-
progress
|
18
|
-
end
|
19
|
-
vertical_spacing
|
20
|
-
aligned("Sum: #{sum}")
|
21
|
-
end
|
22
|
-
|
23
|
-
capture_output
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
out = Example.new.run
|
28
|
-
|
29
|
-
puts 'this could be stored in a database'
|
30
|
-
puts out
|
data/lib/table.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
require 'row'
|
2
|
-
require 'options_validator'
|
3
|
-
|
4
|
-
module CommandLineReporter
|
5
|
-
class Table
|
6
|
-
include OptionsValidator
|
7
|
-
|
8
|
-
VALID_OPTIONS = [:border]
|
9
|
-
attr_accessor :rows, *VALID_OPTIONS
|
10
|
-
|
11
|
-
def initialize(options = {})
|
12
|
-
self.validate_options(options, *VALID_OPTIONS)
|
13
|
-
|
14
|
-
self.border = options[:border] || false
|
15
|
-
|
16
|
-
@rows = []
|
17
|
-
end
|
18
|
-
|
19
|
-
def add(row)
|
20
|
-
# Inheritance from the table
|
21
|
-
row.border = self.border
|
22
|
-
|
23
|
-
# Inherit properties from the first row
|
24
|
-
if self.rows[0]
|
25
|
-
row.columns.each_with_index do |c,i|
|
26
|
-
# The positional attributes are always required to inheret to make sure the table
|
27
|
-
# displays properly
|
28
|
-
c.align = self.rows[0].columns[i].align
|
29
|
-
c.padding = self.rows[0].columns[i].padding
|
30
|
-
c.width = self.rows[0].columns[i].width
|
31
|
-
c.size = c.width - 2 * c.padding
|
32
|
-
|
33
|
-
# Allow for the fact that the row or column may take precedence and that the first
|
34
|
-
# row might be a header row which we don't want to inherit from
|
35
|
-
unless row.color || c.color
|
36
|
-
if self.rows[0].header
|
37
|
-
c.color = self.rows[1].columns[i].color if self.rows[1]
|
38
|
-
else
|
39
|
-
c.color = self.rows[0].columns[i].color
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Allow for the row to take precendence and that the first # row might be a header
|
44
|
-
# row which we don't want to inherit from
|
45
|
-
unless row.bold
|
46
|
-
if self.rows[0].header
|
47
|
-
c.bold = self.rows[1].columns[i].bold if self.rows[1]
|
48
|
-
else
|
49
|
-
c.bold = self.rows[0].columns[i].bold
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
self.rows << row
|
56
|
-
end
|
57
|
-
|
58
|
-
def output
|
59
|
-
return if self.rows.size == 0 # we got here with nothing to print to the screen
|
60
|
-
|
61
|
-
puts separator('first') if self.border
|
62
|
-
self.rows.each_with_index do |row, index|
|
63
|
-
row.output
|
64
|
-
puts separator('middle') if self.border && (index != self.rows.size - 1)
|
65
|
-
end
|
66
|
-
puts separator('last') if self.border
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def separator(type = 'middle')
|
72
|
-
if "\u2501" == 'u2501'
|
73
|
-
left = right = center = '+'
|
74
|
-
bar = '-'
|
75
|
-
else
|
76
|
-
bar = "\u2501"
|
77
|
-
case type
|
78
|
-
when 'first'
|
79
|
-
left = "\u250F"
|
80
|
-
center = "\u2533"
|
81
|
-
right = "\u2513"
|
82
|
-
when 'middle'
|
83
|
-
left = "\u2523"
|
84
|
-
center = "\u254A"
|
85
|
-
right = "\u252B"
|
86
|
-
when 'last'
|
87
|
-
left = "\u2517"
|
88
|
-
center = "\u253B"
|
89
|
-
right = "\u251B"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
left + self.rows[0].columns.map {|c| bar * (c.width + 2)}.join(center) + right
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|