command_line_reporter 2.0 → 2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,15 +1,23 @@
1
1
  ## Command Line Reporter
2
2
 
3
- This gem provides an simple way to add RSpec like formatting of the output of your ruby scripts. It
4
- eliminates the need to litter your code with *puts* statements instead providing a cleaner, more
5
- ruby like way of reporting progress to the user throught the command line interface.
3
+ This gem provides a DSL that makes it easy to write reports of various types in ruby. It eliminate
4
+ the need to litter your source with *puts* statements instead providing a more readable, expressive
5
+ interface to your application. Some of the best features include:
6
6
 
7
- With the release of Version 2.0, it is now possible to produce tables with and without borders. See
8
- the section on *Tables* for more examples.
7
+ * Formatters that automatically indicate progress
8
+ * Table syntax similar to HTML that makes it trivial to format your data in rows and columns
9
+ * Easily created headers and footers for your report
10
+ * Output suppression that makes it easy for your script to support a _quiet_ flag
9
11
 
10
12
  ### Installation
11
13
 
12
- It is up on rubygems.org so add it to your bundle or do it the old fashioned way:
14
+ It is up on rubygems.org so add it to your bundle
15
+
16
+ ```bash
17
+ gem 'command_line_reporter', '>=2.1'
18
+ ```
19
+
20
+ or do it the old fashioned way:
13
21
 
14
22
  ```bash
15
23
  gem install command_line_reporter
@@ -20,10 +28,20 @@ gem install command_line_reporter
20
28
  The gem provides a mixin that can be included in your scripts.
21
29
 
22
30
  ```ruby
