Class: SpecMarker

Inherits:
RSpec::Core::Formatters::BaseFormatter
  • Object
show all
Defined in:
lib/spec_marker.rb

Constant Summary collapse

VERSION =
"0.0.3"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ SpecMarker

Returns a new instance of SpecMarker.



36
37
38
39
# File 'lib/spec_marker.rb', line 36

def initialize(*args)
  super
  @marks = []
end

Class Method Details

._join(formatter) ⇒ Object



26
27
28
29
# File 'lib/spec_marker.rb', line 26

def _join(formatter)
  @listeners ||= []
  @listeners << formatter unless @listeners.include?(formatter)
end

._leave(formatter) ⇒ Object



31
32
33
# File 'lib/spec_marker.rb', line 31

def _leave(formatter)
  (@listeners ||= []).delete formatter
end

.mark(tag, meta_or_kind = {}, kind = nil, meta_for_search = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/spec_marker.rb', line 9

def mark(tag, meta_or_kind={}, kind=nil, meta_for_search=nil)
  if block_given?
    begin
      mark(tag, meta_or_kind, :start)
      return yield
    ensure
      mark(tag, meta_or_kind, :end)
    end
  else
    @listeners ||= []
    @listeners.each do |listener|
      listener.mark(tag, meta_or_kind, kind, meta_for_search)
    end
    self
  end
end

Instance Method Details

#example_failed(example) ⇒ Object



94
95
96
97
# File 'lib/spec_marker.rb', line 94

def example_failed(example)
  super
  mark :example, example_meta(example, :failed), :end, example_meta(example)
end

#example_group_finished(group) ⇒ Object



99
100
101
102
# File 'lib/spec_marker.rb', line 99

def example_group_finished(group)
  super
  mark :example_group, example_group_meta(group), :end
end

#example_group_started(group) ⇒ Object



74
75
76
77
# File 'lib/spec_marker.rb', line 74

def example_group_started(group)
  super
  mark :example_group, example_group_meta(group), :start
end

#example_passed(example) ⇒ Object



84
85
86
87
# File 'lib/spec_marker.rb', line 84

def example_passed(example)
  super
  mark :example, example_meta(example, :passed), :end, example_meta(example)
end

#example_pending(example) ⇒ Object



89
90
91
92
# File 'lib/spec_marker.rb', line 89

def example_pending(example)
  super
  mark :example, example_meta(example, :pending), :end, example_meta(example)
end

#example_started(example) ⇒ Object



79
80
81
82
# File 'lib/spec_marker.rb', line 79

def example_started(example)
  super
  mark :example, example_meta(example), :start
end

#mark(tag, meta_or_kind = {}, kind = nil, meta_for_search = nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/spec_marker.rb', line 53

def mark(tag, meta_or_kind={}, kind=nil, meta_for_search=nil)
  if meta_or_kind.is_a?(Hash)
    meta = meta_or_kind
  elsif kind.nil? && meta_or_kind.is_a?(Symbol)
    meta = {}
    kind = meta_or_kind
  end


  m = {:tag => tag, :at => Time.now.to_f, :meta => meta, :kind => kind}
  if kind == :end
    start = @marks.reverse_each.find { |mark| mark[:kind] == :start && mark[:tag] == tag && mark[:meta] == (meta_for_search || meta)}
    if start
      m[:elapsed] = m[:at] - start[:at]
    end
  end

  @marks << m
  output.puts "[#{tag}#{kind && ":#{kind}"}][#{"%.5f" % m[:at]}#{m[:elapsed] && (" (%.5f)" % m[:elapsed])}] #{m.to_json}"
end

#start(example_count) ⇒ Object



41
42
43
44
45
# File 'lib/spec_marker.rb', line 41

def start(example_count)
  super
  self.class._join(self)
  mark :suite, :start
end

#stopObject



47
48
49
50
51
# File 'lib/spec_marker.rb', line 47

def stop
  super
  self.class._leave(self)
  mark :suite, :end
end