progress 0.3.0 → 0.4.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.1
data/lib/progress.rb CHANGED
@@ -1,6 +1,3 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
-
4
1
  require 'singleton'
5
2
 
6
3
  class Progress
@@ -179,15 +176,7 @@ class Progress
179
176
  end
180
177
  end
181
178
 
182
- require 'progress/with_progress'
183
-
184
179
  require 'progress/enumerable'
185
180
  require 'progress/integer'
186
-
187
- # like Pathname
188
- module Kernel
189
- def Progress(title = nil, total = nil, &block)
190
- Progress.start(title, total, &block)
191
- end
192
- private :Progress
193
- end
181
+ require 'progress/kernel'
182
+ require 'progress/active_record'
@@ -0,0 +1,27 @@
1
+ if defined?(ActiveRecord::Base)
2
+ module ActiveRecord
3
+ module BatchesWithProgress
4
+ def find_each_with_progress(options = {})
5
+ Progress.start(name.tableize, count(options)) do
6
+ find_each do |model|
7
+ yield model
8
+ Progress.step
9
+ end
10
+ end
11
+ end
12
+
13
+ def find_in_batches_with_progress(options = {})
14
+ Progress.start(name.tableize, count(options)) do
15
+ find_in_batches do |batch|
16
+ yield batch
17
+ Progress.step batch.length
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ class Base
24
+ extend BatchesWithProgress
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,6 @@
1
1
  require 'enumerator'
2
+ require 'progress/with_progress'
3
+
2
4
  module Enumerable
3
5
  # executes any Enumerable method with progress
4
6
  # note that methods which don't necessarily go through all items (like find or any?) will not show 100%
@@ -27,8 +29,7 @@ module Enumerable
27
29
  # [1, 2, 3].each_with_index_and_progress('Numbers') do |number, index|
28
30
  # sleep(number)
29
31
  # end
30
- def each_with_index_and_progress(title, &block)
32
+ def each_with_index_and_progress(title = nil, &block)
31
33
  with_progress(title).each_with_index(&block)
32
34
  end
33
-
34
35
  end
@@ -0,0 +1,6 @@
1
+ module Kernel
2
+ def Progress(title = nil, total = nil, &block)
3
+ Progress.start(title, total, &block)
4
+ end
5
+ private :Progress
6
+ end
data/progress.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{progress}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Boba Fat"]
@@ -20,8 +20,10 @@ Gem::Specification.new do |s|
20
20
  "Rakefile",
21
21
  "VERSION",
22
22
  "lib/progress.rb",
23
+ "lib/progress/active_record.rb",
23
24
  "lib/progress/enumerable.rb",
24
25
  "lib/progress/integer.rb",
26
+ "lib/progress/kernel.rb",
25
27
  "lib/progress/with_progress.rb",
26
28
  "progress.gemspec",
27
29
  "spec/progress_spec.rb",
@@ -22,26 +22,168 @@ describe Progress do
22
22
  io_pop.should =~ /100\.0.*\n$/
23
23
  end
24
24
 