23
- include CommandLineReporter
31
+ require 'command_line_reporter'
32
+
33
+ class MyReport
34
+ include CommandLineReporter
35
+ ...
36
+ end
24
37
  ```
25
38
 
26
- ##### Standard Methods
39
+ ### [Wiki](https://github.com/wbailey/command_line_reporter/wiki)
40
+
41
+ The [Wiki](https://github.com/wbailey/command_line_reporter/wiki) has all of the documentation
42
+ necessary for getting you started.
43
+
44
+ ### API Reference
27
45
 
28
46
  There are several methods the mixin provides that do not depend on the formatter used:
29
47
 
@@ -74,277 +92,27 @@ There are several methods the mixin provides that do not depend on the formatter
74
92
  * :padding - The number of spaces to put on both the left and right of the text.
75
93
  * :align - Allowed values are left|right|center
76
94
 
77
- ### Progress Formatter
78
-
79
- #### Example
80
-
81
- ```ruby
82
- require 'command_line_reporter'
83
-
84
- class Example
85
- include CommandLineReporter
86
-
87
- def initialize
88
- self.formatter = 'progress'
89
- end
90
-
91
- def run
92
- x = 0
93
- report do
94
- 10.times do
95
- x += 1
96
- formatter.progress
97
- end
98
- end
99
- end
100
- end
101
-
102
- Example.new.run
103
- ```
104
-
105
- This simply produces 10 dots (.) in succession:
106
-
107
- ```bash
108
- [~/scratch]$ ruby example.rb
109
- ..........
110
- ```
111
-
112
- #### Indicator
113
-
114
- The indicator is the string that is displayed in the command line interface that indicates progress.
115
- The default is the dot (.) but any string is allowed. In fact one can use the erase character to
116
- get crafty with displaying percent complete in place.
117
-
118
- #### Instance Methods
119
-
120
- * _indicator(string)_ - This overrides the default value of the dot (.) being used for all calls to
121
- the report method.
122
-
123
- ```ruby
124
- formatter.indicator('*')
125
- ```
126
-
127
- * _progress(string)_ - Call this method to invoke the output to the command line interface. The
128
- string overrides the indicator for this call only.
129
-
130
- ```ruby
131
- formatter.progress
132
- formatter.progress("^H^H^H10%")
133
- ```
134
-
135
- ### Nested Formatter
136
-
137
- The nested formatter concept is inspired by the documentation formatter in RSpec. The idea is to be
138
- able to create nested grouping levels of output that are very readable as the code is being
139
- executed.
140
-
141
- #### Example
142
-
143
- ```ruby
144
- require 'command_line_reporter'
145
-
146
- class Example
147
- include CommandLineReporter
148
-
149
- def initialize
150
- self.formatter = 'nested'
151
- end
152
-
153
- def run
154
- x,y,z = 0,0,0
155
-
156
- report(:message => 'calculating first expression') do
157
- x = 2 + 2
158
- 2.times do
159
- report(:message => 'calculating second expression') do
160
- y = 10 - x
161
- 10.times do |i|
162
- report(:message => 'pixelizing', :type => 'inline', :complete => "#{i*10+10}%") do
163
- z = x + y
164
- end
165
- end
166
- end
167
- end
168
- end
169
- end
170
- end
171
-
172
- Example.new.run
173
-
174
- ```
175
-
176
- This produces the more complex output:
177
-
178
- ```
179
- [~/scratch]$ ruby example.rb
180
- calculating first expression
181
- calculating second expression
182
- pixelizing...10%
183
- pixelizing...20%
184
- pixelizing...30%
185
- pixelizing...40%
186
- pixelizing...50%
187
- pixelizing...60%
188
- pixelizing...70%
189
- pixelizing...80%
190
- pixelizing...90%
191
- pixelizing...100%
192
- complete
193
- calculating second expression
194
- pixelizing...10%
195
- pixelizing...20%
196
- pixelizing...30%
197
- pixelizing...40%
198
- pixelizing...50%
199
- pixelizing...60%
200
- pixelizing...70%
201
- pixelizing...80%
202
- pixelizing...90%
203
- pixelizing...100%
204
- complete
205
- complete
206
- ```
207
-
208
- #### Instance Methods
209
-
210
- * _message_string(string)_ - This defines the string that is displayed as the first part of the
211
- message to the user. The default value is "_working_".
212
-
213
- ```ruby
214
- formatter.message_string('working')
215
- ```
216
-
217
- * _complete_string(string)_ - This defines the string that completes the message to the user for the
218
- report. The default value is "_complete_".
219
-
220
- ```ruby
221
- formatter.complete_string('done')
222
- ```
223
-
224
- * _indent_size(int)_ - The number of spaces to indent for a single indentation level. The default
225
- value is 2 spaces.
226
-
227
- ```ruby
228
- formatter.indent_size(4)
229
- ```
230
-
231
- #### Report Options
232
-
233
- The following are the allowed values of the options hash argument to the _report_ method:
234
-
235
- * _:message_ - The string that is displayed as the first part of the message to the user
236
- * _:complete_ - The string that completes the message to the user
237
- * _:type_ - Define as 'inline' if you want the message and complete strings on the same line
238
- * _:indent_size_ - The number of spaces to indent the current level
239
-
240
- ```ruby
241
- report(:message => 'running', :complete => 'finished', :type => 'inline', :indent_size => 8) do
242
- # code here
243
- end
244
- ```
245
-
246
- ### Tables
247
-
248
- Examples are always helpful so let's look at the following:
249
-
250
- ```ruby
251
- require 'command_line_reporter'
252
-
253
- class Example
254
- include CommandLineReporter
255
-
256
- def run
257
- table(:border => true) do
258
- row do
259
- column('NAME', :width => 20)
260
- column('ADDRESS', :width => 30, :align => 'right', :padding => 5)
261
- column('CITY', :width => 15)
262
- end
263
- row do
264
- column('Ceaser')
265
- column('1 Appian Way')
266
- column('Rome')
267
- end
268
- row do
269
- column('Richard Feynman')
270
- column('1 Golden Gate')
271
- column('Quantum Field')
272
- end
273
- end
274
- end
275
- end
276
-
277
- Example.new.run
278
- ```
279
-
280
- This produces the very simple output with 2 rows and 3 columns of data:
281
-
282
- ```bash
283
- +----------------------+--------------------------------+-----------------+
284
- | NAME | ADDRESS | CITY |
285
- +----------------------+--------------------------------+-----------------+
286
- | Ceaser | 1 Appian Way | Rome |
287
- +----------------------+--------------------------------+-----------------+
288
- | Richard Feynman | 1 Golden Gate | Quantum Field |
289
- +----------------------+--------------------------------+-----------------+
290
- ```
291
-
292
- Notice how the properties of the columns for the second and third rows have been inherited from the
293
- first like in HTML. This makes it a lot easier to write in freeform. What if you have data to
294
- iterate over and have text that is wider than the column width you have selected? Not a problem as
295
- the following example demonstrates all of the combinations of the various options:
296
-
297
- ```ruby
298
- require 'command_line_reporter'
299
-
300
- class Example
301
- include CommandLineReporter
95
+ ### To Do
302
96
 
