command_line_reporter 1.0.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 ADDED
@@ -0,0 +1,196 @@
1
+ ## Command Line Reporter
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.
6
+
7
+ ### Installation
8
+
9
+ It is up on rubygems.org so add it to your bundle or do it the old fashioned way:
10
+
11
+ ```bash
12
+ gem install command_line_reporter
13
+ ```
14
+
15
+ ### Usage
16
+
17
+ The gem provides a mixin that can be included in your scripts.
18
+
19
+ ```ruby
20
+ include CommandLineReporter
21
+ ```
22
+
23
+ #### Standard Methods
24
+
25
+ There are several methods the mixin provides that do not depend on the formatter used:
26
+
27
+ 1. _report(hash) {block}_
28
+ * The first argument is a hash that defines the options for the method. See the details in the
29
+ formatter section for allowed values.
30
+ * The second argument is a block of ruby code that you want executed within the context of the
31
+ reporter. Any ruby code is allowed. See the examples that follow in the formatter sections for
32
+ details.
33
+ 1. _formatter=(string)_
34
+ * Simple string indicating the formatter you want your application to use. At present the 2
35
+ formatters are:
36
+
37
+ 2. Progress - indicated by the string '_progress_'
38
+ 2. Nested - indicated by the string '_nested_'
39
+
40
+ The default is _nested_.
41
+
42
+ ### Progress Formatter
43
+
44
+ #### Example
45
+
46
+ ```ruby
47
+ require 'command_line_reporter'
48
+
49
+ class Example
50
+ include CommandLineReporter
51
+
52
+ def initialize
53
+ formatter = 'progress'
54
+ end
55
+
56
+ def run
57
+ x = 0
58
+ report do
59
+ 10.times do
60
+ x += 1
61
+ formatter.progress
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ Example.new.run
68
+ ```
69
+
70
+ This simply produces 10 dots (.) in succession:
71
+
72
+ ```bash
73
+ [~/scratch]$ ruby example.rb
74
+ ..........
75
+ ```
76
+
77
+ #### Indicator
78
+
79
+ The indicator is the string that is displayed in the command line interface that indicates progress.
80
+ The default is the dot (.) but any string is allowed. In fact one can use the erase character to
81
+ get crafty with displaying percent complete in place.
82
+
83
+ #### Instance Methods
84
+
85
+ * _indicator(string)_ - This overrides the default value of the dot (.) being used for all calls to
86
+ the report method.
87
+
88
+ ```ruby
89
+ formatter.indicator('*')
90
+ ```
91
+
92
+ * _progress(string)_ - Call this method to invoke the output to the command line interface. The
93
+ string overrides the indicator for this call only.
94
+
95
+ ```ruby
96
+ formatter.progress
97
+ formatter.progress("^H^H^H10%")
98
+ ```
99
+
100
+ ### Nested Formatter
101
+
102
+ The nested formatter concept is inspired by the documentation formatter in RSpec. The idea is to be
103
+ able to create nested grouping levels of output that are very readable as the code is being
104
+ executed.
105
+
106
+ #### Example
107
+
108
+ ```ruby
109
+ require 'command_line_reporter'
110
+
111
+ class Example
112
+ include CommandLineReporter
113
+
114
+ def initialize
115
+ self.formatter = 'nested'
116
+ end
117
+
118
+ def run
119
+ x,y,z = 0,0,0
120
+
121
+ report(:message => 'calculating first expression') do
122
+ x = 2 + 2
123
+ 2.times do
124
+ report(:message => 'calculating second expression') do
125
+ y = 10 - x
126
+ 10.times do |i|
127
+ report(:message => 'pixelizing', :type => 'inline', :complete => "#{i*10+10}%") do
128
+ z = x + y
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ Example.new.run
138
+
139
+ ```
140
+
141
+ This produces the more complex output:
142
+
143
+ ```
144
+ [~/scratch]$ ruby example.rb
145
+ calculating first expression
146
+ calculating second expression
147
+ pixelizing...10%
148
+ pixelizing...20%
149
+ pixelizing...30%
150
+ pixelizing...40%
151
+ pixelizing...50%
152
+ pixelizing...60%
153
+ pixelizing...70%
154
+ pixelizing...80%
155
+ pixelizing...90%
156
+ pixelizing...100%
157
+ complete
158
+ calculating second expression
159
+ pixelizing...10%
160
+ pixelizing...20%
161
+ pixelizing...30%
162
+ pixelizing...40%
163
+ pixelizing...50%
164
+ pixelizing...60%
165
+ pixelizing...70%
166
+ pixelizing...80%
167
+ pixelizing...90%
168
+ pixelizing...100%
169
+ complete
170
+ complete
171
+ ```
172
+
173
+ #### Instance Methods
174
+
175
+ * _message_string(string)_ - This defines the string that is displayed as the first part of the
176
+ message to the user. The default value is "_working_".
177
+ * _complete_string(string)_ - This defines the string that completes the message to the user for the
178
+ report. The default value is "_complete_".
179
+ * _indent_size(int)_ - The number of spaces to indent for a single indentation level. The default
180
+ value is 2 spaces.
181
+
182
+ #### Report Options
183
+
184
+ The following are the allowed values of the options hash argument to the _report_ method:
185
+
186
+ * _message_ - The string that is displayed as the first part of the message to the user
187
+ * _complete_ - The string that completes the message to the user
188
+ * _type_ - Define as 'inline' if you want the message and complete strings on the same line
189
+ * _indent_size_ - The number of spaces to indent the current level
190
+
191
+ ### To Do
192
+
193
+ 1. Add the progress method to the top level mixin so that there is no need to invoke through the
194
+ formatter.
195
+ 2. Add a _preface_ and _epilogue_ methods so that beginning and ending aspects of the report may be
196
+ added without using _puts_ and _print_.
@@ -0,0 +1,38 @@
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
+ puts '-' * 20
34
+ %w(x y z).each {|v| puts "#{v}: #{eval v}"}
35
+ end
36
+ end
37
+
38
+ Example.new.run
@@ -0,0 +1,51 @@
1
+ require 'command_line_reporter'
2
+
3
+ class Example
4
+ include CommandLineReporter
5
+
6
+ def initialize
7
+ self.formatter = 'progress'
8
+ end
9
+
10
+ def run
11
+ x = 0
12
+
13
+ report do
14
+ 10.times do
15
+ x += 1
16
+ formatter.progress
17
+
18
+ 10.times do
19
+ x += 1
20
+ formatter.progress
21
+ end
22
+ end
23
+ end
24
+
25
+ y = 0
26
+
27
+ report do
28
+ 10.times do
29
+ y += 1
30
+ sleep 1
31
+ formatter.progress("#{y*10+10}%")
32
+ end
33
+ end
34
+
35
+ report do
36
+ 3.times do
37
+ formatter.progress("\\")
38
+ sleep 1
39
+ formatter.progress("/")
40
+ sleep 1
41
+ formatter.progress("-")
42
+ sleep 1
43
+ end
44
+ end
45
+
46
+ puts "x: #{x}"
47
+ puts "y: #{y}"
48
+ end
49
+ end
50
+
51
+ Example.new.run
@@ -0,0 +1,20 @@
1
+ Dir[File.join(File.dirname(__FILE__), '*_formatter.rb')].each {|r| require r}
2
+
3
+ module CommandLineReporter
4
+ attr_reader :formatter
5
+
6
+ def report(options = {}, &block)
7
+ self.formatter = 'nested' if self.formatter.nil?
8
+ self.formatter.format(options, block)
9
+ end
10
+
11
+ def formatter=(type = 'nested')
12
+ name = type.capitalize + 'Formatter'
13
+ klass = %W{CommandLineReporter #{name}}.inject(Kernel) {|s,c| s.const_get(c)}
14
+
15
+ # Each formatter is a singleton that responds to #instance
16
+ @formatter = klass.instance
17
+ rescue
18
+ raise ArgumentError, 'Invalid formatter specified'
19
+ end
20
+ end
@@ -0,0 +1,56 @@
1
+ require 'singleton'
2
+
3
+ module CommandLineReporter
4
+ class NestedFormatter
5
+ include Singleton
6
+
7
+ attr_accessor :indent_size, :complete_string, :message_string
8
+
9
+ def format(options, block)
10
+ raise ArgumentError unless (options.keys - [:message, :type, :complete, :indent_size]).empty?
11
+
12
+ indent_level :incr
13
+
14
+ padding = ' ' * @indent_level * (options[:indent_size] || self.indent_size)
15
+
16
+ message_str = padding + (options[:message] || self.message_string)
17
+ complete_str = options[:complete] || self.complete_string
18
+
19
+ if options[:type] == 'inline'
20
+ print "#{message_str}..."
21
+ else
22
+ puts message_str
23
+ complete_str = padding + complete_str
24
+ end
25
+
26
+ block.call
27
+
28
+ puts complete_str
29
+
30
+ indent_level :decr
31
+ end
32
+
33
+ def message_string
34
+ @message_string ||= 'working'
35
+ end
36
+
37
+ def complete_string
38
+ @complete_string ||= 'complete'
39
+ end
40
+
41
+ def indent_size
42
+ @indent_size ||= 2
43
+ end
44
+
45
+ private
46
+
47
+ def indent_level(value)
48
+ case value
49
+ when :incr
50
+ @indent_level = (@indent_level) ? @indent_level + 1 : 0
51
+ when :decr
52
+ @indent_level -= 1
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,23 @@
1
+ require 'singleton'
2
+
3
+ module CommandLineReporter
4
+ class ProgressFormatter
5
+ include Singleton
6
+
7
+ attr_accessor :indicator
8
+
9
+ def format(options, block)
10
+ self.indicator = options[:indicator] if options[:indicator]
11
+ block.call
12
+ puts
13
+ end
14
+
15
+ def progress(override = nil)
16
+ print override || self.indicator
17
+ end
18
+
19
+ def indicator
20
+ @indicator ||= '.'
21
+ end
22
+ end
23
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module CommandLineReporter
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'command_line_reporter'
3
+
4
+ describe CommandLineReporter do
5
+ let :use_class do
6
+ Class.new do
7
+ include CommandLineReporter
8
+ end
9
+ end
10
+
11
+ subject { use_class.new }
12
+
13
+ describe '#formatter=' do
14
+ it 'only allows allowed formatters' do
15
+ lambda {
16
+ subject.formatter = 'asfd'
17
+ }.should raise_exception ArgumentError
18
+ end
19
+
20
+ it 'specifies the progress formatter' do
21
+ subject.formatter = 'progress'
22
+ subject.formatter.class.should == CommandLineReporter::ProgressFormatter
23
+ end
24
+
25
+ it 'specifies the nested formatter' do
26
+ subject.formatter = 'nested'
27
+ subject.formatter.class.should == CommandLineReporter::NestedFormatter
28
+ end
29
+ end
30
+
31
+ describe '#report' do
32
+ it 'uses the nested formatter as default' do
33
+ subject.report { }
34
+ subject.formatter.class.should == CommandLineReporter::NestedFormatter
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,250 @@
1
+ require 'spec_helper'
2
+ require 'nested_formatter'
3
+
4
+ describe CommandLineReporter::NestedFormatter do
5
+ subject { CommandLineReporter::NestedFormatter.instance }
6
+
7
+ describe '#method default values' do
8
+ its(:message_string) { should == 'working' }
9
+ its(:complete_string) { should == 'complete' }
10
+ its(:indent_size) { should eq 2 }
11
+ end
12
+
13
+ describe '#format' do
14
+ context 'argument validation' do
15
+ before :all do
16
+ @indent_size = subject.indent_size
17
+ end
18
+
19
+ # Restore the singleton to its original state to ensure clean tests
20
+ after :each do
21
+ subject.indent_size = @indent_size
22
+ end
23
+
24
+ it 'raises exception when there is an invalid argument' do
25
+ lambda {
26
+ subject.format({:asdf => true}, lambda { })
27
+ }.should raise_exception ArgumentError
28
+ end
29
+
30
+ it 'raises an exception when a block is not given' do
31
+ lambda {
32
+ subject.format({:message => 'test'})
33
+ }.should raise_exception
34
+ end
35
+
36
+ it 'accepts valid arguments' do
37
+ subject.should_receive(:puts).with('test')
38
+ subject.should_receive(:puts).with('complete')
39
+
40
+ lambda {
41
+ subject.format({:message => 'test'}, lambda { }) do
42
+ end
43
+ }.should_not raise_exception
44
+ end
45
+ end
46
+
47
+ context 'not nested' do
48
+ before :all do
49
+ @complete_string = subject.complete_string
50
+ @indent_size = subject.indent_size
51
+ end
52
+
53
+ # Restore the singleton to its original state to ensure clean tests
54
+ after :each do
55
+ subject.complete_string = @complete_string
56
+ subject.indent_size = @indent_size
57
+ end
58
+
59
+ it 'performs a wrapped report' do
60
+ subject.should_receive(:puts).with('working')
61
+ subject.should_receive(:puts).with('complete')
62
+
63
+ subject.format({ }, lambda { })
64
+ end
65
+
66
+ it 'performs a wrapped report overriding the message' do
67
+ subject.should_receive(:puts).with('test')
68
+ subject.should_receive(:puts).with('complete')
69
+
70
+ subject.format({:message => 'test'}, lambda { })
71
+ end
72
+
73
+ it 'performs an inline report' do
74
+ subject.should_receive(:print).with('test...')
75
+ subject.should_receive(:puts).with('complete')
76
+ subject.should_receive(:print).with('test2...')
77
+ subject.should_receive(:puts).with('complete')
78
+
79
+ subject.format({:message => 'test', :type => 'inline'}, lambda { })
80
+ subject.format({:message => 'test2', :type => 'inline'}, lambda { })
81
+ end
82
+
83
+ it 'overrides the default for all invocations of a wrapped report' do
84
+ subject.complete_string = 'done'
85
+ subject.should_receive(:puts).with('test')
86
+ subject.should_receive(:puts).with('done')
87
+ subject.should_receive(:puts).with('test2')
88
+ subject.should_receive(:puts).with('done')
89
+
90
+ subject.format({:message => 'test'}, lambda { })
91
+ subject.format({:message => 'test2'}, lambda { })
92
+ end
93
+
94
+ it 'overrides the default complete string for a wrapped report' do
95
+ subject.should_receive(:puts).with('test')
96
+ subject.should_receive(:puts).with('done')
97
+ subject.should_receive(:puts).with('test2')
98
+ subject.should_receive(:puts).with('finally')
99
+
100
+ subject.format({:message => 'test', :complete => 'done'}, lambda { })
101
+ subject.format({:message => 'test2', :complete => 'finally'}, lambda { })
102
+ end
103
+
104
+ it 'overrides the default complete string for an inline report' do
105
+ subject.should_receive(:print).with('test...')
106
+ subject.should_receive(:puts).with('done')
107
+ subject.should_receive(:print).with('test2...')
108
+ subject.should_receive(:puts).with('finally')
109
+
110
+ subject.format({:message => 'test', :type => 'inline', :complete => 'done'}, lambda { })
111
+ subject.format({:message => 'test2', :type => 'inline', :complete => 'finally'}, lambda { })
112
+ end
113
+
114
+ it 'performs another wrapped report to ensure defaul behavior' do
115
+ subject.should_receive(:puts).with('test')
116
+ subject.should_receive(:puts).with('complete')
117
+ subject.should_receive(:puts).with('test2')
118
+ subject.should_receive(:puts).with('complete')
119
+
120
+ subject.format({:message => 'test'}, lambda { })
121
+ subject.format({:message => 'test2'}, lambda { })
122
+ end
123
+ end
124
+
125
+ context 'nested commands' do
126
+ before :all do
127
+ @indent_size = subject.indent_size
128
+ end
129
+
130
+ # Restore the singleton to its original state to ensure clean tests
131
+ after :each do
132
+ subject.indent_size = @indent_size
133
+ end
134
+
135
+ it 'indents the nested wrapped messages' do
136
+ subject.should_receive(:puts).with('test')
137
+ subject.should_receive(:puts).with(' test2')
138
+ subject.should_receive(:puts).with(' complete')
139
+ subject.should_receive(:puts).with('complete')
140
+
141
+ nested = lambda {
142
+ }
143
+
144
+ subject.format({:message => 'test'}, lambda {
145
+ subject.format({:message => 'test2'}, lambda {})
146
+ })
147
+ end
148
+
149
+ it 'indents the multiple nested wrapped messages' do
150
+ subject.should_receive(:puts).with('test')
151
+ subject.should_receive(:puts).with(' test2')
152
+ subject.should_receive(:puts).with(' test3')
153
+ subject.should_receive(:puts).with(' complete')
154
+ subject.should_receive(:puts).with(' complete')
155
+ subject.should_receive(:puts).with('complete')
156
+
157
+ subject.format({:message => 'test'}, lambda {
158
+ subject.format({:message => 'test2'}, lambda {
159
+ subject.format({:message => 'test3'}, lambda { })
160
+ })
161
+ })
162
+ end
163
+
164
+ it 'indents the nested wrapped and inline messages' do
165
+ subject.should_receive(:puts).with('test')
166
+ subject.should_receive(:print).with(' test2...')
167
+ subject.should_receive(:puts).with('complete')
168
+ subject.should_receive(:puts).with('complete')
169
+
170
+ subject.format({:message => 'test'}, lambda {
171
+ subject.format({:message => 'test2', :type => 'inline'}, lambda { })
172
+ })
173
+ end
174
+
175
+ it 'indents the multiple nested wrapped messages' do
176
+ subject.should_receive(:puts).with('test')
177
+ subject.should_receive(:puts).with(' test2')
178
+ subject.should_receive(:print).with(' test3...')
179
+ subject.should_receive(:puts).with('complete')
180
+ subject.should_receive(:puts).with(' complete')
181
+ subject.should_receive(:puts).with('complete')
182
+
183
+ subject.format({:message => 'test'}, lambda {
184
+ subject.format({:message => 'test2'}, lambda {
185
+ subject.format({:message => 'test3', :type => 'inline'}, lambda { })
186
+ })
187
+ })
188
+ end
189
+
190
+ it 'overrides the indent spacing of all messages' do
191
+ subject.should_receive(:puts).with('test')
192
+ subject.should_receive(:puts).with(' test2')
193
+ subject.should_receive(:print).with(' test3...')
194
+ subject.should_receive(:puts).with('complete')
195
+ subject.should_receive(:puts).with(' complete')
196
+ subject.should_receive(:puts).with('complete')
197
+
198
+ subject.indent_size = 4
199
+
200
+ subject.format({:message => 'test'}, lambda {
201
+ subject.format({:message => 'test2'}, lambda {
202
+ subject.format({:message => 'test3', :type => 'inline'}, lambda { })
203
+ })
204
+ })
205
+ end
206
+
207
+ it 'overrides the indent spacing of specific message' do
208
+ subject.should_receive(:puts).with('test')
209
+ subject.should_receive(:puts).with(' test2')
210
+ subject.should_receive(:print).with(' test3...')
211
+ subject.should_receive(:puts).with('complete')
212
+ subject.should_receive(:puts).with(' complete')
213
+ subject.should_receive(:puts).with('complete')
214
+
215
+ subject.indent_size = 4
216
+
217
+ subject.format({:message => 'test'}, lambda {
218
+ subject.format({:message => 'test2', :indent_size => 6}, lambda {
219
+ subject.format({:message => 'test3', :type => 'inline', :indent_size => 3}, lambda { })
220
+ })
221
+ })
222
+ end
223
+
224
+ it 'performs the sums specified in the block' do
225
+ x,y,z = 0,0,0
226
+
227
+ subject.should_receive(:puts).with('sum x and 10')
228
+ subject.should_receive(:puts).with(' y is the difference of 20 and x')
229
+ subject.should_receive(:puts).with(' z = x + y')
230
+ subject.should_receive(:puts).with(' complete')
231
+ subject.should_receive(:puts).with(' complete')
232
+ subject.should_receive(:puts).with('complete')
233
+
234
+ subject.format({:message => 'sum x and 10'}, lambda {
235
+ x = x + 10
236
+ subject.format({:message => 'y is the difference of 20 and x'}, lambda {
237
+ y = 20 - x
238
+ subject.format({:message => 'z = x + y'}, lambda {
239
+ z = x + y
240
+ })
241
+ })
242
+ })
243
+
244
+ x.should == 10
245
+ y.should == 10
246
+ z.should == 20
247
+ end
248
+ end
249
+ end
250
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+ require 'progress_formatter'
3
+
4
+ describe CommandLineReporter::ProgressFormatter do
5
+ subject { CommandLineReporter::ProgressFormatter.instance }
6
+
7
+ describe '#method default values' do
8
+ its(:indicator) { should == '.' }
9
+ end
10
+
11
+ describe '#format' do
12
+ it 'displays dots for the indicator' do
13
+ subject.should_receive(:print).exactly(10).times.with('.')
14
+ subject.should_receive(:puts).exactly(1).times
15
+
16
+ subject.format({}, lambda {
17
+ 10.times {subject.progress}
18
+ })
19
+ end
20
+
21
+ it 'uses the defined indicator' do
22
+ subject.indicator = '+'
23
+ subject.should_receive(:print).exactly(10).times.with('+')
24
+ subject.should_receive(:puts)
25
+
26
+ subject.format({}, lambda {
27
+ 10.times {subject.progress}
28
+ })
29
+
30
+ end
31
+
32
+ it 'allows override of the indicator' do
33
+ subject.should_receive(:print).exactly(10).times.with('=')
34
+ subject.should_receive(:puts)
35
+
36
+ subject.format({:indicator => '='}, lambda {
37
+ 10.times {subject.progress}
38
+ })
39
+ end
40
+ end
41
+
42
+ describe '#progress' do
43
+ it 'allows override of the indicator' do
44
+ subject.should_receive(:print).exactly(10).times.with('+')
45
+ subject.should_receive(:puts)
46
+
47
+ subject.format({}, lambda {
48
+ 10.times {subject.progress('+')}
49
+ })
50
+ end
51
+
52
+ it 'allows any indicator' do
53
+ subject.should_receive(:print).exactly(10).times
54
+ subject.should_receive(:puts)
55
+
56
+ subject.format({}, lambda {
57
+ 10.times {|i| subject.progress("#{i}")}
58
+ })
59
+ end
60
+ end
61
+ end
@@ -0,0 +1 @@
1
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: command_line_reporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Wes
9
+ - Bailey
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-11-28 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: &2151943860 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *2151943860
26
+ description: This gem makes it easy to provide a report while your ruby script is
27
+ executing
28
+ email: baywes@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - examples/nested.rb
34
+ - examples/progress.rb
35
+ - lib/command_line_reporter.rb
36
+ - lib/nested_formatter.rb
37
+ - lib/progress_formatter.rb
38
+ - lib/version.rb
39
+ - README.md
40
+ - spec/command_line_reporter_spec.rb
41
+ - spec/nested_formatter_spec.rb
42
+ - spec/progress_formatter_spec.rb
43
+ - spec/spec_helper.rb
44
+ homepage: http://github.com/wbailey/command_line_reporter
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ segments:
57
+ - 0
58
+ hash: 4291773844303302858
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 1.8.10
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: A tool for providing interactive command line applications
71
+ test_files:
72
+ - spec/command_line_reporter_spec.rb
73
+ - spec/nested_formatter_spec.rb
74
+ - spec/progress_formatter_spec.rb
75
+ - spec/spec_helper.rb