Class: ProfileFormatter

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

Instance Attribute Summary

Attributes inherited from DottedFormatter

#exceptions, #tally, #timer

Instance Method Summary collapse

Methods inherited from DottedFormatter

#abort, #exception, #exception?, #failure?, #print

Constructor Details

#initialize(out = nil) ⇒ ProfileFormatter

Returns a new instance of ProfileFormatter.



5
6
7
8
9
10
11
12
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 5

def initialize(out=nil)
  super

  @describe_name = nil
  @describe_time = nil
  @describes = []
  @its = []
end

Instance Method Details

#after(state) ⇒ Object

Callback for the MSpec :after event. Prints a newline to finish the description string output.



41
42
43
44
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 41

def after(state)
  @its << [@describe_name, @it_name, Time.now.to_f - @it_time]
  super
end

#before(state) ⇒ Object

Callback for the MSpec :before event. Prints the it block string.



32
33
34
35
36
37
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 32

def before(state)
  super

  @it_name = state.it
  @it_time = Time.now.to_f
end

#enter(describe) ⇒ Object

Callback for the MSpec :enter event. Prints the describe block string.



21
22
23
24
25
26
27
28
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 21

def enter(describe)
  if @describe_time
    @describes << [@describe_name, Time.now.to_f - @describe_time]
  end

  @describe_name = describe
  @describe_time = Time.now.to_f
end

#finishObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 46

def finish
  puts "\nProfiling info:"

  desc = @describes.sort { |a,b| b.last <=> a.last }
  desc.delete_if { |a| a.last <= 0.001 }
  show = desc[0, 100]

  puts "Top #{show.size} describes:"

  show.each do |des, time|
    printf "%3.3f - %s\n", time, des
  end

  its = @its.sort { |a,b| b.last <=> a.last }
  its.delete_if { |a| a.last <= 0.001 }
  show = its[0, 100]

  puts "\nTop #{show.size} its:"
  show.each do |des, it, time|
    printf "%3.3f - %s %s\n", time, des, it
  end

  super
end

#registerObject



14
15
16
17
# File 'lib/extensions/mspec/mspec/runner/formatters/profile.rb', line 14

def register
  super
  MSpec.register :enter, self
end