ruby-progressbar 1.4.2 → 1.5.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.
- checksums.yaml +7 -0
- data/README.md +52 -24
- data/lib/ruby-progressbar/base.rb +3 -0
- data/lib/ruby-progressbar/components.rb +1 -0
- data/lib/ruby-progressbar/components/progressable.rb +5 -5
- data/lib/ruby-progressbar/components/rate.rb +69 -0
- data/lib/ruby-progressbar/format/molecule.rb +18 -17
- data/lib/ruby-progressbar/formatter.rb +8 -0
- data/lib/ruby-progressbar/version.rb +1 -1
- data/spec/lib/ruby-progressbar/base_spec.rb +231 -86
- data/spec/lib/ruby-progressbar/components/bar_spec.rb +27 -27
- data/spec/lib/ruby-progressbar/components/elapsed_timer_spec.rb +10 -10
- data/spec/lib/ruby-progressbar/components/estimated_timer_spec.rb +21 -19
- data/spec/lib/ruby-progressbar/components/progressable_spec.rb +15 -6
- data/spec/lib/ruby-progressbar/components/throttle_spec.rb +10 -11
- data/spec/lib/ruby-progressbar/format/molecule_spec.rb +4 -4
- data/spec/lib/ruby-progressbar/running_average_calculator_spec.rb +4 -4
- data/spec/lib/ruby-progressbar/time_spec.rb +4 -6
- metadata +59 -44
- data/spec/spec_helper.rb +0 -6
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspectacular'
|
2
2
|
|
3
3
|
describe ProgressBar::Components::Bar do
|
4
4
|
context 'when a new bar is created' do
|
@@ -7,26 +7,26 @@ describe ProgressBar::Components::Bar do
|
|
7
7
|
|
8
8
|
describe '#total' do
|
9
9
|
it 'returns the default total' do
|
10
|
-
@progressbar.total.
|
10
|
+
expect(@progressbar.total).to eql ProgressBar::Components::Bar::DEFAULT_TOTAL
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#progress_mark' do
|
15
15
|
it 'returns the default mark' do
|
16
|
-
@progressbar.progress_mark.
|
16
|
+
expect(@progressbar.progress_mark).to eql ProgressBar::Components::Bar::DEFAULT_PROGRESS_MARK
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
describe '#remainder_mark' do
|
21
21
|
it 'returns the default remainder mark' do
|
22
|
-
@progressbar.remainder_mark.
|
22
|
+
expect(@progressbar.remainder_mark).to eql ProgressBar::Components::Bar::DEFAULT_REMAINDER_MARK
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
context 'and the bar has not been started' do
|
27
27
|
describe '#progress' do
|
28
28
|
it 'returns the default beginning position' do
|
29
|
-
@progressbar.progress.
|
29
|
+
expect(@progressbar.progress).to be_zero
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -36,7 +36,7 @@ describe ProgressBar::Components::Bar do
|
|
36
36
|
|
37
37
|
describe '#progress' do
|
38
38
|
it 'returns the default starting value' do
|
39
|
-
@progressbar.progress.
|
39
|
+
expect(@progressbar.progress).to eql ProgressBar::Components::Progressable::DEFAULT_BEGINNING_POSITION
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -46,7 +46,7 @@ describe ProgressBar::Components::Bar do
|
|
46
46
|
|
47
47
|
describe '#progress' do
|
48
48
|
it 'returns the given starting value' do
|
49
|
-
@progressbar.progress.
|
49
|
+
expect(@progressbar.progress).to eql 10
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -57,19 +57,19 @@ describe ProgressBar::Components::Bar do
|
|
57
57
|
|
58
58
|
describe '#total' do
|
59
59
|
it 'returns the overridden total' do
|
60
|
-
@progressbar.total.
|
60
|
+
expect(@progressbar.total).to eql 12
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
describe '#progress_mark' do
|
65
65
|
it 'returns the overridden mark' do
|
66
|
-
@progressbar.progress_mark.
|
66
|
+
expect(@progressbar.progress_mark).to eql 'x'
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
70
|
describe '#remainder_mark' do
|
71
71
|
it 'returns the overridden mark' do
|
72
|
-
@progressbar.remainder_mark.
|
72
|
+
expect(@progressbar.remainder_mark).to eql '.'
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -84,13 +84,13 @@ describe ProgressBar::Components::Bar do
|
|
84
84
|
|
85
85
|
describe '#percentage_completed' do
|
86
86
|
it 'calculates the amount' do
|
87
|
-
@progressbar.percentage_completed.
|
87
|
+
expect(@progressbar.percentage_completed).to eql 0
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
91
|
describe '#to_s' do
|
92
92
|
it 'displays the bar with no indication of progress' do
|
93
|
-
@progressbar.to_s.
|
93
|
+
expect(@progressbar.to_s).to eql ' '
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
@@ -106,31 +106,31 @@ describe ProgressBar::Components::Bar do
|
|
106
106
|
before { @progressbar.increment }
|
107
107
|
|
108
108
|
it 'adds to the progress amount' do
|
109
|
-
@progressbar.progress.
|
109
|
+
expect(@progressbar.progress).to eql 1
|
110
110
|
end
|
111
111
|
|
112
112
|
describe '#percentage_completed' do
|
113
113
|
it 'calculates the amount completed' do
|
114
|
-
@progressbar.percentage_completed.
|
114
|
+
expect(@progressbar.percentage_completed).to eql 2
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
118
|
describe '#to_s' do
|
119
119
|
it 'displays the bar with an indication of progress' do
|
120
|
-
@progressbar.to_s.
|
120
|
+
expect(@progressbar.to_s).to eql '== '
|
121
121
|
end
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
125
|
describe '#percentage_completed' do
|
126
126
|
it 'is zero' do
|
127
|
-
@progressbar.percentage_completed.
|
127
|
+
expect(@progressbar.percentage_completed).to eql 0
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
131
|
describe '#to_s' do
|
132
132
|
it 'displays the bar with no indication of progress' do
|
133
|
-
@progressbar.to_s.
|
133
|
+
expect(@progressbar.to_s).to eql ' '
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
@@ -144,13 +144,13 @@ describe ProgressBar::Components::Bar do
|
|
144
144
|
|
145
145
|
describe '#percentage_completed' do
|
146
146
|
it 'always rounds down' do
|
147
|
-
@progressbar.percentage_completed.
|
147
|
+
expect(@progressbar.percentage_completed).to eql 0
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
151
|
describe '#to_s' do
|
152
152
|
it 'displays the bar with no indication of progress' do
|
153
|
-
@progressbar.to_s.
|
153
|
+
expect(@progressbar.to_s).to eql ' '
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
@@ -166,13 +166,13 @@ describe ProgressBar::Components::Bar do
|
|
166
166
|
before { @progressbar.increment }
|
167
167
|
|
168
168
|
it 'does not increment past the total' do
|
169
|
-
@progressbar.progress.
|
170
|
-
@progressbar.percentage_completed.
|
169
|
+
expect(@progressbar.progress).to eql 50
|
170
|
+
expect(@progressbar.percentage_completed).to eql 100
|
171
171
|
end
|
172
172
|
|
173
173
|
describe '#to_s' do
|
174
174
|
it 'displays the bar as 100% complete' do
|
175
|
-
@progressbar.to_s.
|
175
|
+
expect(@progressbar.to_s).to eql '=' * 100
|
176
176
|
end
|
177
177
|
end
|
178
178
|
end
|
@@ -181,20 +181,20 @@ describe ProgressBar::Components::Bar do
|
|
181
181
|
before { @progressbar.decrement }
|
182
182
|
|
183
183
|
it 'removes some progress from the bar' do
|
184
|
-
@progressbar.progress.
|
185
|
-
@progressbar.percentage_completed.
|
184
|
+
expect(@progressbar.progress).to eql 49
|
185
|
+
expect(@progressbar.percentage_completed).to eql 98
|
186
186
|
end
|
187
187
|
|
188
188
|
describe '#to_s' do
|
189
189
|
it 'displays the bar as 98% complete' do
|
190
|
-
@progressbar.to_s.
|
190
|
+
expect(@progressbar.to_s).to eql "#{'=' * 98} "
|
191
191
|
end
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
195
|
describe '#to_s' do
|
196
196
|
it 'displays the bar as 100% complete' do
|
197
|
-
@progressbar.to_s.
|
197
|
+
expect(@progressbar.to_s).to eql ('=' * 100)
|
198
198
|
end
|
199
199
|
end
|
200
200
|
end
|
@@ -203,7 +203,7 @@ describe ProgressBar::Components::Bar do
|
|
203
203
|
describe '#new' do
|
204
204
|
it 'raises an error' do
|
205
205
|
@progressbar = ProgressBar::Components::Bar.new(:total => 10)
|
206
|
-
|
206
|
+
expect { @progressbar.start :at => 11 }.to raise_error(ProgressBar::InvalidProgressError, "You can't set the item's current value to be greater than the total.")
|
207
207
|
end
|
208
208
|
end
|
209
209
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspectacular'
|
2
2
|
|
3
3
|
describe ProgressBar::Components::ElapsedTimer do
|
4
4
|
before { @timer = ProgressBar::Components::ElapsedTimer.new }
|
@@ -6,14 +6,14 @@ describe ProgressBar::Components::ElapsedTimer do
|
|
6
6
|
describe '#to_s' do
|
7
7
|
context 'when the timer has not been started' do
|
8
8
|
it 'displays "Time: --:--:--"' do
|
9
|
-
@timer.to_s.
|
9
|
+
expect(@timer.to_s).to eql 'Time: --:--:--'
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'when it has just been started' do
|
14
14
|
it 'displays "Time: 00:00:00"' do
|
15
15
|
@timer.start
|
16
|
-
@timer.to_s.
|
16
|
+
expect(@timer.to_s).to eql 'Time: 00:00:00'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -35,12 +35,12 @@ describe ProgressBar::Components::ElapsedTimer do
|
|
35
35
|
before { @timer.reset }
|
36
36
|
|
37
37
|
it 'displays "Time: --:--:--"' do
|
38
|
-
@timer.to_s.
|
38
|
+
expect(@timer.to_s).to eql 'Time: --:--:--'
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'displays "Time: 04:27:41"' do
|
43
|
-
@timer.to_s.
|
43
|
+
expect(@timer.to_s).to eql 'Time: 04:27:41'
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -48,12 +48,12 @@ describe ProgressBar::Components::ElapsedTimer do
|
|
48
48
|
before { @timer.reset }
|
49
49
|
|
50
50
|
it 'displays "Time: --:--:--"' do
|
51
|
-
@timer.to_s.
|
51
|
+
expect(@timer.to_s).to eql 'Time: --:--:--'
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'displays "Time: 04:28:13"' do
|
56
|
-
@timer.to_s.
|
56
|
+
expect(@timer.to_s).to eql 'Time: 04:28:13'
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -69,7 +69,7 @@ describe ProgressBar::Components::ElapsedTimer do
|
|
69
69
|
before { @timer.start }
|
70
70
|
|
71
71
|
it 'is false' do
|
72
|
-
@timer.
|
72
|
+
expect(@timer).not_to be_stopped
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -77,14 +77,14 @@ describe ProgressBar::Components::ElapsedTimer do
|
|
77
77
|
|
78
78
|
context "when the timer has yet to be started" do
|
79
79
|
it 'is false' do
|
80
|
-
@timer.
|
80
|
+
expect(@timer).not_to be_stopped
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
84
|
context "when the timer is stopped without having been started" do
|
85
85
|
before { @timer.stop }
|
86
86
|
it 'is false' do
|
87
|
-
@timer.
|
87
|
+
expect(@timer).not_to be_stopped
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'support/time'
|
2
3
|
|
3
4
|
describe ProgressBar::Components::EstimatedTimer do
|
4
5
|
describe '#progress=' do
|
5
6
|
it 'raises an error when passed a number larger than the total' do
|
6
7
|
@estimated_time = ProgressBar::Components::EstimatedTimer.new(:total => 100)
|
7
|
-
|
8
|
+
expect { @estimated_time.progress = 101 }.to raise_error(ProgressBar::InvalidProgressError, "You can't set the item's current value to be greater than the total.")
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
@@ -16,13 +17,13 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
16
17
|
end
|
17
18
|
|
18
19
|
it 'displays an unknown time remaining' do
|
19
|
-
@estimated_time.to_s.
|
20
|
+
expect(@estimated_time.to_s).to eql ' ETA: ??:??:??'
|
20
21
|
end
|
21
22
|
|
22
23
|
context 'and it is incremented' do
|
23
24
|
it 'should not display unknown time remaining' do
|
24
25
|
@estimated_time.increment
|
25
|
-
@estimated_time.to_s.
|
26
|
+
expect(@estimated_time.to_s).not_to eql ' ETA: ??:??:??'
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -45,7 +46,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
45
46
|
before { 20.times { @estimated_time.decrement } }
|
46
47
|
|
47
48
|
it 'displays the correct time remaining' do
|
48
|
-
@estimated_time.to_s.
|
49
|
+
expect(@estimated_time.to_s).to eql ' ETA: 08:38:28'
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
@@ -53,12 +54,12 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
53
54
|
before { @estimated_time.reset }
|
54
55
|
|
55
56
|
it 'displays unknown time remaining' do
|
56
|
-
@estimated_time.to_s.
|
57
|
+
expect(@estimated_time.to_s).to eql ' ETA: ??:??:??'
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
60
61
|
it 'displays the correct time remaining' do
|
61
|
-
@estimated_time.to_s.
|
62
|
+
expect(@estimated_time.to_s).to eql ' ETA: 03:42:12'
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -76,7 +77,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
76
77
|
before { @estimated_time.out_of_bounds_time_format = :friendly }
|
77
78
|
|
78
79
|
it 'displays "> 4 Days" remaining' do
|
79
|
-
@estimated_time.to_s.
|
80
|
+
expect(@estimated_time.to_s).to eql ' ETA: > 4 Days'
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
@@ -84,12 +85,12 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
84
85
|
before { @estimated_time.out_of_bounds_time_format = :unknown }
|
85
86
|
|
86
87
|
it 'displays "??:??:??" remaining' do
|
87
|
-
@estimated_time.to_s.
|
88
|
+
expect(@estimated_time.to_s).to eql ' ETA: ??:??:??'
|
88
89
|
end
|
89
90
|
end
|
90
91
|
|
91
92
|
it 'displays the correct time remaining' do
|
92
|
-
@estimated_time.to_s.
|
93
|
+
expect(@estimated_time.to_s).to eql ' ETA: 100:00:00'
|
93
94
|
end
|
94
95
|
end
|
95
96
|
end
|
@@ -111,7 +112,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
111
112
|
before { 20.times { @estimated_time.decrement } }
|
112
113
|
|
113
114
|
it 'displays the correct time remaining' do
|
114
|
-
@estimated_time.to_s.
|
115
|
+
expect(@estimated_time.to_s).to eql ' ETA: 08:14:34'
|
115
116
|
end
|
116
117
|
end
|
117
118
|
|
@@ -119,12 +120,12 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
119
120
|
before { @estimated_time.reset }
|
120
121
|
|
121
122
|
it 'displays unknown time remaining' do
|
122
|
-
@estimated_time.to_s.
|
123
|
+
expect(@estimated_time.to_s).to eql ' ETA: ??:??:??'
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
126
127
|
it 'displays the correct time remaining' do
|
127
|
-
@estimated_time.to_s.
|
128
|
+
expect(@estimated_time.to_s).to eql ' ETA: 03:51:16'
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
@@ -142,7 +143,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
142
143
|
before { @estimated_time.out_of_bounds_time_format = :friendly }
|
143
144
|
|
144
145
|
it 'displays "> 4 Days" remaining' do
|
145
|
-
@estimated_time.to_s.
|
146
|
+
expect(@estimated_time.to_s).to eql ' ETA: > 4 Days'
|
146
147
|
end
|
147
148
|
end
|
148
149
|
|
@@ -150,12 +151,12 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
150
151
|
before { @estimated_time.out_of_bounds_time_format = :unknown }
|
151
152
|
|
152
153
|
it 'displays "??:??:??" remaining' do
|
153
|
-
@estimated_time.to_s.
|
154
|
+
expect(@estimated_time.to_s).to eql ' ETA: ??:??:??'
|
154
155
|
end
|
155
156
|
end
|
156
157
|
|
157
158
|
it 'displays the correct time remaining' do
|
158
|
-
@estimated_time.to_s.
|
159
|
+
expect(@estimated_time.to_s).to eql ' ETA: 105:33:20'
|
159
160
|
end
|
160
161
|
end
|
161
162
|
end
|
@@ -172,7 +173,8 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
172
173
|
estimated_time.increment
|
173
174
|
estimated_time.to_s
|
174
175
|
end
|
175
|
-
|
176
|
+
|
177
|
+
expect(results).to eql([
|
176
178
|
' ETA: 00:00:05',
|
177
179
|
' ETA: 00:00:04',
|
178
180
|
' ETA: 00:00:04',
|
@@ -183,7 +185,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
183
185
|
' ETA: 00:00:01',
|
184
186
|
' ETA: 00:00:01',
|
185
187
|
' ETA: 00:00:00',
|
186
|
-
]
|
188
|
+
])
|
187
189
|
ensure
|
188
190
|
Timecop.return
|
189
191
|
end
|
@@ -194,7 +196,7 @@ describe ProgressBar::Components::EstimatedTimer do
|
|
194
196
|
context 'when set to an invalid format' do
|
195
197
|
it 'raises an exception' do
|
196
198
|
@estimated_time = ProgressBar::Components::EstimatedTimer.new(:total => 100)
|
197
|
-
|
199
|
+
expect { @estimated_time.out_of_bounds_time_format = :foo }.to raise_error('Invalid Out Of Bounds time format. Valid formats are [:unknown, :friendly, nil]')
|
198
200
|
end
|
199
201
|
end
|
200
202
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspectacular'
|
2
2
|
|
3
3
|
class ProgressableClass
|
4
4
|
include ProgressBar::Components::Progressable
|
@@ -8,23 +8,32 @@ describe ProgressBar::Components::Progressable do
|
|
8
8
|
subject { ProgressableClass.new }
|
9
9
|
|
10
10
|
describe '#running_average' do
|
11
|
+
it 'is properly calculated when progress has been made' do
|
12
|
+
subject.running_average = 10
|
13
|
+
subject.start :at => 0
|
14
|
+
expect(subject.running_average).to be_zero
|
15
|
+
|
16
|
+
subject.progress += 40
|
17
|
+
expect(subject.running_average).to eql 36.0
|
18
|
+
end
|
19
|
+
|
11
20
|
it 'is always reset when the progressable is started' do
|
12
21
|
subject.running_average = 10
|
13
22
|
subject.start :at => 0
|
14
|
-
subject.running_average.
|
23
|
+
expect(subject.running_average).to be_zero
|
15
24
|
|
16
25
|
subject.start :at => 40
|
17
|
-
subject.running_average.
|
26
|
+
expect(subject.running_average).to eql 0.0
|
18
27
|
end
|
19
28
|
end
|
20
29
|
|
21
30
|
describe '#smoothing' do
|
22
31
|
it 'can be passed in as an option to the initializer' do
|
23
|
-
ProgressableClass.new(:smoothing => 0.3).smoothing.
|
32
|
+
expect(ProgressableClass.new(:smoothing => 0.3).smoothing).to eql 0.3
|
24
33
|
end
|
25
34
|
|
26
35
|
it 'does not have to be passed in as an option to the initializer' do
|
27
|
-
ProgressableClass.new.smoothing.
|
36
|
+
expect(ProgressableClass.new.smoothing).to eql 0.1
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
@@ -32,7 +41,7 @@ describe ProgressBar::Components::Progressable do
|
|
32
41
|
it 'returns the default total if total is zero' do
|
33
42
|
subject.total = 0
|
34
43
|
|
35
|
-
subject.percentage_completed.
|
44
|
+
expect(subject.percentage_completed).to eql 100
|
36
45
|
end
|
37
46
|
end
|
38
47
|
end
|