class RspecLogFormatter::Analysis::Score

Attributes

failure_messages[RW]
failures[RW]
max_reruns[R]
runs[RW]

Public Class Methods

new(desc, opts={}) click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 4
def initialize(desc, opts={})
  @description = desc
  @runs = 0
  @failures = 0
  @failure_messages = []
  @last_fail_time = Time.at(0)
  @last_pass_time = Time.at(0)
  @max_reruns = opts[:max_reruns]
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 26
def <=>(other)
  if max_reruns
    other.cost <=> cost
  else
    other.fraction <=> fraction
  end
end
absorb(result) click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 38
def absorb(result)
  if result.failure? && result.time > @last_fail_time
    @last_fail_time = result.time
    @fail_duration = result.duration
  elsif result.success? && result.time > @last_pass_time
    @last_pass_time = result.time
    @pass_duration = result.duration
  end
end
as_hash() click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 48
def as_hash
  h = {
    description: @description,
    fraction: fraction,
    failure_messages: failure_messages,
  }
  if max_reruns
    h.merge!({cost: cost})
  end
  h
end
cost() click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 18
def cost
  sum = 0.0
  0.upto(max_reruns) do |i|
    sum += (fraction**i)*(1.0-fraction)*(i*@fail_duration + @pass_duration)
  end
  sum + (fraction**(max_reruns+1.0))*@fail_duration
end
flaky?() click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 34
def flaky?
  fraction > 0.0
end
fraction() click to toggle source
# File lib/rspec_log_formatter/analysis/score.rb, line 14
def fraction
  @failures.to_f/@runs
end