ruby-progressbar 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de140a57b8eb2dcda78dcafc0c85ccbfb56cdd1c
4
- data.tar.gz: 7e1533eea70a9646865439bf0b91008f7a12c7a8
3
+ metadata.gz: 83f5b88d860cde93acea2fb44eaa5586d877e76d
4
+ data.tar.gz: 8c9611657c7def30f8188d4aaaca150dd30e34b5
5
5
  SHA512:
6
- metadata.gz: 6f431ea55b755057c1bcad31154ac4713171626da77fd4f004071af505f56bb913601c886bc3d86a985705bdfd90bba5d6e9a26a7ef1fd802c6cbf128deb9191
7
- data.tar.gz: 722fc3894c31e2b8dcf84676e3c3dd9820eae76aa9e80e853428a4e989ba2aac780dcbf3ecd97cb29648ee6d24322234a63a5dcc695b8fc6dad0cd3f10a7962c
6
+ metadata.gz: d6b0ae26cfb96b3e9a2f5d3f691137a115ad44c1c88b30e578e1aecce96c7b2b268ddf957b16292aba43ae77d5b07ffb28df613e52a327e28d2388ed7e6b836d
7
+ data.tar.gz: 5e65be1a60e11c1e23b39f44532cbe39df09364316fd73122e15458949e3a6643732e2c9c3ed9976e1de4f7bbcf71268fe27b821bca34cb40e18d0e0866bdad8
data/README.md CHANGED
@@ -132,7 +132,23 @@ The bar can be stopped in four ways:
132
132
 
133
133
  * See `#finish` above.
134
134
 
135
- _Note: The bar will be finished automatically if the current value ever becomes equal to the total._
135
+ By default, the bar will be finished automatically if the current value ever
136
+ becomes equal to the total. If you do not want the bar to autofinish, pass
137
+ `:autofinish => false` when creating your bar.
138
+
139
+ ```ruby
140
+ progressbar = ProgressBar.create(:starting_at => 9, :total => 10)
141
+ progressbar.increment
142
+
143
+ progressbar.finished? # => true
144
+ ```
145
+
146
+ ```ruby
147
+ progressbar = ProgressBar.create(:starting_at => 9, :total => 10, :autofinish => false)
148
+ progressbar.increment
149
+
150
+ progressbar.finished? # => false
151
+ ```
136
152
 
137
153
  ### Refreshing
138
154
 
@@ -210,6 +226,8 @@ The flags you can use in the format string are as follows:
210
226
  * `%f`: Force estimated time to be displayed even if it exceeds `99:00:00`
211
227
  * `%p`: Percentage complete represented as a whole number (eg: `82`)
212
228
  * `%P`: Percentage complete represented as a decimal number (eg: `82.33`)
229
+ * `%j`: Percentage complete right-justified to 3 places (eg: ` 82`)
230
+ * `%J`: Percentage complete right-justified to 6 places (eg: ` 82.33`)
213
231
  * `%c`: Number of items currently completed
214
232
  * `%C`: Total number of items to be completed
215
233
  * `%B`: The full progress bar including 'incomplete' space (eg: `========== `)
@@ -103,7 +103,9 @@ class ProgressBar
103
103
  end
104
104
 
105
105
  def title=(title)
106
- with_update { super }
106
+ if output.tty?
107
+ with_update { super }
108
+ end
107
109
  end
108
110
 
109
111
  ###
@@ -12,17 +12,20 @@ class ProgressBar
12
12
  attr_accessor :starting_position
13
13
  attr_accessor :running_average
14
14
  attr_accessor :smoothing
15
+ attr_accessor :autofinish
16
+ attr_accessor :finished
15
17
 
16
18
  def initialize(options = {})
17
19
  self.total = options.fetch(:total, DEFAULT_TOTAL)
18
20
  self.smoothing = options[:smoothing] || DEFAULT_SMOOTHING
21
+ self.autofinish = options.fetch(:autofinish, true)
19
22
 
20
23
  start :at => DEFAULT_BEGINNING_POSITION
21
24
  end
22
25
 
23
26
  def start(options = {})
