Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
689 lines (618 sloc) 29.1 KB

Version v1.10.0 - August 3, 2018


  • %W flag for complete_bar_with_percentage
  • %W Flag for complete_bar_with_percentage


  • Don't rely on default when building complete bar


  • NoMethodError on decrement when output is non-TTY


  • Fix no method error on decrement when output is not TTY enabled

Version v1.9.0 - September 27, 2017


  • don't shell out when it's avoidable.


  • Don't allow user to override total or starting_at in Enumerator
  • print_and_flush to be explicitly a private method


  • Enumerator#to_progressbar as a refinement


  • Explicit clear on start


  • Components::Time to allow #estimated_seconds_remaining to be called


  • Base#to_h to expose all of the data about the current bar state
  • Outputs::Null for users who don't want the bar sent anywhere
  • Ability to specify a completely custom output stream
  • %u format flag to show ?? if total is unknown

Version v1.8.3 - September 13, 2017

  • Update warning_filter to fix require_relative

Version v1.8.2 - December 10, 2016


  • Predicates not available on 1.8.7


  • progressbar as a gem build target


  • reek

Version v1.8.1 - May 13, 2016


  • no dynamic length when working with spring

Version v1.8.0 - April 24, 2016


  • Gem signing via certificate
  • ActiveSupport Time-Traveling Compatibility


  • ProgressBar::Time to an instantiated class


  • Progress#finish causing an exception when total was unknown

Version v1.7.5 - March 25, 2015

  • Prevent method redefined warnings being generated by replacing uses of attr_accessor with: attr_reader where a setter function is already defined, attr_writer where a getter function is already defined

Version v1.7.4 - March 23, 2015

Version v1.7.3 - March 23, 2015

Version v1.7.2 - March 23, 2015


  • rubygems config

Version v1.7.1 - December 21, 2014


  • ETA works again, when ProgressBar is initialized with a non zero starting_at.


  • Describe the wiki link
  • Inline the cage image in the README
  • Remove superfluous subtitle
  • Remove sections from the README that were moved to the Wiki
  • Add link to wiki
  • Update logo

Version v1.7.0 - November 4, 2014


  • Massive internal refactoring. Now 236% faster!
  • Add Timer#restart

