Class: CucumberTimingPresenter::UsageRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/cucumber_timing_presenter/usage_record.rb

Instance Method Summary collapse

Constructor Details

#initializeUsageRecord

Returns a new instance of UsageRecord.



3
4
5
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 3

def initialize
  @record = Hash.new
end

Instance Method Details

#allObject



29
30
31
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 29

def all
  @record
end

#average_times_plot_dataObject



49
50
51
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 49

def average_times_plot_data
  @record.map {|step_name, data| data[:average].to_f}.sort.reverse
end

#calculateObject



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 16

def calculate
  @record.each do |key, usage|
    usage[:total] = usage[:instances].inject{|sum,x| sum + x }
    usage[:occurances] = usage[:instances].count
    usage[:average] = usage[:total].to_f / usage[:occurances].to_f
    usage[:fastest] = usage[:instances].sort.first
    usage[:slowest] = usage[:instances].sort.last
    usage[:variation] = usage[:slowest] - usage[:fastest]
    usage[:variance] = self.sample_variance usage[:instances]
    usage[:standard_deviation] = self.standard_deviation usage[:variance]
  end
end

#greatest_variationObject



45
46
47
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 45

def greatest_variation
  sort_by_property(:variation).reverse.first
end

#highest_averageObject



37
38
39
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 37

def highest_average
  sort_by_property(:average).reverse.first
end

#highest_elapsed_timeObject



41
42
43
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 41

def highest_elapsed_time
  sort_by_property(:total).reverse.first
end

#record(step_name, duration) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 7

def record step_name, duration
  result = @record[step_name]
  result ||= Hash.new
  result[:instances] ||= []
  result[:instances] << duration

  @record[step_name] ||= result
end

#sample_variance(data) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 65

def sample_variance data
  occurances = data.count
  average = data.inject{|sum,x| sum + x } / occurances.to_f

  return nil if occurances <= 1
  
  sum = data.inject(0){|acc,i|acc.to_f + (i.to_f - average)**2.0}

  return 1 / (occurances.to_f - 1.0) * sum.to_f
end

#sort_by_property(property) ⇒ Object



33
34
35
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 33

def sort_by_property property
  @record.sort {|a,b| a.last[property.to_sym] <=> b.last[property.to_sym]}
end

#standard_deviation(sample_variance) ⇒ Object



76
77
78
79
80
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 76

def standard_deviation sample_variance
  return nil if sample_variance.nil?
  
  return Math.sqrt(sample_variance)
end

#step_part_of_totalObject



57
58
59
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 57

def step_part_of_total
  @record.map {|step_name, data| data[:total]}.sort.reverse
end

#total_elapsed_timeObject



61
62
63
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 61

def total_elapsed_time
  @record.map {|step_name, data| data[:total]}.inject{|sum,x| sum + x }
end

#total_times_plot_dataObject



53
54
55
# File 'lib/cucumber_timing_presenter/usage_record.rb', line 53

def total_times_plot_data
  sort_by_property(:average).reverse.map {|step_name, data| data[:total].to_f}
end