ProgressPrinter

Logs the progress of an operation, with estimated completion time.
Installation
When using Bundler, add this to your project's Gemfile:
gem 'progress_printer'
Otherwise, install it with the gem command:
$ gem install progress_printer
Usage
Basic Usage
A ProgressPrinter must be created, started, and finished. Use #increment within your operation to increment the progress.
require 'progress_printer'
printer = ProgressPrinter.new(name: "Counting", total: 250)
printer.start
250.times { sleep 0.05; printer.increment }
printer.finish
Output:
Counting: 0/250 0% calculating...
Counting: 100/250 40% ~8s
Counting: 200/250 80% ~2s
Counting: 250/250 100% 14s total
You can also achieve the same results by using .wrap or #wrap:
ProgressPrinter.wrap(name: "Counting", total: 250) do |progress|
250.times { sleep 0.05; progress.increment }
end
printer = ProgressPrinter.new(name: "Counting", total: 250)
printer.wrap do |progress|
250.times { sleep 0.05; progress.increment }
end
Arguments
total- The total number of iterations expected. If this is omitted, estimated completion time will not be shown.name- A string to display next to each printed line. This helps identify the current operation, or the specific progress printer if using multiple.every(Default:100) - How many iterations should pass in between printing a line.out(Default:$stdout) - An object responding to#putsfor printing the progress to.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/justincampbell/progress_printer. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.