added progressbar listener and made it the new default

This commit is contained in:
Nick Gauthier 2010-03-25 14:35:21 -04:00
parent 02cd1ee662
commit 96f4a2195d
4 changed files with 51 additions and 2 deletions

View File

@ -34,6 +34,7 @@ Gem::Specification.new do |s|
"lib/hydra/listener/abstract.rb",
"lib/hydra/listener/minimal_output.rb",
"lib/hydra/listener/notifier.rb",
"lib/hydra/listener/progress_bar.rb",
"lib/hydra/listener/report_generator.rb",
"lib/hydra/master.rb",
"lib/hydra/message.rb",

View File

@ -11,5 +11,5 @@ require 'hydra/listener/abstract'
require 'hydra/listener/minimal_output'
require 'hydra/listener/report_generator'
require 'hydra/listener/notifier'
require 'hydra/listener/progress_bar'

View File

@ -0,0 +1,48 @@
module Hydra #:nodoc:
module Listener #:nodoc:
# Output a progress bar as files are completed
class ProgressBar < Hydra::Listener::Abstract
# Store the total number of files
def testing_begin(files)
@total_files = files.size
@files_completed = 0
@test_output = ""
@errors = false
render_progress_bar
end
# Increment completed files count and update bar
def file_end(file, output)
unless output == '.'
@output.write "\r#{' '*60}\r#{output}\n"
@errors = true
end
@files_completed += 1
render_progress_bar
end
# Break the line
def testing_end
render_progress_bar
@output.write "\n"
end
private
def render_progress_bar
width = 30
complete = ((@files_completed.to_f / @total_files.to_f) * width).to_i
@output.write "\r" # move to beginning
@output.write 'Progress ['
@output.write @errors ? "\033[1;31m" : "\033[1;32m"
complete.times{@output.write '#'}
@output.write '>'
(width-complete).times{@output.write ' '}
@output.write "\033[0m"
@output.write "] #{@files_completed}/#{@total_files}"
@output.flush
end
end
end
end

View File

@ -68,7 +68,7 @@ module Hydra #:nodoc:
@files = []
@verbose = false
@autosort = true
@listeners = [Hydra::Listener::MinimalOutput.new]
@listeners = [Hydra::Listener::ProgressBar.new]
yield self if block_given?