lib/powerbar.rb in powerbar-1.0.2 vs lib/powerbar.rb in powerbar-1.0.3

- old
+ new

@@ -42,10 +42,11 @@ :total => :unknown, :settings => { :rate_sample_max_interval => 10, # See PowerBar::Rate :rate_sample_window => 6, # See PowerBar::Rate :force_mode => nil, # set to :tty or :notty to force either mode + :kilo => 1024, # Change this to 1000 when measuring network traffic or such. :tty => { # <== Settings when stdout is a tty :finite => { # <== Settings for a finite progress bar (when total != :unknown) # The :output Proc is called to draw on the screen --------------------. :output => Proc.new{ |s| $stderr.print s[0..terminal_width()-1] }, # <-' :interval => 0.1, # Minimum interval between screen refreshes (in seconds) @@ -180,12 +181,12 @@ state.merge!(opts) state.time_start ||= Time.now state.time_now = Time.now @rate ||= PowerBar::Rate.new(state.time_now, - state.settings.rate_sample_window, - state.settings.rate_sample_max_interval) + state.settings.rate_sample_window, + state.settings.rate_sample_max_interval) @rate.append(state.time_now, state.done) end # Output the PowerBar. # Returns true if bar was shown, false otherwise. @@ -217,19 +218,15 @@ # Render the actual bar-portion of the PowerBar. # The length of the bar is determined from the template. # Returns nil if the bar-length would be == 0. def bar return nil if state.total.is_a? Symbol - blank = render_template(:main, skip=[:bar]) - twid = state.scope_at[0] == :tty ? terminal_width() : scope.line_width - barlen = [twid - blank.gsub(STRIP_ANSI, '').length, 0].max - done = state.done - total = state.total - barchar = scope.template.barchar - padchar = scope.template.padchar - fill = [0,[(done.to_f/total*barlen).to_i,barlen].min].max - thebar = barchar * fill + padchar * [barlen - fill,0].max + skel = render_template(:main, skip=[:bar]) + lwid = state.scope_at[0] == :tty ? terminal_width() : scope.line_width + barlen = [lwid - skel.gsub(STRIP_ANSI, '').length, 0].max + fill = [0,[(state.done.to_f/state.total*barlen).to_i,barlen].min].max + thebar = scope.template.barchar * fill + scope.template.padchar * [barlen - fill,0].max thebar.length == 0 ? nil : thebar end def h_bar bar @@ -326,19 +323,20 @@ sub.nil? ? '' : r end end HQ_UNITS = %w(b k M G T).freeze - def humanize_quantity(number, format='%n%u', base=1024) + def humanize_quantity(number, format='%n%u') return nil if number.nil? return nil if number.is_a? Float and (number.nan? or number.infinite?) - return number if number.to_i < base + kilo = settings.kilo + return number if number.to_i < kilo max_exp = HQ_UNITS.size - 1 number = Float(number) - exponent = (Math.log(number) / Math.log(base)).to_i + exponent = (Math.log(number) / Math.log(kilo)).to_i exponent = max_exp if exponent > max_exp - number /= base ** exponent + number /= kilo ** exponent unit = HQ_UNITS[exponent] return format.gsub(/%n/, number.round(1).to_s).gsub(/%u/, unit) end