Sha256: 594babd5282a2bf3868427a5d50ebc7f39eebe3905b38a047b9edc114160f171

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

require 'mspec/expectations/expectations'
require 'mspec/runner/formatters/dotted'

class SpinnerFormatter < DottedFormatter
  attr_reader :length

  Spins = %w!| / - \\!
  HOUR = 3600
  MIN = 60

  def initialize(out=nil)
    @out = $stdout

    @states = []
    @which = 0
    @count = 0
    self.length = 40
    @percent = 0
    @start = Time.now

    term = ENV['TERM']
    @color = (term != "dumb")
    @fail_color  = "32"
    @error_color = "32"
  end

  def register
    super

    MSpec.register :start, self
    MSpec.register :load, self
  end

  def length=(length)
    @length = length
    @ratio = 100.0 / length
    @position = length / 2 - 2
  end

  def etr
    return "00:00:00" if @percent == 0
    elapsed = Time.now - @start
    remain = (100 * elapsed / @percent) - elapsed

    hour = remain >= HOUR ? (remain / HOUR).to_i : 0
    remain -= hour * HOUR
    min = remain >= MIN ? (remain / MIN).to_i : 0
    sec = remain - min * MIN

    "%02d:%02d:%02d" % [hour, min, sec]
  end

  def percentage
    @percent = @count * 100 / @total
    bar = ("=" * (@percent / @ratio)).ljust @length
    label = "%d%%" % @percent
    bar[@position, label.size] = label
    bar
  end

  def spin
    @which = (@which + 1) % Spins.size
    if @color
      print "\r[%s | %s | %s] \033[0;#{@fail_color}m%6dF \033[0;#{@error_color}m%6dE\033[0m" %
          [Spins[@which], percentage, etr, @counter.failures, @counter.errors]
    else
      print "\r[%s | %s | %s] %6dF %6dE" %
          [Spins[@which], percentage, etr, @counter.failures, @counter.errors]
    end
  end

  def start
    @total = MSpec.retrieve(:files).size
  end

  def load
    @count += 1
  end

  def after(state)
    if state.exception?
      @fail_color =  "31" if @counter.failures > 0
      @error_color = "33" if @counter.errors > 0
      @states << state
    end

    spin
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mspec-1.0.0 lib/mspec/runner/formatters/spinner.rb
mspec-1.1.0 lib/mspec/runner/formatters/spinner.rb
mspec-1.1.1 lib/mspec/runner/formatters/spinner.rb