303
- def run
304
- table(:border => true) do
305
- 3.times do
306
- row do
307
- i = 0
308
- 3.times do
309
- i += 10
310
- column('x' * (0 + rand(50)), :align => %w[left right center][rand(3)], :width => i, :padding => rand(5))
311
- end
312
- end
313
- end
314
- end
315
- end
316
- end
317
- ```
97
+ * Add the ability for a column to span across others
98
+ * Add the progress method to the top level mixin so that there is no need to invoke through the
99
+ formatter.
318
100
 
319
- This randomly produces a table with a border that has 3 rows and 3 columns. Each column gets wider
320
- by 10 characters. The alignment of the column is demonstrated and you can see where some data
321
- elements have padding around them.
101
+ ### License
322
102
 
323
- ```bash
324
- +------------+----------------------+--------------------------------+
325
- | xxxxxxxxxx | xxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxxxxxxxxxxx |
326
- | xxxxxx | xxxxxxxxx | xxxxxx |
327
- +------------+----------------------+--------------------------------+
328
- | xxxxxxxxxx | xxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxxxxxxxxxxx |
329
- | xxxxxxxxxx | xxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxx |
330
- | xxxxxxxxxx | xxxxxxxxxxxxxx | |
331
- | xxxxxxx | xxxx | |
332
- +------------+----------------------+--------------------------------+
333
- | xxxxxxxxxx | xxxx | xxxxxxxxxxxxxxxxxxx |
334
- | xxxxxx | | |
335
- +------------+----------------------+--------------------------------+
336
- ```
337
-
338
- This is all generated randomly to illustrate the features but you get the idea of how to use
339
- alignment, width and padding.
103
+ Copyright (c) 2011-2012 Wes Bailey
340
104
 
341
- The best feature is *wrapping*. If the text you are display in a cell is larger than the width it
342
- was given, it will automatically wrap it for you. Padding and alignment are preserved. It palso
343
- properly handles the case where the data in one cell causes the wrapping but other cells my not have
344
- the same number of lines to wrap.
105
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
106
+ associated documentation files (the "Software"), to deal in the Software without restriction,
107
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
108
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
109
+ furnished to do so, subject to the following conditions:
345
110
 
346
- ### To Do
111
+ The above copyright notice and this permission notice shall be included in all copies or substantial
112
+ portions of the Software.
347
113
 
348
- * Add the ability for a column to span across others
349
- * Add the progress method to the top level mixin so that there is no need to invoke through the
350
- formatter.
114
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
115
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
116
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
117
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
118
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/examples/quiet.rb ADDED
@@ -0,0 +1,40 @@
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
+ formatter.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 CHANGED
@@ -1,21 +1,21 @@
1
1
  require 'command_line_reporter'
2
2
 
3
+ include CommandLineReporter
4
+
3
5
  class Example
4
- include CommandLineReporter
6
+ def initialize
7
+ self.formatter = 'progress'
8
+ end
5
9
 
6
10
  def run
7
- x,y,z = 0,0,0
8
-
9
- header(:title => 'Simple Report Example', :align => 'center', :timestamp => true, :rule => true)
10
-
11
- report(:message => 'calculating sums') do
12
- x = 2 + 2
13
- y = 10 - x
14
- z = x + y
11
+ report do
12
+ sum = 0
13
+ 10.times do
14
+ sum += 10
15
+ self.formatter.progress
16
+ end
17
+ aligned("Sum: #{sum}")
15
18
  end
16
-
17
- footer(:title => 'Values', :width => 15)
18
- %w(x y z).each {|v| aligned("#{v}: #{eval v}")}
19
19
  end
20
20
  end
21
21
 
data/examples/table.rb CHANGED
@@ -24,7 +24,7 @@ class Example
24
24
  vertical_spacing(2)
25
25
  end
26
26
 
27
- header(:title => 'A simple example of how column properties are inhereted from the first row')
27
+ header(:title => 'A simple example of how column properties are inherited from the first row')
28
28
 
29
29
  table(:border => true) do
30
30
  row do
data/lib/column.rb CHANGED
@@ -19,8 +19,6 @@ class Column
19
19
  raise ArgumentError unless self.padding.to_s.match(/^\d+$/)
20
20
 
21
21
  self.size = self.width - 2 * self.padding
22
-
23
- # self.freeze
24
22
  end
25
23
 
26
24
  def screen_rows
@@ -1,3 +1,4 @@
1
+ require 'stringio'
1
2
  require 'table'
2
3
 
3
4
  Dir[File.join(File.dirname(__FILE__), '*_formatter.rb')].each {|r| require r}
@@ -12,6 +13,14 @@ module CommandLineReporter
12
13
  :align => 'left',
13
14
  }
14
15
 
16
+ def suppress_output
17
+ $stdout = StringIO.new
18
+ end
19
+
20
+ def restore_output
21
+ $stdout = STDOUT
22
+ end
23
+
15
24
  def formatter=(type = 'nested')
16
25
  name = type.capitalize + 'Formatter'
17
26
  klass = %W{CommandLineReporter #{name}}.inject(Kernel) {|s,c| s.const_get(c)}
@@ -85,7 +94,7 @@ module CommandLineReporter
85
94
  def table(options = {})
86
95
  @table = Table.new(options)
87
96
  yield
88
- @table.to_s
97
+ @table.output
89
98
  end
90
99
 
91
100
  def row(options = {})
data/lib/row.rb CHANGED
@@ -17,7 +17,7 @@ class Row
17
17
  @sep ||= '+' + self.columns.map {|c| '-' * (c.width + 2)}.join('+') + '+'
18
18
  end
19
19
 
20
- def to_s
20
+ def output
21
21
  screen_count.times do |sr|
22
22
  line = (self.border) ? '| ' : ''
23
23
  self.columns.size.times do |mc|
data/lib/table.rb CHANGED
@@ -32,12 +32,12 @@ class Table
32
32
  self.rows << row
33
33
  end
34
34
 
35
- def to_s
35
+ def output
36
36
  return if self.rows.size == 0 # we got here with nothing to print to the screen
37
37
 
38
38
  puts self.rows[0].separator if self.border
39
39
  self.rows.each do |row|
40
- row.to_s
40
+ row.output
41
41
  puts self.rows[0].separator if self.border
42
42
  end
43
43
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CommandLineReporter
2
- VERSION = '2.0'
2
+ VERSION = '2.1'
3
3
  end
data/spec/column_spec.rb CHANGED
@@ -46,22 +46,6 @@ describe Column do
46
46
  Column.new('test', :padding => 'asdf')
47
47
  }.to raise_error ArgumentError
48
48
  end
49
-
50
- # it 'is immutable' do
51
- # c = Column.new('test')
52
-
53
- # expect {
54
- # c.text = 'asdf'
55
- # }.to raise_error RuntimeError, /frozen object/
56
-
57
- # expect {
58
- # c.width = 123
59
- # }.to raise_error RuntimeError, /frozen object/
60
-
61
- # expect {
62
- # c.padding = 123
63
- # }.to raise_error RuntimeError, /frozen object/
64
- # end
65
49
  end
66
50
 
67
51
  describe '#screen_rows' do
data/spec/row_spec.rb CHANGED
@@ -18,7 +18,7 @@ describe Row do
18
18
  end
19
19
  end
20
20
 
21
- describe '#to_s' do
21
+ describe '#output' do
22
22
  before :each do
23
23
  @cols = [
24
24
  Column.new('asdf'),
@@ -41,46 +41,46 @@ describe Row do
41
41
 
42
42
  context 'no border' do
43
43
  context 'no wrap' do
44
- it 'prints a single column' do
44
+ it 'outputs a single column' do
45
45
  subject.add(@cols[0])
46
46
  subject.should_receive(:puts).with(/^asdf#{@six_pieces}/)
47
- subject.to_s
47
+ subject.output
48
48
  end
49
- it 'prints three columns' do
49
+ it 'outputs three columns' do
50
50
  subject.add(@cols[0])
51
51
  subject.add(@cols[1])
52
52
  subject.add(@cols[2])
53
53
  subject.should_receive(:puts).with(/^asdf#{@six_spaces}#{@one_space}#{@three_spaces}qwer#{@three_spaces}#{@one_space}#{@six_spaces}zxcv $/)
54
- subject.to_s
54
+ subject.output
55
55
  end
56
56
  end
57
57
 
58
58
  context 'with wrapping' do
59
- it 'prints a single column' do
59
+ it 'outputs a single column' do
60
60
  subject.add(@cols[3])
61
61
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}$/)
62
62
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}$/)
63
63
  subject.should_receive(:puts).with(/^#{@five_xs}#{@six_spaces}$/)
64
- subject.to_s
64
+ subject.output
65
65
  end
66
66
 
67
- it 'prints multiple columns of the same size' do
67
+ it 'outputs multiple columns of the same size' do
68
68
  subject.add(@cols[3])
69
69
  subject.add(@cols[4])
70
70
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}#{@ten_xs}#{@one_space}$/)
71
71
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}#{@ten_xs}#{@one_space}$/)
72
72
  subject.should_receive(:puts).with(/^#{@five_xs}#{@nine_spaces}#{@five_xs}#{@three_spaces}$/)
73
- subject.to_s
73
+ subject.output
74
74
  end
75
75
 
76
- it 'prints multiple columns with different size' do
76
+ it 'outputs multiple columns with different sizes' do
77
77
  subject.add(@cols[5])
78
78
  subject.add(@cols[3])
79
79
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}#{@ten_xs}#{@one_space}$/)
80
80
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}#{@ten_xs}#{@one_space}$/)
81
81
  subject.should_receive(:puts).with(/^#{@ten_xs}#{@one_space}#{@five_xs}#{@six_spaces}$/)
82
82
  subject.should_receive(:puts).with(/^#{@five_xs} {5,17}$/)
83
- subject.to_s
83
+ subject.output
84
84
  end
85
85
  end
86
86
  end
data/spec/table_spec.rb CHANGED
@@ -38,7 +38,7 @@ describe Table do
38
38
  row.add(cols[1])
39
39
  t.add(row)
40
40
  output = capture_stdout {
41
- t.to_s
41
+ t.output
42
42
  }
43
43
  end
44
44
  end
metadata CHANGED
@@ -1,37 +1,41 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: command_line_reporter
3
- version: !ruby/object:Gem::Version
4
- version: '2.0'
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: "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
- date: 2012-01-11 00:00:00.000000000Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
13
+
14
+ date: 2012-01-29 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
16
17
  name: bundler
17
- requirement: &2152892720 !ruby/object:Gem::Requirement
18
+ requirement: &id001 !ruby/object:Gem::Requirement
18
19
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
22
23
  version: 1.0.0
23
24
  type: :development
24
25
  prerelease: false
25
- version_requirements: *2152892720
26
- description: This gem makes it easy to provide a report while your ruby script is
27
- executing
26
+ version_requirements: *id001
27
+ description: This gem makes it easy to provide a report while your ruby script is executing
28
28
  email: baywes@gmail.com
29
29
  executables: []
30
+
30
31
  extensions: []
32
+
31
33
  extra_rdoc_files: []
32
- files:
34
+
35
+ files:
33
36
  - examples/nested.rb
34
37
  - examples/progress.rb
38
+ - examples/quiet.rb
35
39
  - examples/simple.rb
36
40
  - examples/table.rb
37
41
  - lib/column.rb
@@ -55,32 +59,35 @@ files:
55
59
  - spec/table_spec.rb
56
60
  homepage: http://github.com/wbailey/command_line_reporter
57
61
  licenses: []
62
+
58
63
  post_install_message:
59
64
  rdoc_options: []
60
- require_paths:
65
+
66
+ require_paths:
61
67
  - lib
62
- required_ruby_version: !ruby/object:Gem::Requirement
68
+ required_ruby_version: !ruby/object:Gem::Requirement
63
69
  none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- segments:
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: -154884230452992637
74
+ segments:
69
75
  - 0
70
- hash: 3958532185567160349
71
- required_rubygems_version: !ruby/object:Gem::Requirement
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
78
  none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
77
83
  requirements: []
84
+
78
85
  rubyforge_project:
79
- rubygems_version: 1.8.10
86
+ rubygems_version: 1.8.15
80
87
  signing_key:
81
88
  specification_version: 3
82
89
  summary: A tool for providing interactive command line applications
83
- test_files:
90
+ test_files:
84
91
  - spec/column_spec.rb
85
92
  - spec/command_line_reporter_spec.rb
86
93
  - spec/nested_formatter_spec.rb