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

Version Path
infobar-0.0.7 lib/infobar/counter.rb
infobar-0.0.6 lib/infobar/counter.rb
infobar-0.0.5 lib/infobar/counter.rb
infobar-0.0.4 lib/infobar/counter.rb
infobar-0.0.3 lib/infobar/counter.rb
infobar-0.0.2 lib/infobar/counter.rb