25
- it "should show valid output for procedural version" do
26
- Progress.start('Test', 1000)
27
- 1000.times do |i|
28
- verify_output_before_step(i)
29
- Progress.step
25
+ describe 'direct usage' do
26
+ describe 'procedural' do
27
+ it "should show valid output when called as Progress.start" do
28
+ Progress.start('Test', 1000)
29
+ 1000.times do |i|
30
+ verify_output_before_step(i)
31
+ Progress.step
32
+ end
33
+ Progress.stop
34
+ verify_output_after_stop
35
+ end
36
+
37
+ it "should show valid output when called as Progress" do
38
+ Progress('Test', 1000)
39
+ 1000.times do |i|
40
+ verify_output_before_step(i)
41
+ Progress.step
42
+ end
43
+ Progress.stop
44
+ verify_output_after_stop
45
+ end
46
+
47
+ it "should show valid output when called without title" do
48
+ Progress(1000)
49
+ 1000.times do |i|
50
+ verify_output_before_step(i)
51
+ Progress.step
52
+ end
53
+ Progress.stop
54
+ verify_output_after_stop
55
+ end
56
+ end
57
+
58
+ describe 'block' do
59
+ it "should show valid output when called as Progress.start" do
60
+ Progress.start('Test', 1000) do
61
+ 1000.times do |i|
62
+ verify_output_before_step(i)
63
+ Progress.step
64
+ end
65
+ end
66
+ verify_output_after_stop
67
+ end
68
+
69
+ it "should show valid output when called as Progress" do
70
+ Progress('Test', 1000) do
71
+ 1000.times do |i|
72
+ verify_output_before_step(i)
73
+ Progress.step
74
+ end
75
+ end
76
+ verify_output_after_stop
77
+ end
78
+
79
+ it "should show valid output when called without title" do
80
+ Progress(1000) do
81
+ 1000.times do |i|
82
+ verify_output_before_step(i)
83
+ Progress.step
84
+ end
85
+ end
86
+ verify_output_after_stop
87
+ end
30
88
  end
31
- Progress.stop
32
- verify_output_after_stop
33
89
  end
34
90
 
35
- it "should show valid output for block version" do
36
- Progress.start('Test', 1000) do
37
- 1000.times do |i|
38
- verify_output_before_step(i)
39
- Progress.step
91
+ describe 'integrity' do
92
+ it "should not raise errors on extra Progress.stop" do
93
+ proc{
94
+ 10.times_with_progress('10') do
95
+ Progress.start 'simple' do
96
+ Progress.start 'procedural'
97
+ Progress.stop
98
+ Progress.stop
99
+ end
100
+ Progress.stop
101
+ end
102
+ Progress.stop
103
+ }.should_not raise_error
104
+ end
105
+
106
+ it "should return result from block" do
107
+ Progress.start('Test') do
108
+ 'qwerty'
109
+ end.should == 'qwerty'
110
+ end
111
+
112
+ it "should return result from nested block" do
113
+ [1, 2, 3].with_progress('a').map do |a|
114
+ [1, 2, 3].with_progress('b').map do |b|
115
+ a * b
116
+ end
117
+ end.should == [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
118
+ end
119
+
120
+ it "should kill progress on cycle break" do
121
+ 2.times do
122
+ catch(:lalala) do
123
+ 2.times_with_progress('A') do |a|
124
+ io_pop.should == "A: ......\n"
125
+ 2.times_with_progress('B') do |b|
126
+ io_pop.should == "A: ...... > B: ......\n"
127
+ throw(:lalala)
128
+ end
129
+ end
130
+ end
131
+ io_pop.should == "A: ......\n\n"
132
+ end
133
+ end
134
+
135
+ [[2, 2000], [20, 200], [200, 20], [2000, 2]].each do |_a, _b|
136
+ it "should allow enclosed progress [#{_a}, #{_b}]" do
137
+ _a.times_with_progress('A') do |a|
138
+ io_pop.should == "A: #{a == 0 ? '......' : '%5.1f%%'}\n" % [a / _a.to_f * 100.0]
139
+ _b.times_with_progress('B') do |b|
140
+ io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a + b / _b.to_f) / _a.to_f * 100.0, b / _b.to_f * 100.0]
141
+ end
142
+ io_pop.should == "A: %5.1f%% > B: 100.0%%\n" % [(a + 1) / _a.to_f * 100.0]
143
+ end
144
+ io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
145
+ end
146
+
147
+ it "should not overlap outer progress if inner exceeds [#{_a}, #{_b}]" do
148
+ _a.times_with_progress('A') do |a|
149
+ io_pop.should == "A: #{a == 0 ? '......' : '%5.1f%%'}\n" % [a / _a.to_f * 100.0]
150
+ Progress.start('B', _b) do
151
+ (_b * 2).times do |b|
152
+ io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a + [b / _b.to_f, 1].min) / _a.to_f * 100.0, b / _b.to_f * 100.0]
153
+ Progress.step
154
+ end
155
+ end
156
+ io_pop.should == "A: %5.1f%% > B: 200.0%%\n" % [(a + 1) / _a.to_f * 100.0]
157
+ end
158
+ io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
159
+ end
160
+
161
+ it "should allow step with block to validly count custom progresses [#{_a}, #{_b}]" do
162
+ a_step = 99
163
+ Progress.start('A', _a * 100) do
164
+ io_pop.should == "A: ......\n"
165
+ _a.times do |a|
166
+ Progress.step(a_step) do
167
+ _b.times_with_progress('B') do |b|
168
+ io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a * a_step + b / _b.to_f * a_step) / (_a * 100).to_f * 100.0, b / _b.to_f * 100.0]
169
+ end
170
+ io_pop.should == "A: %5.1f%% > B: 100.0%\n" % [(a + 1) * a_step.to_f / (100.0 * _a.to_f) * 100.0]
171
+ end
172
+ io_pop.should == "A: %5.1f%%\n" % [(a + 1) * a_step.to_f / (100.0 * _a.to_f) * 100.0]
173
+ end
174
+ Progress.step _a
175
+ end
176
+ io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
40
177
  end
