| Class | MCollective::RPC::Progress |
| In: |
lib/mcollective/rpc/progress.rb
|
| Parent: | Object |
Class that shows a progress bar, currently only supports a twirling progress bar.
You can specify a size for the progress bar if you want if you dont it will use the helper functions to figure out terminal dimensions and draw an appropriately sized bar
p = Progress.new 100.times {|i| print p.twirl(i+1, 100) + "\r"};puts
* [ ==================================================> ] 100 / 100
# File lib/mcollective/rpc/progress.rb, line 15
15: def initialize(size=nil)
16: @twirl = ['|', '/', '-', "\\", '|', '/', '-', "\\"]
17: @twirldex = 0
18:
19: if size
20: @size = size
21: else
22: cols = Helpers.terminal_dimensions[0] - 22
23:
24: # Defaults back to old behavior if it
25: # couldn't figure out the size or if
26: # its more than 60 wide
27: if cols <= 0
28: @size = 0
29: elsif cols > 60
30: @size = 60
31: else
32: @size = cols
33: end
34: end
35: end
# File lib/mcollective/rpc/progress.rb, line 37
37: def twirl(current, total)
38: # if the size is negative there is just not enough
39: # space on the terminal, return a simpler version
40: return "\r#{current} / #{total}" if @size == 0
41:
42: if current == total
43: txt = "\r " + Helpers.colorize(:green, "*") + " [ "
44: else
45: txt = "\r #{@twirl[@twirldex]} [ "
46: end
47:
48: dashes = ((current.to_f / total) * @size).round
49:
50: dashes.times { txt << "=" }
51: txt << ">"
52:
53: (@size - dashes).times { txt << " " }
54:
55: txt << " ] #{current} / #{total}"
56:
57: @twirldex == 7 ? @twirldex = 0 : @twirldex += 1
58:
59: return txt
60: end