progress 3.3.2 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +33 -12
- data/.travis.yml +15 -12
- data/CHANGELOG.markdown +273 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.markdown +107 -81
- data/lib/progress.rb +2 -0
- data/lib/progress/active_record.rb +2 -0
- data/lib/progress/beeper.rb +2 -0
- data/lib/progress/class_methods.rb +25 -9
- data/lib/progress/elapsed_time.rb +26 -0
- data/lib/progress/enumerable.rb +2 -0
- data/lib/progress/eta.rb +10 -3
- data/lib/progress/integer.rb +2 -0
- data/lib/progress/kernel.rb +4 -1
- data/lib/progress/with_progress.rb +7 -13
- data/progress.gemspec +12 -5
- data/spec/progress/elapsed_time_spec.rb +13 -0
- data/spec/progress_spec.rb +82 -33
- metadata +21 -14
data/lib/progress.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'singleton'
|
4
5
|
require 'thread'
|
@@ -51,6 +52,7 @@ class Progress
|
|
51
52
|
attr_reader :current
|
52
53
|
attr_reader :title
|
53
54
|
attr_accessor :note
|
55
|
+
|
54
56
|
def initialize(total, title)
|
55
57
|
if !total.is_a?(Numeric) && (title.nil? || title.is_a?(Numeric))
|
56
58
|
total, title = title, total
|
data/lib/progress/beeper.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'progress/elapsed_time'
|
2
5
|
|
3
6
|
class Progress
|
4
7
|
# Class methods of Progress
|
@@ -10,8 +13,9 @@ class Progress
|
|
10
13
|
# start progress indication
|
11
14
|
def start(total = nil, title = nil)
|
12
15
|
init(total, title)
|
13
|
-
print_message :
|
16
|
+
print_message force: true
|
14
17
|
return unless block_given?
|
18
|
+
|
15
19
|
begin
|
16
20
|
yield
|
17
21
|
ensure
|
@@ -44,8 +48,9 @@ class Progress
|
|
44
48
|
# stop progress
|
45
49
|
def stop
|
46
50
|
return unless running?
|
51
|
+
|
47
52
|
if @levels.length == 1
|
48
|
-
print_message :
|
53
|
+
print_message force: true, finish: true
|
49
54
|
stop_beeper
|
50
55
|
end
|
51
56
|
@levels.pop
|
@@ -59,6 +64,7 @@ class Progress
|
|
59
64
|
# set note
|
60
65
|
def note=(note)
|
61
66
|
return unless running?
|
67
|
+
|
62
68
|
@levels.last.note = note
|
63
69
|
end
|
64
70
|
|
@@ -82,7 +88,7 @@ class Progress
|
|
82
88
|
@highlight = true && value
|
83
89
|
end
|
84
90
|
|
85
|
-
# show
|
91
|
+
# show progress in terminal title
|
86
92
|
def terminal_title?
|
87
93
|
@terminal_title.nil? ? io_tty? : @terminal_title
|
88
94
|
end
|
@@ -102,6 +108,15 @@ class Progress
|
|
102
108
|
io.tty? || ENV['PROGRESS_TTY']
|
103
109
|
end
|
104
110
|
|
111
|
+
# don't refresh progress (eta) periodically for the duration of the block
|
112
|
+
def without_beeper
|
113
|
+
old_state = @without_beeper
|
114
|
+
@without_beeper = true
|
115
|
+
yield
|
116
|
+
ensure
|
117
|
+
@without_beeper = old_state
|
118
|
+
end
|
119
|
+
|
105
120
|
private
|
106
121
|
|
107
122
|
attr_reader :eta
|
@@ -139,7 +154,7 @@ class Progress
|
|
139
154
|
|
140
155
|
def start_beeper
|
141
156
|
@beeper = Beeper.new(10) do
|
142
|
-
print_message
|
157
|
+
print_message unless @without_beeper
|
143
158
|
end
|
144
159
|
end
|
145
160
|
|
@@ -152,14 +167,14 @@ class Progress
|
|
152
167
|
end
|
153
168
|
|
154
169
|
def time_to_print?
|
155
|
-
!@next_time_to_print || @next_time_to_print <=
|
170
|
+
!@next_time_to_print || @next_time_to_print <= ElapsedTime.now
|
156
171
|
end
|
157
172
|
|
158
173
|
def print_message(options = {})
|
159
174
|
force = options[:force]
|
160
175
|
lock force do
|
161
176
|
if force || time_to_print?
|
162
|
-
@next_time_to_print =
|
177
|
+
@next_time_to_print = ElapsedTime.now + 0.3
|
163
178
|
restart_beeper
|
164
179
|
io << message_for_output(options)
|
165
180
|
end
|
@@ -169,7 +184,7 @@ class Progress
|
|
169
184
|
def message_for_output(options)
|
170
185
|
message = build_message(options)
|
171
186
|
|
172
|
-
out = ''
|
187
|
+
out = ''.dup
|
173
188
|
out << "\r" if stay_on_line?
|
174
189
|
out << message
|
175
190
|
out << "\e[K" if stay_on_line?
|
@@ -188,7 +203,7 @@ class Progress
|
|
188
203
|
|
189
204
|
def build_message(options)
|
190
205
|
current = 0
|
191
|
-
|
206
|
+
reverse_parts = @levels.reverse.map do |level|
|
192
207
|
current = level.to_f(current)
|
193
208
|
|
194
209
|
part = current.zero? ? '......' : format('%5.1f%%', current * 100.0)
|
@@ -198,7 +213,8 @@ class Progress
|
|
198
213
|
end
|
199
214
|
|
200
215
|
level.title ? "#{level.title}: #{part}" : part
|
201
|
-
end
|
216
|
+
end
|
217
|
+
message = reverse_parts.reverse * ' > '
|
202
218
|
|
203
219
|
if options[:finish]
|
204
220
|
message << " (elapsed: #{eta.elapsed})"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Progress
|
4
|
+
# Use Process.clock_gettime if available to get time more fitting to calculate elapsed time
|
5
|
+
module ElapsedTime
|
6
|
+
CLOCK_NAME = %w[
|
7
|
+
CLOCK_UPTIME_RAW
|
8
|
+
CLOCK_UPTIME
|
9
|
+
CLOCK_MONOTONIC_RAW
|
10
|
+
CLOCK_MONOTONIC
|
11
|
+
CLOCK_REALTIME
|
12
|
+
].find{ |name| Process.const_defined?(name) }
|
13
|
+
|
14
|
+
CLOCK_ID = CLOCK_NAME && Process.const_get(CLOCK_NAME)
|
15
|
+
|
16
|
+
module_function
|
17
|
+
|
18
|
+
def now
|
19
|
+
if CLOCK_ID
|
20
|
+
Process.clock_gettime(CLOCK_ID)
|
21
|
+
else
|
22
|
+
Time.now.to_f
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/progress/enumerable.rb
CHANGED
data/lib/progress/eta.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'progress/elapsed_time'
|
4
|
+
|
1
5
|
class Progress
|
2
6
|
# Estimate time of arrival
|
3
7
|
class Eta
|
4
8
|
def initialize
|
5
|
-
@started_at =
|
9
|
+
@started_at = ElapsedTime.now
|
6
10
|
end
|
7
11
|
|
8
12
|
def left(completed)
|
9
13
|
seconds = seconds_left(completed)
|
10
14
|
return unless seconds && seconds > 0
|
15
|
+
|
11
16
|
seconds_to_string(seconds)
|
12
17
|
end
|
13
18
|
|
14
19
|
def elapsed
|
15
|
-
seconds_to_string(
|
20
|
+
seconds_to_string(ElapsedTime.now - @started_at)
|
16
21
|
end
|
17
22
|
|
18
23
|
private
|
19
24
|
|
20
25
|
def seconds_to_string(seconds)
|
21
26
|
return unless seconds
|
27
|
+
|
22
28
|
case seconds
|
23
29
|
when 0...60
|
24
30
|
format '%.0fs', seconds
|
@@ -32,8 +38,9 @@ class Progress
|
|
32
38
|
end
|
33
39
|
|
34
40
|
def seconds_left(completed)
|
35
|
-
now =
|
41
|
+
now = ElapsedTime.now
|
36
42
|
return unless completed > 0 && now - @started_at >= 1
|
43
|
+
|
37
44
|
current_eta = @started_at + (now - @started_at) / completed
|
38
45
|
@left = if @left
|
39
46
|
@left + (current_eta - @left) * (1 + completed) * 0.5
|
data/lib/progress/integer.rb
CHANGED
data/lib/progress/kernel.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'progress'
|
2
4
|
require 'stringio'
|
3
5
|
|
@@ -64,8 +66,6 @@ class Progress
|
|
64
66
|
run_for_string(method, *args, &block)
|
65
67
|
when io?
|
66
68
|
run_for_io(method, *args, &block)
|
67
|
-
when defined?(CSV::Reader) && @enum.is_a?(CSV::Reader)
|
68
|
-
run_for_ruby18_csv(method, *args, &block)
|
69
69
|
else
|
70
70
|
run_with_length(@enum, enum_length(@enum), method, *args, &block)
|
71
71
|
end
|
@@ -88,13 +88,6 @@ class Progress
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
def run_for_ruby18_csv(method, *args, &block)
|
92
|
-
warn "Progress: #{@enum.class} doesn't expose IO, collecting elements"
|
93
|
-
with_substitute(@enum.to_a) do |lines|
|
94
|
-
run_with_length(lines, lines.length, method, *args, &block)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
91
|
def run_without_block(enum, method, *args)
|
99
92
|
Progress.start(@title) do
|
100
93
|
Progress.step do
|
@@ -103,22 +96,22 @@ class Progress
|
|
103
96
|
end
|
104
97
|
end
|
105
98
|
|
106
|
-
def run_with_length(enum, length, method, *args
|
99
|
+
def run_with_length(enum, length, method, *args)
|
107
100
|
Progress.start(@title, length) do
|
108
101
|
enum.send(method, *args) do |*block_args|
|
109
102
|
Progress.step do
|
110
|
-
|
103
|
+
yield(*block_args)
|
111
104
|
end
|
112
105
|
end
|
113
106
|
end
|
114
107
|
end
|
115
108
|
|
116
|
-
def run_with_pos(io, method, *args
|
109
|
+
def run_with_pos(io, method, *args)
|
117
110
|
size = io.respond_to?(:size) ? io.size : io.stat.size
|
118
111
|
Progress.start(@title, size) do
|
119
112
|
io.send(method, *args) do |*block_args|
|
120
113
|
Progress.set(io.pos) do
|
121
|
-
|
114
|
+
yield(*block_args)
|
122
115
|
end
|
123
116
|
end
|
124
117
|
end
|
@@ -140,6 +133,7 @@ class Progress
|
|
140
133
|
false
|
141
134
|
rescue Errno::EPIPE
|
142
135
|
raise unless defined?(JRUBY_VERSION)
|
136
|
+
|
143
137
|
false
|
144
138
|
end
|
145
139
|
|
data/progress.gemspec
CHANGED
@@ -2,13 +2,20 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'progress'
|
5
|
-
s.version = '3.
|
5
|
+
s.version = '3.6.0'
|
6
6
|
s.summary = %q{Show progress of long running tasks}
|
7
|
-
s.homepage = "
|
7
|
+
s.homepage = "https://github.com/toy/#{s.name}"
|
8
8
|
s.authors = ['Ivan Kuchin']
|
9
9
|
s.license = 'MIT'
|
10
10
|
|
11
|
-
s.
|
11
|
+
s.required_ruby_version = '>= 1.9.3'
|
12
|
+
|
13
|
+
s.metadata = {
|
14
|
+
'bug_tracker_uri' => "https://github.com/toy/#{s.name}/issues",
|
15
|
+
'changelog_uri' => "https://github.com/toy/#{s.name}/blob/master/CHANGELOG.markdown",
|
16
|
+
'documentation_uri' => "https://www.rubydoc.info/gems/#{s.name}/#{s.version}",
|
17
|
+
'source_code_uri' => "https://github.com/toy/#{s.name}",
|
18
|
+
}
|
12
19
|
|
13
20
|
s.files = `git ls-files`.split("\n")
|
14
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -16,7 +23,7 @@ Gem::Specification.new do |s|
|
|
16
23
|
s.require_paths = %w[lib]
|
17
24
|
|
18
25
|
s.add_development_dependency 'rspec', '~> 3.0'
|
19
|
-
if RUBY_VERSION >= '2.
|
20
|
-
s.add_development_dependency 'rubocop', '~> 0
|
26
|
+
if RUBY_VERSION >= '2.4'
|
27
|
+
s.add_development_dependency 'rubocop', '~> 1.0'
|
21
28
|
end
|
22
29
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'progress/elapsed_time'
|
4
|
+
|
5
|
+
describe Progress::ElapsedTime do
|
6
|
+
let(:timeout){ 0.01 }
|
7
|
+
|
8
|
+
describe '.now' do
|
9
|
+
it 'returns incrementing value' do
|
10
|
+
expect{ sleep timeout }.to change{ described_class.now }.by_at_least(timeout)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/progress_spec.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rspec'
|
2
4
|
require 'progress'
|
3
5
|
require 'tempfile'
|
4
6
|
require 'shellwords'
|
5
7
|
require 'csv'
|
8
|
+
require 'set'
|
6
9
|
|
7
10
|
describe Progress do
|
8
11
|
before do
|
@@ -13,7 +16,7 @@ describe Progress do
|
|
13
16
|
allow(Progress).to receive(:start_beeper)
|
14
17
|
allow(Progress).to receive(:time_to_print?).and_return(true)
|
15
18
|
|
16
|
-
eta = instance_double(Progress::Eta, :
|
19
|
+
eta = instance_double(Progress::Eta, left: nil, elapsed: '0s')
|
17
20
|
allow(Progress).to receive(:eta).and_return(eta)
|
18
21
|
end
|
19
22
|
|
@@ -84,7 +87,7 @@ describe Progress do
|
|
84
87
|
|
85
88
|
describe 'with_progress' do
|
86
89
|
it 'returns with block same as when called with each' do
|
87
|
-
expect(enum.with_progress
|
90
|
+
expect(enum.with_progress(&:to_s)).to eq(enum.with_progress.each(&:to_s))
|
88
91
|
end
|
89
92
|
|
90
93
|
it 'does not break each' do
|
@@ -178,7 +181,7 @@ describe Progress do
|
|
178
181
|
describe enum.class do
|
179
182
|
it 'calls each only once' do
|
180
183
|
expect(enum).to receive(:each).once.and_call_original
|
181
|
-
expect(enum.with_progress.each
|
184
|
+
expect(enum.with_progress.each(&:to_s)).to eq(enum)
|
182
185
|
end
|
183
186
|
|
184
187
|
include_examples 'yielding', enum
|
@@ -187,13 +190,13 @@ describe Progress do
|
|
187
190
|
|
188
191
|
[
|
189
192
|
100.times,
|
190
|
-
'a'..'z',
|
193
|
+
('a'..'z').dup,
|
191
194
|
].each do |enum|
|
192
195
|
describe enum.class do
|
193
196
|
it 'calls each twice' do
|
194
|
-
enum_each = enum.each
|
197
|
+
enum_each = enum.each(&:to_s)
|
195
198
|
expect(enum).to receive(:each).at_most(:twice).and_call_original
|
196
|
-
expect(enum.with_progress.each
|
199
|
+
expect(enum.with_progress.each(&:to_s)).to eq(enum_each)
|
197
200
|
end
|
198
201
|
|
199
202
|
include_examples 'yielding', enum
|
@@ -202,7 +205,7 @@ describe Progress do
|
|
202
205
|
|
203
206
|
describe String do
|
204
207
|
it 'calls each only once on StringIO' do
|
205
|
-
enum = "a\nb\nc"
|
208
|
+
enum = "a\nb\nc".dup
|
206
209
|
expect(enum).not_to receive(:each)
|
207
210
|
io = StringIO.new(enum)
|
208
211
|
expect(StringIO).to receive(:new).with(enum).and_return(io)
|
@@ -210,7 +213,7 @@ describe Progress do
|
|
210
213
|
|
211
214
|
with_progress = Progress::WithProgress.new(enum)
|
212
215
|
expect(with_progress).not_to receive(:warn)
|
213
|
-
expect(with_progress.each
|
216
|
+
expect(with_progress.each(&:to_s)).to eq(enum)
|
214
217
|
end
|
215
218
|
|
216
219
|
it 'yields same lines' do
|
@@ -231,18 +234,18 @@ describe Progress do
|
|
231
234
|
|
232
235
|
with_progress = enum.with_progress
|
233
236
|
expect(with_progress).not_to receive(:warn)
|
234
|
-
expect(with_progress.each
|
237
|
+
expect(with_progress.each(&:to_s)).to eq(enum)
|
235
238
|
end
|
236
239
|
end
|
237
240
|
|
238
241
|
it 'calls each only once for Tempfile' do
|
239
242
|
enum = Tempfile.open('progress')
|
240
|
-
enum_each = enum.each
|
243
|
+
enum_each = enum.each(&:to_s) # returns underlying File
|
241
244
|
expect(enum_each).to receive(:each).once.and_call_original
|
242
245
|
|
243
246
|
with_progress = enum.with_progress
|
244
247
|
expect(with_progress).not_to receive(:warn)
|
245
|
-
expect(with_progress.each
|
248
|
+
expect(with_progress.each(&:to_s)).to eq(enum_each)
|
246
249
|
end
|
247
250
|
|
248
251
|
it 'calls each only once for IO and shows warning' do
|
@@ -251,7 +254,7 @@ describe Progress do
|
|
251
254
|
|
252
255
|
with_progress = enum.with_progress
|
253
256
|
expect(with_progress).to receive(:warn)
|
254
|
-
expect(with_progress.each
|
257
|
+
expect(with_progress.each(&:to_s)).to eq(enum)
|
255
258
|
end
|
256
259
|
|
257
260
|
[
|
@@ -277,7 +280,8 @@ describe Progress do
|
|
277
280
|
|
278
281
|
with_progress = enum.with_progress
|
279
282
|
expect(with_progress).not_to receive(:warn)
|
280
|
-
expect(with_progress.each
|
283
|
+
expect(with_progress.each(&:to_s)).
|
284
|
+
to eq(CSV.open('spec/test.csv').each(&:to_s))
|
281
285
|
end
|
282
286
|
else
|
283
287
|
it 'calls each only once for CSV and shows warning' do
|
@@ -286,7 +290,7 @@ describe Progress do
|
|
286
290
|
|
287
291
|
with_progress = enum.with_progress
|
288
292
|
expect(with_progress).to receive(:warn)
|
289
|
-
expect(with_progress.each
|
293
|
+
expect(with_progress.each(&:to_s)).to eq(enum)
|
290
294
|
end
|
291
295
|
end
|
292
296
|
|
@@ -331,41 +335,41 @@ describe Progress do
|
|
331
335
|
Progress.step 2, 'simle'
|
332
336
|
|
333
337
|
Progress.step 2, 'times' do
|
334
|
-
3.times.with_progress
|
338
|
+
3.times.with_progress(&:to_s)
|
335
339
|
end
|
336
340
|
|
337
341
|
Progress.step 'enum' do
|
338
|
-
3.times.to_a.with_progress
|
342
|
+
3.times.to_a.with_progress(&:to_s)
|
339
343
|
end
|
340
344
|
end
|
341
345
|
end
|
342
346
|
|
343
|
-
def title(
|
344
|
-
"\e]0;#{
|
347
|
+
def title(str)
|
348
|
+
"\e]0;#{str}\a"
|
345
349
|
end
|
346
350
|
|
347
|
-
def hl(
|
348
|
-
"\e[1m#{
|
351
|
+
def hl(str)
|
352
|
+
"\e[1m#{str}\e[0m"
|
349
353
|
end
|
350
354
|
|
351
|
-
def unhl(
|
352
|
-
|
355
|
+
def unhl(str)
|
356
|
+
str.gsub(/\e\[\dm/, '')
|
353
357
|
end
|
354
358
|
|
355
|
-
def on_line(
|
356
|
-
"\r
|
359
|
+
def on_line(str)
|
360
|
+
"\r#{str}\e[K"
|
357
361
|
end
|
358
362
|
|
359
|
-
def line(
|
360
|
-
|
363
|
+
def line(str)
|
364
|
+
"#{str}\n"
|
361
365
|
end
|
362
366
|
|
363
|
-
def on_line_n_title(
|
364
|
-
[on_line(
|
367
|
+
def on_line_n_title(str)
|
368
|
+
[on_line(str), title(unhl(str))]
|
365
369
|
end
|
366
370
|
|
367
|
-
def line_n_title(
|
368
|
-
[line(
|
371
|
+
def line_n_title(str)
|
372
|
+
[line(str), title(unhl(str))]
|
369
373
|
end
|
370
374
|
|
371
375
|
it 'produces valid output when staying on line' do
|
@@ -387,7 +391,7 @@ describe Progress do
|
|
387
391
|
on_line_n_title("Test: #{hl ' 93.3%'} > #{hl ' 66.7%'}"),
|
388
392
|
on_line_n_title('Test: 100.0% > 100.0%'),
|
389
393
|
on_line_n_title('Test: 100.0% - enum'),
|
390
|
-
on_line('Test: 100.0% (elapsed: 0s) - enum')
|
394
|
+
"#{on_line('Test: 100.0% (elapsed: 0s) - enum')}\n",
|
391
395
|
title(''),
|
392
396
|
].flatten.join)
|
393
397
|
end
|
@@ -423,7 +427,7 @@ describe Progress do
|
|
423
427
|
let(:reference_output) do
|
424
428
|
stub_progress_io(reference_io = StringIO.new)
|
425
429
|
count_a.times.with_progress('Test') do
|
426
|
-
count_b.times.with_progress
|
430
|
+
count_b.times.with_progress(&:to_s)
|
427
431
|
end
|
428
432
|
reference_io.string
|
429
433
|
end
|
@@ -465,7 +469,7 @@ describe Progress do
|
|
465
469
|
|
466
470
|
it 'outputs same when called using with_progress on list' do
|
467
471
|
count_a.times.to_a.with_progress('Test') do
|
468
|
-
count_b.times.to_a.with_progress
|
472
|
+
count_b.times.to_a.with_progress(&:to_s)
|
469
473
|
end
|
470
474
|
expect(io.string).to eq(reference_output)
|
471
475
|
end
|
@@ -522,5 +526,50 @@ describe Progress do
|
|
522
526
|
it{ is_expected.to be_truthy }
|
523
527
|
end
|
524
528
|
end
|
529
|
+
|
530
|
+
describe '.without_beeper' do
|
531
|
+
before do
|
532
|
+
allow(Progress).to receive(:start_beeper).and_call_original
|
533
|
+
allow(Progress::Beeper).to receive(:new) do |*, &block|
|
534
|
+
@block = block
|
535
|
+
double(restart: nil, stop: nil)
|
536
|
+
end
|
537
|
+
expect(Progress).to receive(:print_message).exactly(print_times).times
|
538
|
+
end
|
539
|
+
|
540
|
+
context 'when not used' do
|
541
|
+
let(:print_times){ 3 }
|
542
|
+
|
543
|
+
it 'allows beeper to print progress' do
|
544
|
+
Progress.start do
|
545
|
+
@block.call
|
546
|
+
end
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
context 'when used around progress block' do
|
551
|
+
let(:print_times){ 2 }
|
552
|
+
|
553
|
+
it 'stops beeper from printing progress' do
|
554
|
+
Progress.without_beeper do
|
555
|
+
Progress.start do
|
556
|
+
@block.call
|
557
|
+
end
|
558
|
+
end
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
context 'when used inside progress block' do
|
563
|
+
let(:print_times){ 2 }
|
564
|
+
|
565
|
+
it 'stops beeper from printing progress' do
|
566
|
+
Progress.start do
|
567
|
+
Progress.without_beeper do
|
568
|
+
@block.call
|
569
|
+
end
|
570
|
+
end
|
571
|
+
end
|
572
|
+
end
|
573
|
+
end
|
525
574
|
end
|
526
575
|
end
|