Class: SpinnerFormatter

Inherits:
DottedFormatter show all
Defined in:
lib/extensions/mspec/mspec/runner/formatters/spinner.rb

Constant Summary collapse

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

Instance Attribute Summary collapse

Attributes inherited from DottedFormatter

#exceptions, #tally, #timer

Instance Method Summary collapse

Methods inherited from DottedFormatter

#abort, #before, #exception?, #failure?, #finish, #print

Constructor Details

#initialize(out = nil) ⇒ SpinnerFormatter

Returns a new instance of SpinnerFormatter.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 11

def initialize(out=nil)
  @exception = @failure = false
  @exceptions = []
  @count = 0
  @out = $stdout

  @which = 0
  @loaded = 0
  self.length = 40
  @percent = 0
  @start = Time.now

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

Instance Attribute Details

#lengthObject

Returns the value of attribute length.



5
6
7
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 5

def length
  @length
end

Instance Method Details

#after(state) ⇒ Object

Callback for the MSpec :after event. Updates the spinner and progress bar.



96
97
98
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 96

def after(state)
  spin
end

#etrObject



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 42

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

#exception(exception) ⇒ Object

Callback for the MSpec :exception event. Changes the color used to display the tally of errors and failures



88
89
90
91
92
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 88

def exception(exception)
  super
  @fail_color =  "31" if exception.failure?
  @error_color = "33" unless exception.failure?
end

#loadObject

Callback for the MSpec :load event. Increments the number of files that have been loaded.



82
83
84
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 82

def load
  @loaded += 1
end

#percentageObject



55
56
57
58
59
60
61
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 55

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

#registerObject



29
30
31
32
33
34
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 29

def register
  super

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

#spinObject



63
64
65
66
67
68
69
70
71
72
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 63

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

#startObject

Callback for the MSpec :start event. Stores the total number of files that will be processed.



76
77
78
# File 'lib/extensions/mspec/mspec/runner/formatters/spinner.rb', line 76

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