Version v1.6.1 - October 30, 2014


  • Update readme about output option
  • Display warnings when testing


  • Remove warnings from uninitialized instance variable
  • Instance variable @started_at not initialized
  • Instance variable @out_of_bounds_time_format not initialized
  • Change private attributes to protected
  • `*' interpreted as argument prefix
  • Prefix assigned but unused variables with underscores
  • Ambiguous first argument

Version v1.6.0 - September 20, 2014


  • Add ability to disable auto-finish
  • Add SCSS lint configuration
  • Update JSHint config with our custom version
  • Add right-justified percentages - Closes #77


  • Don't allow title to change for non-TTY output
  • Percentage formatter failed when total was 0 or unknown

Version v1.5.1 - May 14, 2014


  • Make grammar and spelling corrections in the README
  • Add the ability to scale the rate component
  • Add notes to the README about the new format components
  • Add the %R flag to the formatting to show the rate with 2 decimal places of precision
  • Remove unused molecule cruft
  • Add specs to make sure that rate works even if the bar is started in the middle
  • Add base functionality for the rate component
  • Add Slack notification to Travis builds
  • Upgrade rspectacular to v0.21.6
  • Upgrade rspectacular to v0.21.5
  • Upgrade rspectacular to v0.21.4
  • Upgrade rspectacular to v0.21.3
  • Upgrade rspectacular to v0.21.2
  • Add badges to the README
  • Upgrade rspectacular to v0.21.1
  • Lower Timecop version for Ruby 1.8 compatibility
  • Lower rake version to 0.9.6 so that it will be compatible with Ruby 1.8
  • Update rspectacular to 0.21
  • Add CODECLIMATE_REPO_TOKEN as a secure Travis ENV variable
  • Upgrade rspectacular to v0.20
  • Add the Code Climate test reporter gem
  • Add Ruby 2.1 to Travis
  • Convert to RSpec 3


  • The running average is always set back to 0 when the bar is reset

Version v1.4.2 - March 1, 2014

  • Improve estimated timer for short durations
  • Remove useless protection
  • README Update
  • Slight formatting changes on the PACMAN example to make it consistent with the others
  • Pacman-style progressbar

Version v1.4.1 - January 26, 2014

  • Change from 'STDOUT.puts' to the more appropriate 'Kernel.warn'
  • Add another spec which tests this in a different way
  • Add an acceptance spec to mimic running fuubar with no specs
  • Makes Timer#stop a no-op unless it has first been started.

Version v1.4.0 - December 28, 2013

  • Displaying the call stack was probably too much
  • Upgrade fuubar
  • Add an error specifically for invalid progress so that, in parent libraries, it can be caught properly
  • Use the splat operator just to be clear
  • Fix an issue with the estimated timers blowing up if the total was nil - Closes #62
  • Changed my mind. Rather than checking if the bar is stopped/started just blow up when the attempt is made to increment/decrement the bar to an invalid value
  • Remove the CannotUpdateStoppedBarError
  • Changes to the total should also be considered a change in progress and should therefore not be allowed for a stopped bar
  • Add a warning that any changes to progress while the bar is stopped, will eventually be an exception
  • Use the helper to divide the seconds. Don't know why I didn't do this before
  • When finishing the bar, we also should stop the timers
  • When checking 'finished?' make sure we check all progressables
  • Always thought it was weird that the 'finished?' check was in the update method
  • Move the 'finished' logic into the progressable
  • Rather than specifying @elapsed_time explicitly, use the with_timers helper
  • Add a method to check to see whether the bar has been started
  • Extract logic for updating progress into a 'update_progress' method
  • Add placeholder for an Error which will be used in v2.0.0
  • Update the copyright in the README to 2014 (we're almost there :)
  • Add 'Zero dependencies' to the README as a beneifit of using ruby-progressbar

Version v1.3.2 - December 15, 2013

  • Try to fix issues with testing on 1.8 and 1.9 when 'console/io' is not available
  • Remove rspectacular so we can get the specs to pass on 1.8 and 1.9.2

Version v1.3.1 - December 15, 2013

  • Even if the throttle rate is passed in as nil, use the default regardless

Version v1.3.0 - December 15, 2013

  • Remove the 'Road Map' section in the README
  • Add notes to the README about non-TTY output
  • Add notes to the CHANGELOG
  • Give the bar the option of whether or not to automatically start or if #start has to be explicitly called
  • Default to a non-TTY-safe format if there is no TTY support when outputting the bar
  • Do not output the bar multiple times if #resume is called when the bar is already started
  • Do not output the bar multiple times if #stop is called when the bar is already stopped
  • Do not output multiple bars if #finish is called multiple times
  • Change progressbar variables in specs to be let's instead
  • Change output variables in specs to be let's instead
  • Update Gemfile.lock to use HTTPS for Rubygems
  • Add Ruby 2.0.0 to the README as a supported Ruby version
  • Test with Ruby 2.0.0 on Travis CI
  • Use HTTPS RubyGems source
  • Added an option to set the :remainder_mark (along the lines of :progress_mark) that allows the user to set the character used to represent the remaining progress to be made along the bar.
  • Add specs for the ANSI color code length calculation
  • Name the regex for the ANSI SGR codes so that it's more clear what we're doing
  • Remove comment
  • allows to inclue ANSI SGR codes into molecules, preserving the printable length
  • Switch from using 'git ls-files' to Ruby Dir globbing - Closes #54

Version v1.2.0 - August 12, 2013

  • Add note to CHANGELOG about TTY updates
  • Update benchmark script
  • Update logic to describe the bar as being 'stopped' also when it is 'finished'
  • Only print the bar output if we're printing to a TTY device, or any device as long as the bar is finished
  • Switch to instead of STDOUT so that it can be properly reassigned for redirections
  • Move carriage return to the clear method
  • Add better inspection now that we can have a nil total
  • Add note about unknown progress to the changelog
  • Add notes to the README about displaying unknown progress
  • Fix missing throttle rate in README
  • Allow the progress bar to have an 'unknown' amount of progress
  • Add item to the changelog
  • Update the benchmark script
  • Add #log to progressbar for properly handling bar output when printing to the output IO
  • Rename all of the requires lines to be consistent with the new lib file
  • Remove depreciation code

Version v1.1.2 - August 11, 2013

  • Fix the 'negative argument' problem - Closes #47
  • Update a spec that was passing when it shouldn't have been and pend it until we can implement the fix
  • Upgrade rspec and fuubar
  • When dividing up the remainder of the length and determining how much space a completed bar should take up, round down so that the bar doesn't complete until 100%
  • Add tags file to gitignore

Version v1.1.1 - June 8, 2013

  • Fix file modes to be world readable
  • Filter out specs themselves from coverage report
  • Add tags file to gitignore
  • Simplify #with_progressables and #with_timers

Version v1.1.0 - May 29, 2013

  • Upgrade simplecov so it is resilient to mathn being loaded
  • fix progress format when core lib mathn is loaded
  • Rename throttle_period to throttle_rate
  • Set a default throttle_period of 100 times per second
  • Use the new precise #elapsed_seconds in the throttle component
  • Add #elapsed_seconds that gets a more precise value for the elapsed time
  • Rename #elapsed_seconds to #elapsed_whole_seconds
  • Add throttle_period documentation
  • Made throttle API resemble other components
  • Add throttle_period option to #create
  • Add throttle component
  • Use StringIO in the new spec so we don't get output to STDOUT
  • fix for the ruby_debug error, where debug defines a start method on kernel that is used erroneously by progressbar
  • spec that recreates the problem we're seeing with ruby-debug under jruby
  • fix terminal width crashing progressbar
  • Add failing test for terminal width crashing progress bar
  • Make sure we're using an up-to-date version of the JSON gem
  • Fix gemspec since is no longer supported
  • Update ruby-prof
  • Upgrade timecop
  • Upgrade simplecov
  • Upgrade rake
  • Make changes related to rspectacular
  • Install rspectacular
  • Remove guard
  • Rework gem manifest so that it only calls ls-files once
  • Replace .rvmrc with .ruby-version
  • Rework #length specs now that we have a more complex set of specifications
  • Fix overriding the progress bar length with an environment variable.
  • Fix the rdoc_options specification in the gemspec
  • Add Ruby Markdown code fencing to the README

Version v1.0.2 - October 7, 2012

  • Remove superfluous comment
  • The amount returned if the total is 0 should always be 100 (as in 100%) and not the DEFAULT_TOTAL. Even though they currently happen to be the same number.
  • return DEFAULT_TOTAL for percentage_completed of total is zero, fixing ZeroDivisionError
  • Use io/console where available.
  • Add tmux notifications to Guardfile
  • Bundler is not a development dependency
  • Hashes are not ordered and therefore when looking for the time mocking method, we weren't selecting the proper one. Switched to an Array instead.
  • Update development gems
  • Move ruby-prof into the Gemfile so it is only loaded when it's MRI Ruby
  • Add a script for benchmarking
  • Now that we're memoizing Format::Base#bar_molecules, just use it to calculate how many bar molecules are left
  • Limit the API of the Format.Base class by making #non_bar_molecules and #bar_molecules private
  • Move Formatter#process into Format::Base because it is much more concerned with the format
  • Remove the Kernel#tap in Formatter#process and just use an instance variable instead
  • Now that we're not reparsing the format string each time, we can save some cycles by memoizing the Format::Base#non_bar_molecules and #bar_molecules
  • When setting the format string, if it hasn't changed, we don't need to reparse it
  • Extract the logic of setting the format string out into its own private method ProgressBar::Formatter#format_string=
  • Add 'ruby-prof' to the project as a development gem

Version v1.0.1 - August 28, 2012

  • Add Ruby 1.8.7 back into Travis CI build
  • Fixing string slice bug
  • Add a Rakefile
  • Update .gitignore
  • Add Rake to the Gemfile

Version v1.0.0 - August 18, 2012

  • Remove 1.8 from the Ruby Travis builds
  • Add a spec for the %% molecule
  • Fix bug where a progress bar with an integrated percentage miscalculated the space it was taking up
  • fix @terminal_width and bar_width calculation
  • Fix more README typos
  • Set the default bar mark to '='
  • Make sure to blow up if a molecule is not value
  • It's not sufficient to say that a molecule is 'a percent sign followed by something that isn't a percent sign', we need to force it to be followed by a letter
  • Fix   problems in the README
  • Update the formatting to make sure the %b and %i formatting molecules can coexist with each other
  • Now that we can use the %b and %i flags, we can create a mirrored bar simply by using a format string of '%i%b' and therefore this extra code is no longer necessary
  • Make sure that when the timer is started, then stopped, then started again, it should not register as stopped?
  • Allow %i to be used display the incomplete space of the bar
  • Update ProgressBar::Formatter#format to reset the bar style to default if it is called without passing in a format string
  • Allow the %b molecule to be used to display the bar only without incomplete space
  • Update the %B format test to be more reasonable
  • Make the %w molecule only return the bar with the percentage instead of including empty space
  • Remove the length argument when calling ProgressBar::Components::Bar#to_s and instead set the attribute
  • Rename ProgressBar::Formatter#bar to #complete_bar
  • Change the %b (bar with percentage) format molecule to %w
  • Swap the meaning of the %b and %B molecules
  • There was a typo in the example formats in the README. The literal percent sign needs to be included in the format string
  • Make sure the '%%' molecule is formatted properly
  • Little refactoring on the ProgressBar::Formatter#process method
  • README update
  • Remove all of the ProgressBar::Base#update calls and convert to method calls that take a block #with_update
  • Add an "In The Weeds" section to the README
  • Add 'It's better than some other library' section to the README
  • Add contributors to the README
  • Add supported Rubies to the README
  • Tons of README formatting updates
  • Add time-mocking information to the README
  • If Time is being mocked via Delorean, make sure that the progress bar always uses the unmocked time
  • If Time is being mocked via Timecop, make sure that the progress bar always uses the unmocked time
  • When testing, make sure that we're able to always get the proper version of now that we need for our particular spec
  • When calling allow a Time-like object to be passed in
  • Add a ruby-progressbar-specific implementation of Time to encapsulate the business logic
  • Extract the notion of now into a method on the Timer module
  • Remove extra private
  • Use inheritance to put title= in the Formatter module where it belongs
  • I didn't notice that #total and #progress were available in the Formatter module
  • Move logic specific to the modules into those modules and use the inheritance chain to get at them
  • Evidently Travis is having issues with Rubinius so we'll remove them from our .travis.yml file to get a passing build
  • Try and get better 1.8.7 compatibility when checking the end character in the progressbar string
  • Add the Travis-CI build status to the README
  • Add the Travis-CI configuration file
  • Update the other deprecation warnings outside of ProgressBar::Base
  • Add the remaining method deprecation/warning messages
  • Use a little metaprogramming to further dry up the deprecation messages
  • fixup! c3e6991988107ab45ac3dac380750b287db3bc2e
  • When displaying deprecation warnings for methods, only show them one time; not every time the method is invoked
  • Dry up the warning messages in ProgressBar::Depreciable
  • Move ProgressBar::Base#backwards_compatible_args_to_options_conversion to the ProgressBar::Depreciable module
  • Add a new ProgressBar::Depreciable module to encapsulate all of the deprecation logic
  • Forgot to return the options hash from ProgressBar::Base#backwards_compatible_args_to_options_conversion
  • Add the old bar_mark= method back so it's more backwards compatible
  • Update deprecation warnings to expire June 30th, 2013 instead of October 30th, 2013
  • Update the README to reflect the new syntax for creating a ProgressBar
  • Override and remain backward compatible with the pre-1.0 versions of the gem
  • Convert the ProgressBar module to a class so that we can...
  • Add ProgressBar::Base#progress and #total
  • Update the gemspec
  • Update the EstimatedTimer specs when smoothing is turned off such that the #decrement spec is sufficiently different from the smoothing on #decrement spec
  • Update EstimatedTimer specs when smoothing is turned off to be more consistent with the new smoothing specs
  • Add EstimatedTimer specs to test when smoothing is turned on
  • Update the spec text for the EstimatedTimer class so that it doesn't contain the actual expected value but rather the general expectation
  • Extract smoothing into its own let variable
  • Add notes to the README about smoothing
  • Invert the smoothing value such that 0.0 is no smoothing and 1.0 is maximum smoothing
  • Set the default smoothing value to 0.9
  • Convert the EstimatedTime#estimated_seconds_remaining over to using the running average
  • Tell the Progressable module to update the running average any time the progress is set
  • Add the notion of a smoothing variable to the Progressable module for use when calculating the running average
  • Introduce Progressable#running_average and reset it any time Progressable#start is called
  • Add a RunningAverageCalculator so we can offload the logic for calculating running averages in our Progressables
  • Always refer to total using the accessor rather than the instance variable
  • Fix place where we were using a literal string for our time format rather than the TIME_FORMAT constant
  • Make the Progressable initializer optional
  • Fix README mistake regarding out of bounds ETAs
  • In Progressable, rather than accessing the starting_position instance variable, use an accessor
  • Rather than having the logic in multiple places, use Progressable#start where possible
  • Update the Progressable module to always reference the progress accessor rather than the instance variable
  • Add the ability to customize the bar's title in real time
  • Add a note to the README about customizing the bar in real time
  • Add notes to the README about overriding the bar's length
  • Update the deprecation date of
  • Upgrade the README to describe the new 'integrated percentage' formatting option
  • Update Ruby version in .rvmrc
  • Replace @out.print with @out.write to work better in dumb terminal like Emacs' M-x shell.
  • Document the smoothing attribute a little better.
  • Rewrote smoothing stuff to something better.
  • Offload handling of weird time values to format_time (isn't that its job?) ;-)
  • Added "smoothing" attribute (default 0.9). It can be set to nil to use the old ETA code.
  • Make time estimate a smoothed moving average
  • Use the inherited #initialize
  • Add a format where the bar has an integrated percentage
  • Just always run all specs
  • Alias stopped? to paused?
  • If the bar is completed, show the elapsed time, otherwise show the estimated time
  • estimated_time to estimated_time_with_no_oob
  • Add a Guardfile
  • Add the ability to set the progress mark at any point
  • Upgrade RSpec in the Gemfile
  • Allow :focused w/o the '=> true'
  • More gem updates. Include guard
  • Quotes
  • Unindent private methods
  • And again
  • Consistency is key
  • And again
  • Change to new date and repo
  • Upgraded RSpec uses RSpec not Rspec
  • Not sure why I did this here
  • Upgrade RSpec and SimpleCov
  • Bump Ruby version to 1.9.3
  • allow to customize the #title_width
  • Detect whether the output device is a terminal, and use a simplified output strategy when it is not.
  • Use 1.9 compatible require in test.
  • Add tests for Timecop and Delorean time mocking
  • Make Progressbar resistant to time mocking
  • Automatically tag gem builds as
  • Replace the Bar's instance variable references
  • Remove Options Parser
  • The starting value should be passed on #start
  • Remove Title class for now
  • Change 'reversed bar' to 'mirrored bar'
  • Rename out to output and access w/o variable
  • Change default output to STDOUT
  • Rename output_stream to output
  • Rename current to progress
  • Update README
  • Add #decrement to the progress bar
  • Backwards compatibility for instantiation
  • Create with_timers helper
  • Update spec_helper with new root gem file
  • Update gemspec with new license file
  • Update gemspec to auto-update Date
  • Add deprecation and backwards compatibility helprs
  • Add SimpleCov to the project
  • Rename 'beginning_position' option to 'started_at'
  • Fix require files
  • Update README
  • Update README
  • Update README
  • Remove Test::Unit test cases which are covered
  • Replace licenses with the MIT license
  • Begin updating README
  • Add .gitignore
  • Fix 'ArgumentError: negative argument' when using with Spork
  • Bar can be forcibly stopped
  • Autostart for now
  • Add ability to pause/resume progress bar
  • Bar resets the elapsed time when reset.
  • Bar resets the estimated time when reset.
  • Timers can now be reset
  • #start determines #reset position
  • On #reset, bar goes back to its starting position
  • Bar can be reset back to 0
  • Fix test typo
  • Fix tests
  • Reminder for autostart
  • Move #title
  • Delete unneeded code
  • Stop Elapsed Timer on finish
  • Progressable components finish properly
  • Refactor out common 'Progressable' functionality
  • Prepare for more 'finish' functionality
  • Refactor common Timer functionality into a module
  • Bar outputs a \n when it's finished
  • Bar can now be "finished"
  • Remove unnecessary (for now) code
  • Resizing algorithm is much smarter
  • Fix length_changed? check
  • Move formatting methods and make them private
  • Create #inspect method
  • Remove implemented methods
  • We have a LICENSE file. No need for this.
  • Fix output problem
  • Always show 2 decimal places with precise percentage
  • Elapsed Time works properly with progress bar
  • Estimated Timer works properly with progress bar
  • %r format string works properly
  • Estimated Timer can now be incremented
  • Bar graphic can now be reversed
  • Remove method arguments from molecule
  • %e, %E and %f format the estimated time correctly
  • Formatting
  • Include Molecule specs
  • Estimated Timer works with out of bounds times
  • Estimated Timer displays estimated time correctly
  • Estimated Timer displays unknown time remaining
  • Estimated Time can now be displayed
  • Make Timer work properly
  • Move bar_spec to the proper locale
  • Elapsed Time can now be displayed
  • Percentage information can now be displayed
  • Capacity information can now be displayed
  • Move Bar and Title into Components submodule
  • Base refactoring work laid out
  • Add RSpec support files
  • Create a Gemfile and other infrastructure files
  • Update gemspec
  • Fix to failing test: Adjusting the path to progressbar.rb file
  • accessor for alternate bar mark
  • Updated gem name to match project (so it would build)
  • Add a gemspec.
  • Move progressbar.rb into lib/.
  • Add LICENSE files.
  • Get rid of the ChangeLog. That's what revision logs are for.
  • Make the readme use Markdown.
  • Initial commit (based on Ruby/ProgressBar 0.9).