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