Sha256: 527df34a5d4b3615a77d0856fcc8895c8396af25d658dab97195fa5bf925fff7
Contents?: true
Size: 1.36 KB
Versions: 6
Compression:
Stored size: 1.36 KB
Contents
require 'infobar/timer' class Infobar::Counter class << self prepend Tins::Delegate end def initialize reset end attr_reader :current attr_reader :total def reset(total: 0, current: 0) @current = current @total = total @start = nil @finished = false @timer = Infobar::Timer.new end delegate :rate, to: :@timer delegate :fifo, to: :@timer, as: :fifo_rate delegate :average_time, to: :@timer def started? @start end def finished? @finished end def finish @finished = Time.now self end def progress(by: 1) if !finished? && by >= 1 now = Time.now @start ||= now @timer.add(now, by) @current += by end self end def done? @current >= @total end def to_go [ total - current, 0 ].max end def to_go? to_go.nonzero? end def time_remaining if @finished 0.0 else average_time * to_go end end def eta if @finished @finished else Time.now + time_remaining end end def time_elapsed case when @finished && @start @finished - @start when @start Time.now - @start else 0.0 end end def total_time time_elapsed + time_remaining end def progressed if @total.zero? 0.0 else @current / @total.to_f end end end
Version data entries
6 entries across 6 versions & 1 rubygems