Sha256: 4db2a212996a80b0e06fc594910e44550a5a97c9be00e1507de77ff31024ab1f
Contents?: true
Size: 1.3 KB
Versions: 5
Compression:
Stored size: 1.3 KB
Contents
module Log class ProgressBar BAR_MUTEX = Mutex.new BARS = [] REMOVE = [] SILENCED = [] def self.new_bar(max, options = {}) cleanup_bars BAR_MUTEX.synchronize do Log::LAST.replace "new_bar" if Log::LAST == "progress" options = Misc.add_defaults options, :depth => BARS.length BARS << (bar = ProgressBar.new(max, options)) bar end end def self.cleanup_bars BAR_MUTEX.synchronize do REMOVE.each do |bar| index = BARS.index bar if index BARS.delete_at index BARS.each_with_index do |bar,i| bar.depth = i end end index = SILENCED.index bar if index SILENCED.delete_at index SILENCED.each_with_index do |bar,i| bar.depth = i end end end REMOVE.clear BARS.length end end def self.remove_bar(bar) bar.done if bar.respond_to? :done BAR_MUTEX.synchronize do REMOVE << bar end end def self.with_bar(max, options = {}) bar = new_bar(max, options) begin yield bar keep = false rescue KeepBar keep = true ensure remove_bar(bar) if bar end end end end
Version data entries
5 entries across 5 versions & 1 rubygems