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

Methods

new   twirl  

Public Class methods

[Source]

    # 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 = Util.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

Public Instance methods

[Source]

    # 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 %s [ " % Util.colorize(:green, "*")
44:         else
45:           txt = "\r %s [ " % Util.colorize(:red, @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

[Validate]