41
178
  end
42
- verify_output_after_stop
43
179
  end
44
180
 
181
+
182
+
183
+
184
+
185
+
186
+
45
187
  describe Enumerable do
46
188
  before :each do
47
189
  @a = (0...1000).to_a
@@ -62,6 +204,13 @@ describe Progress do
62
204
  end
63
205
  verify_output_after_stop
64
206
  end
207
+
208
+ it "should show valid output for each_with_progress without title" do
209
+ @a.each_with_progress do |n|
210
+ verify_output_before_step(n)
211
+ end
212
+ verify_output_after_stop
213
+ end
65
214
  end
66
215
 
67
216
  describe 'with each_with_index_and_progress' do
@@ -80,6 +229,13 @@ describe Progress do
80
229
  end
81
230
  verify_output_after_stop
82
231
  end
232
+
233
+ it "should show valid output for each_with_progress without title" do
234
+ @a.each_with_index_and_progress do |n, i|
235
+ verify_output_before_step(n)
236
+ end
237
+ verify_output_after_stop
238
+ end
83
239
  end
84
240
 
85
241
  describe 'with with_progress' do
@@ -132,116 +288,13 @@ describe Progress do
132
288
  end
133
289
  verify_output_after_stop
134
290
  end
135
- end
136
- end
137
-
138
- it "should pipe result from block" do
139
- Progress.start('Test') do
140
- 'qwerty'
141
- end.should == 'qwerty'
142
- end
143
-
144
- it "should not raise errors on extra Progress.stop" do
145
- proc{
146
- 10.times_with_progress('10') do
147
- Progress.start 'simple' do
148
- Progress.start 'procedural'
149
- Progress.stop
150
- Progress.stop
151
- end
152
- Progress.stop
153
- end
154
- Progress.stop
155
- }.should_not raise_error
156
- end
157
-
158
- it "should pipe result from nested block" do
159
- [1, 2, 3].with_progress('a').map do |a|
160
- [1, 2, 3].with_progress('b').map do |b|
161
- a * b
162
- end
163
- end.should == [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
164
- end
165
291
 
166
- it "should kill progress on cycle break" do
167
- 2.times do
168
- catch(:lalala) do
169
- 2.times_with_progress('A') do |a|
170
- io_pop.should == "A: ......\n"
171
- 2.times_with_progress('B') do |b|
172
- io_pop.should == "A: ...... > B: ......\n"
173
- throw(:lalala)
174
- end
175
- end
176
- end
177
- io_pop.should == "A: ......\n\n"
178
- end
179
- end
180
-
181
- [[2, 2000], [20, 200], [200, 20], [2000, 2]].each do |_a, _b|
182
- it "should allow enclosed progress [#{_a}, #{_b}]" do
183
- _a.times_with_progress('A') do |a|
184
- io_pop.should == "A: #{a == 0 ? '......' : '%5.1f%%'}\n" % [a / _a.to_f * 100.0]
185
- _b.times_with_progress('B') do |b|
186
- io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a + b / _b.to_f) / _a.to_f * 100.0, b / _b.to_f * 100.0]
187
- end
188
- io_pop.should == "A: %5.1f%% > B: 100.0%%\n" % [(a + 1) / _a.to_f * 100.0]
189
- end
190
- io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
191
- end
192
-
193
- it "should not overlap outer progress if inner exceeds [#{_a}, #{_b}]" do
194
- _a.times_with_progress('A') do |a|
195
- io_pop.should == "A: #{a == 0 ? '......' : '%5.1f%%'}\n" % [a / _a.to_f * 100.0]
196
- Progress.start('B', _b) do
197
- (_b * 2).times do |b|
198
- io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a + [b / _b.to_f, 1].min) / _a.to_f * 100.0, b / _b.to_f * 100.0]
199
- Progress.step
200
- end
201
- end
202
- io_pop.should == "A: %5.1f%% > B: 200.0%%\n" % [(a + 1) / _a.to_f * 100.0]
203
- end
204
- io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
205
- end
206
-
207
- it "should allow step with block to validly count custom progresses [#{_a}, #{_b}]" do
208
- a_step = 99
209
- Progress.start('A', _a * 100) do
210
- io_pop.should == "A: ......\n"
211
- _a.times do |a|
212
- Progress.step(a_step) do
213
- _b.times_with_progress('B') do |b|
214
- io_pop.should == "A: #{a == 0 && b == 0 ? '......' : '%5.1f%%'} > B: #{b == 0 ? '......' : '%5.1f%%'}\n" % [(a * a_step + b / _b.to_f * a_step) / (_a * 100).to_f * 100.0, b / _b.to_f * 100.0]
215
- end
216
- io_pop.should == "A: %5.1f%% > B: 100.0%\n" % [(a + 1) * a_step.to_f / (100.0 * _a.to_f) * 100.0]
217
- end
218
- io_pop.should == "A: %5.1f%%\n" % [(a + 1) * a_step.to_f / (100.0 * _a.to_f) * 100.0]
219
- end
220
- Progress.step _a
221
- end
222
- io_pop.should == "A: 100.0%\nA: 100.0%\n\n"
223
- end
224
- end
225
-
226
- describe "using Progress instead of Progress.start" do
227
- it "should show valid output for procedural version" do
228
- Progress('Test', 1000)
229
- 1000.times do |i|
230
- verify_output_before_step(i)
231
- Progress.step
232
- end
233
- Progress.stop
234
- verify_output_after_stop
235
- end
236
-
237
- it "should show valid output for block version" do
238
- Progress('Test', 1000) do
239
- 1000.times do |i|
292
+ it "should show valid output for each_with_progress without title" do
293
+ 1000.times_with_progress do |i|
240
294
  verify_output_before_step(i)
241
- Progress.step
242
295
  end
296
+ verify_output_after_stop
243
297
  end
244
- verify_output_after_stop
245
298
  end
246
299
  end
247
300
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progress
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 0
10
- version: 0.3.0
8
+ - 4
9
+ - 1
10
+ version: 0.4.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Boba Fat
@@ -34,8 +34,10 @@ files:
34
34
  - Rakefile
35
35
  - VERSION
36
36
  - lib/progress.rb
37
+ - lib/progress/active_record.rb
37
38
  - lib/progress/enumerable.rb
38
39
  - lib/progress/integer.rb
40
+ - lib/progress/kernel.rb
39
41
  - lib/progress/with_progress.rb
40
42
  - progress.gemspec
41
43
  - spec/progress_spec.rb