class Conscriptor::ProgressReporter

Attributes

count[R]

Public Class Methods

new(total:, name: nil, report_every: 1, logger: nil) click to toggle source
# File lib/conscriptor/progress_reporter.rb, line 7
def initialize(total:, name: nil, report_every: 1, logger: nil)
  @name = name
  @total = total
  @report_every = report_every || 1
  @logger = logger || simple_logger
  @count = 0
  @start_time = Time.now
end

Public Instance Methods

done?() click to toggle source
# File lib/conscriptor/progress_reporter.rb, line 30
def done?
  @count >= @total
end
inc(name: @name, by: 1) click to toggle source
# File lib/conscriptor/progress_reporter.rb, line 16
def inc(name: @name, by: 1)
  @count += by

  if @count % @report_every == 0 # rubocop:disable Style/GuardClause
    percent_complete = 100 * @count / @total
    time_spent = Time.now - @start_time
    time_left = @total * time_spent / @count - time_spent

    @logger.info "#{name} #{@count}/#{@total} (#{percent_complete}%)" \
                 " #{(time_spent / 60).round(1)}m spent," \
                 " #{(time_left / 60).round(1)}m to go-ish"
  end
end