lib/progress.rb in progress-0.1.2 vs lib/progress.rb in progress-0.2.0
- old
+ new
@@ -62,11 +62,11 @@
# Progress.lines = true
# ==== To force highlight
# Progress.highlight = true
def start(title, total = 1)
levels << new(title, total)
- print_message
+ print_message(true)
if block_given?
begin
yield
ensure
stop
@@ -95,27 +95,29 @@
end
end
def stop
if levels.last
- print_message if levels.last.step_if_blank
+ print_message(true) if levels.last.step_if_blank
levels.pop
io.puts if levels.empty?
end
end
- attr_writer :io, :lines, :highlight # :nodoc:
+ attr_writer :lines, :highlight # :nodoc:
private
def levels
@levels ||= []
end
def io
- @io ||= $stderr
- @io.sync = true
+ unless @io
+ @io = $stderr
+ @io.sync = true
+ end
@io
end
def io_tty?
io.tty? || ENV['PROGRESS_TTY']
@@ -127,32 +129,48 @@
def highlight?
@highlight.nil? ? io_tty? : @highlight
end
- def print_message
- messages = []
- inner = 0
- levels.reverse.each do |l|
- current = l.to_f(inner)
- value = current == 0 ? '......' : '%5.1f%%' % (current * 100.0)
- messages << "#{l.title}: #{!highlight? || value == '100.0%' ? value : "\e[1m#{value}\e[0m"}"
- inner = current
- end
- message = messages.reverse * ' > '
-
- unless lines?
- previous_length = @previous_length || 0
- message_cl = if highlight?
- message.gsub(/\033\[(0|1)m/, '')
+ def time_to_print?
+ if @previous
+ if @previous < Time.now - 0.3
+ @previous = Time.now
+ true
else
- message
+ false
end
- @previous_length = message_cl.length
- message = "#{message}#{' ' * [previous_length - message_cl.length, 0].max}\r"
+ else
+ @previous = Time.now
+ true
end
+ end
- lines? ? io.puts(message) : io.print(message)
+ def print_message(force = false)
+ if force || time_to_print?
+ messages = []
+ inner = 0
+ levels.reverse.each do |l|
+ current = l.to_f(inner)
+ value = current == 0 ? '......' : '%5.1f%%' % (current * 100.0)
+ messages << "#{l.title}: #{!highlight? || value == '100.0%' ? value : "\e[1m#{value}\e[0m"}"
+ inner = current
+ end
+ message = messages.reverse * ' > '
+
+ unless lines?
+ previous_length = @previous_length || 0
+ message_cl = if highlight?
+ message.gsub(/\033\[(0|1)m/, '')
+ else
+ message
+ end
+ @previous_length = message_cl.length
+ message = "#{message}#{' ' * [previous_length - message_cl.length, 0].max}\r"
+ end
+
+ lines? ? io.puts(message) : io.print(message)
+ end
end
end
end
require 'progress/with_progress'