27
+ self.finished = false
24
28
  self.running_average = 0
25
-
26
29
  self.progress = \
27
30
  self.starting_position = options[:at] || self.progress
28
31
  end
@@ -32,7 +35,7 @@ class ProgressBar
32
35
  end
33
36
 
34
37
  def finished?
35
- self.progress == self.total
38
+ finished || (autofinish && progress == total)
36
39
  end
37
40
 
38
41
  def increment
@@ -65,7 +68,8 @@ class ProgressBar
65
68
  end
66
69
 
67
70
  def finish
68
- self.progress = self.total
71
+ self.finished = true
72
+ self.progress = total
69
73
  end
70
74
 
71
75
  def percentage_completed
@@ -81,6 +85,9 @@ class ProgressBar
81
85
  end
82
86
 
83
87
  def percentage_completed_with_precision
88
+ return 100.0 if total == 0
89
+ return 0.0 if total.nil?
90
+
84
91
  format('%5.2f', (progress.to_f * 100.0 / total * 100.0).floor / 100.0)
85
92
  end
86
93
 
@@ -8,6 +8,8 @@ class ProgressBar
8
8
  :C => :total,
9
9
  :p => :percentage,
10
10
  :P => :percentage_with_precision,
11
+ :j => :justified_percentage,
12
+ :J => :justified_percentage_with_precision,
11
13
  :a => :elapsed_time,
12
14
  :e => :estimated_time_with_unknown_oob,
13
15
  :E => :estimated_time_with_friendly_oob,
@@ -45,10 +45,18 @@ class ProgressBar
45
45
  @bar.percentage_completed
46
46
  end
47
47
 
48
+ def justified_percentage
49
+ @bar.percentage_completed.to_s.rjust(3)
50
+ end
51
+
48
52
  def percentage_with_precision
49
53
  @bar.percentage_completed_with_precision
50
54
  end
51
55
 
56
+ def justified_percentage_with_precision
57
+ @bar.percentage_completed_with_precision.to_s.rjust(6)
58
+ end
59
+
52
60
  def elapsed_time
53
61
  @elapsed_time
54
62
  end
@@ -1,3 +1,3 @@
1
1
  class ProgressBar
2
- VERSION = '1.5.1'
2
+ VERSION = '1.6.0'
3
3
  end
@@ -294,6 +294,31 @@ describe ProgressBar::Base do
294
294
  non_tty_output.rewind
295
295
  expect(non_tty_output.read).to eql "\n\nProgress: |====\n"
296
296
  end
297
+
298
+ it 'ignores changes to the title due to the fact that the bar length cannot change' do
299
+ progressbar = ProgressBar::Base.new(:output => non_tty_output, :length => 20, :starting_at => 0, :total => 6, :throttle_rate => 0.0)
300
+
301
+ 3.times { progressbar.increment }
302
+
303
+ progressbar.title = "Testing"
304
+ progressbar.stop
305
+
306
+ non_tty_output.rewind
307
+
308
+ expect(non_tty_output.read).to eql "\n\nProgress: |====\n"
309
+ end
310
+
311
+ it 'allows the title to be customized when the bar is created' do
312
+ progressbar = ProgressBar::Base.new(:output => non_tty_output, :title => 'Custom', :length => 20, :starting_at => 0, :total => 6, :throttle_rate => 0.0)
313
+
314
+ 3.times { progressbar.increment }
315
+
316
+ progressbar.stop
317
+
318
+ non_tty_output.rewind
319
+
320
+ expect(non_tty_output.read).to eql "\n\nCustom: |=====\n"
321
+ end
297
322
  end
298
323
  end
299
324
 
@@ -321,6 +346,50 @@ describe ProgressBar::Base do
321
346
  end
322
347
  end
323
348
 
