multi_progress_bar 0.1.0 → 0.1.3
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.yml +3 -3
- data/examples/example.rb +3 -2
- data/lib/multi_progress_bar.rb +21 -2
- data/lib/multi_progress_bar/bar.rb +16 -0
- data/lib/multi_progress_bar/bar_renderer.rb +28 -1
- data/lib/multi_progress_bar/total_bar.rb +4 -0
- metadata +2 -2
data/VERSION.yml
CHANGED
data/examples/example.rb
CHANGED
@@ -10,19 +10,20 @@ begin
|
|
10
10
|
MultiProgressBar.start
|
11
11
|
|
12
12
|
# Demo.
|
13
|
-
make_machine_bar = lambda { MultiProgressBar::Bar.new("(Waiting...)",
|
13
|
+
make_machine_bar = lambda { MultiProgressBar::Bar.new("(Waiting...)", 0) }
|
14
14
|
machine_bars = [make_machine_bar[], make_machine_bar[]]
|
15
15
|
total = MultiProgressBar::TotalBar.new("-Total-")
|
16
16
|
|
17
17
|
machine_names = ["bleeker", "montrose"]
|
18
18
|
|
19
|
-
until machine_bars.all? { |bar| bar.current == bar.total }
|
19
|
+
until machine_bars.all? { |bar| bar.title != "(Waiting...)" && bar.current == bar.total }
|
20
20
|
sleep(0.1)
|
21
21
|
|
22
22
|
# Simulate machines becoming available.
|
23
23
|
machine_bars.each do |bar|
|
24
24
|
if bar.title == "(Waiting...)"
|
25
25
|
bar.title = machine_names.pop if rand(10) == 0
|
26
|
+
bar.total = 100
|
26
27
|
else
|
27
28
|
bar.inc(rand(10))
|
28
29
|
end
|
data/lib/multi_progress_bar.rb
CHANGED
@@ -12,6 +12,9 @@ module MultiProgressBar
|
|
12
12
|
|
13
13
|
Ncurses.initscr
|
14
14
|
Ncurses.curs_set(0)
|
15
|
+
Ncurses.start_color
|
16
|
+
|
17
|
+
(0..7).each { |color_number| Ncurses.init_pair(color_number, color_number, Ncurses::COLOR_BLACK); }
|
15
18
|
|
16
19
|
@bars_window = Ncurses::WINDOW.new(1, 0, Ncurses.LINES-1, 0)
|
17
20
|
@log_window = Ncurses::WINDOW.new(Ncurses.LINES-1, 0, 0, 0)
|
@@ -20,13 +23,27 @@ module MultiProgressBar
|
|
20
23
|
|
21
24
|
# Restore the terminal to normal function. Always call this before exiting.
|
22
25
|
def end
|
26
|
+
# Give an extra line below the output for the shell to prompt on.
|
27
|
+
add_bar(nil)
|
28
|
+
|
23
29
|
Ncurses.endwin
|
24
|
-
puts
|
25
30
|
end
|
26
31
|
|
27
32
|
# Write +text+ to the space above the progress bars.
|
28
33
|
def log(text)
|
29
|
-
|
34
|
+
text = text.to_s
|
35
|
+
|
36
|
+
# Parse ANSI escape codes.
|
37
|
+
text.scan(/([^\e]*)(?:\e\[(\d+.))?/) do |normal_text, code|
|
38
|
+
@log_window.addstr(normal_text)
|
39
|
+
case code
|
40
|
+
when /3(\d)m/
|
41
|
+
@log_window.attron(Ncurses.COLOR_PAIR($1.to_i))
|
42
|
+
when /0m/
|
43
|
+
@log_window.attron(Ncurses.COLOR_PAIR(7))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
@log_window.addstr("\n")
|
30
47
|
@log_window.refresh
|
31
48
|
end
|
32
49
|
|
@@ -47,7 +64,9 @@ module MultiProgressBar
|
|
47
64
|
|
48
65
|
def update_bar(bar, rendered_bar) #:nodoc:
|
49
66
|
@bars_window.move(bars.index(bar), 0)
|
67
|
+
@bars_window.attron(Ncurses.COLOR_PAIR(bar.color)) if bar.color
|
50
68
|
@bars_window.addstr(rendered_bar)
|
69
|
+
@bars_window.attroff(Ncurses.COLOR_PAIR(bar.color)) if bar.color
|
51
70
|
@bars_window.refresh
|
52
71
|
end
|
53
72
|
end
|
@@ -15,7 +15,12 @@ module MultiProgressBar
|
|
15
15
|
#
|
16
16
|
# See the +ruby-progressbar+ gem (http://0xcc.net/ruby-progressbar/index.html.en)
|
17
17
|
# for more details.
|
18
|
+
#
|
19
|
+
# MultiProgressBar::Bar makes two additional format arguments available: :current
|
20
|
+
# and :total. These display the current and total values respectively.
|
18
21
|
class Bar < DelegateClass(BarRenderer)
|
22
|
+
attr_reader :color
|
23
|
+
|
19
24
|
# Create a new Bar with a +title+ and a +total+ value.
|
20
25
|
def initialize(title, total)
|
21
26
|
MultiProgressBar.add_bar(self)
|
@@ -41,6 +46,17 @@ module MultiProgressBar
|
|
41
46
|
notify_observers
|
42
47
|
end
|
43
48
|
|
49
|
+
# Set the progress to 100% and display elapsed time instead of ETA.
|
50
|
+
def finish
|
51
|
+
super
|
52
|
+
notify_observers
|
53
|
+
end
|
54
|
+
|
55
|
+
def color=(color)
|
56
|
+
@color = color
|
57
|
+
show
|
58
|
+
end
|
59
|
+
|
44
60
|
def observe(&b) #:nodoc:
|
45
61
|
@observers << b
|
46
62
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module MultiProgressBar
|
2
2
|
class BarRenderer < ProgressBar #:nodoc:
|
3
|
-
attr_writer :
|
3
|
+
attr_writer :total
|
4
4
|
|
5
5
|
def initialize(title, total, width, &block)
|
6
6
|
@block = block
|
@@ -9,14 +9,41 @@ module MultiProgressBar
|
|
9
9
|
super(title, total, @buffer)
|
10
10
|
end
|
11
11
|
|
12
|
+
def fmt_current
|
13
|
+
@current
|
14
|
+
end
|
15
|
+
|
16
|
+
def fmt_total
|
17
|
+
@total
|
18
|
+
end
|
19
|
+
|
12
20
|
def show
|
13
21
|
super
|
14
22
|
@block.call(@buffer.string)
|
15
23
|
@buffer.string = ""
|
16
24
|
end
|
17
25
|
|
26
|
+
def title=(new_title)
|
27
|
+
@title = new_title
|
28
|
+
show
|
29
|
+
end
|
30
|
+
|
18
31
|
def get_width
|
19
32
|
@width
|
20
33
|
end
|
34
|
+
|
35
|
+
def restart
|
36
|
+
set(0)
|
37
|
+
@start_time = Time.now
|
38
|
+
@previous_time = @start_time
|
39
|
+
end
|
40
|
+
|
41
|
+
def do_percentage
|
42
|
+
if @current.zero?
|
43
|
+
0
|
44
|
+
else
|
45
|
+
super
|
46
|
+
end
|
47
|
+
end
|
21
48
|
end
|
22
49
|
end
|
@@ -26,7 +26,11 @@ module MultiProgressBar
|
|
26
26
|
private
|
27
27
|
def update_total
|
28
28
|
total_current = @bars.inject(0) { |sum, bar| sum + bar.current }
|
29
|
+
total_total = @bars.inject(0) { |sum, bar| sum + bar.total }
|
30
|
+
finished = @bars.all? { |bar| bar.finished? }
|
31
|
+
@renderer.total = total_total
|
29
32
|
@renderer.set(total_current)
|
33
|
+
@renderer.finish if finished
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_progress_bar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Jaros
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-20 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|