powerbar 1.0.1 → 1.0.2
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/bin/powerbar-demo +17 -3
- data/lib/powerbar.rb +35 -28
- data/lib/powerbar/version.rb +2 -2
- metadata +5 -5
data/bin/powerbar-demo
CHANGED
@@ -53,6 +53,11 @@ def demo_4
|
|
53
53
|
total = 100000
|
54
54
|
step = 1000
|
55
55
|
text = "\e[0mDEMO 4 - Colors!"
|
56
|
+
interstitial = [
|
57
|
+
"Oh, btw, know what?\n",
|
58
|
+
"You may use PowerBar#print to print messages while the bar is running.\n",
|
59
|
+
"Awesome, right?\n"
|
60
|
+
]
|
56
61
|
p = PowerBar.new
|
57
62
|
p.settings.tty.finite.template.main = \
|
58
63
|
"${<msg>} ${<bar> }\e[0m${<rate>/s} \e[33;1m${<percent>%} " +
|
@@ -73,6 +78,9 @@ def demo_4
|
|
73
78
|
(0..total).step(step).each do |i|
|
74
79
|
p.show({:msg => text, :done => i, :total => total})
|
75
80
|
j += 1
|
81
|
+
if 0 == j % 25
|
82
|
+
p.print interstitial.shift
|
83
|
+
end
|
76
84
|
sleep 0.1
|
77
85
|
end
|
78
86
|
p.close
|
@@ -122,6 +130,9 @@ def demo_7
|
|
122
130
|
(0..total).step(step).each do |i|
|
123
131
|
p.show({:msg => text, :done => i, :total => total})
|
124
132
|
j += 1
|
133
|
+
if j == 60
|
134
|
+
p.print "Hint: Of course PowerBar#print also works when in :notty-mode\n"
|
135
|
+
end
|
125
136
|
sleep 0.1
|
126
137
|
end
|
127
138
|
p.close
|
@@ -136,12 +147,15 @@ def demo_8
|
|
136
147
|
p = PowerBar.new
|
137
148
|
p.settings.force_mode = :notty
|
138
149
|
p.settings.notty.finite.output = Proc.new { |s|
|
139
|
-
log.debug(s) unless s == ''
|
150
|
+
log.debug(s.chomp) unless s == ''
|
140
151
|
}
|
141
152
|
j = 0
|
142
153
|
(0..total).step(step).each do |i|
|
143
154
|
p.show({:msg => text, :done => i, :total => total})
|
144
155
|
j += 1
|
156
|
+
if j == 60
|
157
|
+
p.print "Hint: Yes, PowerBar#print also works here. ;)\n"
|
158
|
+
end
|
145
159
|
sleep 0.1
|
146
160
|
end
|
147
161
|
p.close
|
@@ -153,7 +167,7 @@ def demo_9
|
|
153
167
|
step = 1000
|
154
168
|
|
155
169
|
puts "DEMO 9 - No output by PowerBar."
|
156
|
-
puts "
|
170
|
+
puts "Here we use it to collect stats silently, and then we roll our own output:\n-"
|
157
171
|
p = PowerBar.new
|
158
172
|
j = 0
|
159
173
|
(0..total).step(step).each do |i|
|
@@ -168,7 +182,7 @@ def demo_9
|
|
168
182
|
puts "total is: #{p.total}, humanized done is: #{p.h_total}"
|
169
183
|
puts "total is: #{p.total}, humanized done is: #{p.h_total}"
|
170
184
|
puts "bar is: #{p.bar}"
|
171
|
-
puts "
|
185
|
+
puts "-"
|
172
186
|
end
|
173
187
|
sleep 0.1
|
174
188
|
end
|
data/lib/powerbar.rb
CHANGED
@@ -24,11 +24,10 @@ require 'powerbar/version'
|
|
24
24
|
require 'ansi'
|
25
25
|
require 'hashie/mash'
|
26
26
|
|
27
|
+
#
|
28
|
+
# This is PowerBar - The last progressbar-library you'll ever need.
|
29
|
+
#
|
27
30
|
class PowerBar
|
28
|
-
#
|
29
|
-
# This is PowerBar - The last progressbar-library you'll ever need.
|
30
|
-
#
|
31
|
-
|
32
31
|
STRIP_ANSI = Regexp.compile '\e\[(\d+)(;\d+)?(;\d+)?[m|K]', nil
|
33
32
|
|
34
33
|
def initialize(opts={})
|
@@ -67,7 +66,7 @@ class PowerBar
|
|
67
66
|
# evaluates to something other than nil.
|
68
67
|
:main => '${<msg>}: ${[<bar>] }${<rate>/s }${<percent>% }${<elapsed>}${, ETA: <eta>}',
|
69
68
|
:post => '', # printed after the progressbar
|
70
|
-
:wipe => "\e[1000D\e[K", # printed when 'wipe' is called
|
69
|
+
:wipe => "\e[0m\e[1000D\e[K", # printed when 'wipe' is called
|
71
70
|
:close => "\e[?25h\n", # printed when 'close' is called
|
72
71
|
:exit => "\e[?25h", # printed if the process exits unexpectedly
|
73
72
|
:barchar => "\u2588", # fill-char for the progress-bar
|
@@ -81,7 +80,7 @@ class PowerBar
|
|
81
80
|
:pre => "\e[1000D\e[?25l",
|
82
81
|
:main => "${<msg>}: ${<done> }${<rate>/s }${<elapsed>}",
|
83
82
|
:post => "\e[K",
|
84
|
-
:wipe => "\e[1000D\e[K",
|
83
|
+
:wipe => "\e[0m\e[1000D\e[K",
|
85
84
|
:close => "\e[?25h\n",
|
86
85
|
:exit => "\e[?25h",
|
87
86
|
:barchar => "\u2588",
|
@@ -126,12 +125,12 @@ class PowerBar
|
|
126
125
|
}.merge(opts) )
|
127
126
|
end
|
128
127
|
|
129
|
-
#
|
128
|
+
# settings-hash
|
130
129
|
def settings
|
131
130
|
@state.settings
|
132
131
|
end
|
133
132
|
|
134
|
-
#
|
133
|
+
# settings under current scope (e.g. tty.infinite)
|
135
134
|
def scope
|
136
135
|
scope_hash = [settings.force_mode,state.total].hash
|
137
136
|
return @state.scope unless @state.scope.nil? or scope_hash != @state.scope_hash
|
@@ -152,7 +151,7 @@ class PowerBar
|
|
152
151
|
state.scope
|
153
152
|
end
|
154
153
|
|
155
|
-
# Hook at_exit to ensure cleanup
|
154
|
+
# Hook at_exit to ensure cleanup if we get interrupted
|
156
155
|
def hook_exit
|
157
156
|
return if @@exit_hooked
|
158
157
|
if scope.template.exit
|
@@ -163,13 +162,19 @@ class PowerBar
|
|
163
162
|
@@exit_hooked = true
|
164
163
|
end
|
165
164
|
|
166
|
-
#
|
165
|
+
# Print the close-template and defuse the exit-hook.
|
167
166
|
# Be a good citizen, always close your PowerBars!
|
168
167
|
def close
|
169
168
|
scope.output.call(scope.template.close) unless scope.template.close.nil?
|
170
169
|
state.closed = true
|
171
170
|
end
|
172
171
|
|
172
|
+
# Remove progress-bar, print a message
|
173
|
+
def print(s)
|
174
|
+
wipe
|
175
|
+
scope.output.call(s)
|
176
|
+
end
|
177
|
+
|
173
178
|
# Update state (and settings) without printing anything.
|
174
179
|
def update(opts={})
|
175
180
|
state.merge!(opts)
|
@@ -182,18 +187,20 @@ class PowerBar
|
|
182
187
|
@rate.append(state.time_now, state.done)
|
183
188
|
end
|
184
189
|
|
185
|
-
#
|
190
|
+
# Output the PowerBar.
|
191
|
+
# Returns true if bar was shown, false otherwise.
|
186
192
|
def show(opts={})
|
187
|
-
if scope.interval
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
193
|
+
return false if scope.interval > Time.now - state.time_last_show
|
194
|
+
|
195
|
+
update(opts)
|
196
|
+
hook_exit
|
197
|
+
|
198
|
+
state.time_last_show = Time.now
|
199
|
+
state.closed = false
|
200
|
+
scope.output.call(scope.template.pre)
|
201
|
+
scope.output.call(render)
|
202
|
+
scope.output.call(scope.template.post)
|
203
|
+
true
|
197
204
|
end
|
198
205
|
|
199
206
|
# Render the PowerBar and return as a string.
|
@@ -343,19 +350,19 @@ class PowerBar
|
|
343
350
|
|
344
351
|
class Rate < Array
|
345
352
|
attr_reader :last_sample_at
|
346
|
-
def initialize(at,
|
353
|
+
def initialize(at, window, max_interval=10, interval_step_up=0.1)
|
347
354
|
super([])
|
348
355
|
@last_sample_at = at
|
349
356
|
@sample_interval = 0
|
350
|
-
@
|
357
|
+
@sample_interval_step_up = interval_step_up
|
351
358
|
@sample_interval_max = max_interval
|
352
359
|
@counter = 0
|
353
|
-
@
|
360
|
+
@window = window
|
354
361
|
end
|
355
362
|
|
356
363
|
def append(at, v)
|
357
364
|
return if @sample_interval > at - @last_sample_at
|
358
|
-
@sample_interval += @
|
365
|
+
@sample_interval += @sample_interval_step_up if @sample_interval < @sample_interval_max
|
359
366
|
|
360
367
|
rate = (v - @counter) / (at - @last_sample_at).to_f
|
361
368
|
return if rate.nan?
|
@@ -364,9 +371,9 @@ class PowerBar
|
|
364
371
|
@counter = v
|
365
372
|
|
366
373
|
self << rate
|
367
|
-
|
368
|
-
|
369
|
-
|
374
|
+
shift while @window < length
|
375
|
+
|
376
|
+
self
|
370
377
|
end
|
371
378
|
|
372
379
|
def sum
|
data/lib/powerbar/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "1.0.
|
1
|
+
class Powerbar
|
2
|
+
VERSION = "1.0.2"
|
3
3
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: powerbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-07 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ansi
|
16
|
-
requirement: &
|
16
|
+
requirement: &9714940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.4.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *9714940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hashie
|
27
|
-
requirement: &
|
27
|
+
requirement: &9713660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *9713660
|
36
36
|
description: The last progressbar-library you'll ever need
|
37
37
|
email:
|
38
38
|
- moe@busyloop.net
|