349
+ context 'when a bar with autofinish=false is about to be completed' do
350
+ let(:progressbar) { ProgressBar::Base.new(:autofinish => false, :starting_at => 5, :total => 6, :output => output, :length => 20) }
351
+
352
+ context 'and it is incremented' do
353
+ before { progressbar.increment }
354
+
355
+ it 'does not automatically finish' do
356
+ expect(progressbar).not_to be_finished
357
+ end
358
+
359
+ it 'does not prints a new line' do
360
+ output.rewind
361
+
362
+ expect(output.read.end_with?("\n")).to eql false
363
+ end
364
+
365
+ it 'allows reset' do
366
+ progressbar.finish
367
+ expect(progressbar).to be_finished
368
+
369
+ progressbar.reset
370
+
371
+ expect(progressbar).not_to be_finished
372
+ end
373
+
374
+ it 'does prints a new line when manually finished' do
375
+ progressbar.finish
376
+ expect(progressbar).to be_finished
377
+
378
+ output.rewind
379
+
380
+ expect(output.read.end_with?("\n")).to eql true
381
+ end
382
+
383
+ it 'does not continue to print bars if finish is subsequently called' do
384
+ progressbar.finish
385
+
386
+ output.rewind
387
+
388
+ expect(output.read).to end_with " \rProgress: |====== |\rProgress: |========|\n"
389
+ end
390
+ end
391
+ end
392
+
324
393
  context 'when a bar has an unknown amount to completion' do
325
394
  let(:progressbar) { ProgressBar::Base.new(:total => nil, :output => output, :length => 80, :unknown_progress_animation_steps => ['=--', '-=-', '--=']) }
326
395
 
@@ -700,6 +769,20 @@ describe ProgressBar::Base do
700
769
  expect(progressbar.to_s('%w%i')).to match /^= 5 =\s{95}\z/
701
770
  end
702
771
 
772
+ it 'can display a percentage, even if the total is unknown' do
773
+ progressbar = ProgressBar::Base.new(:output => output, :length => 100, :total => nil, :starting_at => 0)
774
+
775
+ expect(progressbar.to_s('%p')).to match /\A0\z/
776
+ expect(progressbar.to_s('%P')).to match /\A0\.0\z/
777
+ end
778
+
779
+ it 'can display a percentage, even if the total is zero' do
780
+ progressbar = ProgressBar::Base.new(:output => output, :length => 100, :total => 0, :starting_at => 0)
781
+
782
+ expect(progressbar.to_s('%p')).to match /\A100\z/
783
+ expect(progressbar.to_s('%P')).to match /\A100\.0\z/
784
+ end
785
+
703
786
  it 'displays the current capacity when passed the "%c" format flag' do
704
787
  progressbar = ProgressBar::Base.new(:output => output, :starting_at => 0)
705
788
 
@@ -722,12 +805,24 @@ describe ProgressBar::Base do
722
805
  expect(progressbar.to_s('%p')).to match /^16\z/
723
806
  end
724
807
 
808
+ it 'displays the justified percentage complete when passed the "%j" format flag' do
809
+ progressbar = ProgressBar::Base.new(:starting_at => 33, :total => 200)
810
+
811
+ expect(progressbar.to_s('%j')).to match /^ 16\z/
812
+ end
813
+
725
814
  it 'displays the percentage complete when passed the "%P" format flag' do
726
815
  progressbar = ProgressBar::Base.new(:starting_at => 33, :total => 200)
727
816
 
728
817
  expect(progressbar.to_s('%P')).to match /^16.50\z/
729
818
  end
730
819
 
820
+ it 'displays the justified percentage complete when passed the "%J" format flag' do
821
+ progressbar = ProgressBar::Base.new(:starting_at => 33, :total => 200)
822
+
823
+ expect(progressbar.to_s('%J')).to match /^ 16.50\z/
824
+ end
825
+
731
826
  it 'displays only up to 2 decimal places when using the "%P" flag' do
732
827
  progressbar = ProgressBar::Base.new(:starting_at => 66, :total => 99)
733
828
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-progressbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekompanee
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-14 00:00:00.000000000 Z
12
+ date: 2014-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -162,3 +162,4 @@ test_files:
162
162
  - spec/lib/ruby-progressbar/running_average_calculator_spec.rb
163
163
  - spec/lib/ruby-progressbar/time_spec.rb
164
164
  - spec/support/time.rb
165
+ has_rdoc: