Class: FactoryGirlProfiling::Profiler
- Inherits:
-
Object
- Object
- FactoryGirlProfiling::Profiler
- Defined in:
- lib/factory_girl_profiling/profiler.rb
Instance Attribute Summary collapse
Class Method Summary collapse
Instance Method Summary collapse
- #add(name, start, finish, id, payload) ⇒ Object
- #add_counting(name, strategy) ⇒ Object
- #add_timing(name, strategy, timing) ⇒ Object
-
#initialize ⇒ Profiler
constructor
A new instance of Profiler.
- #output_string(str) ⇒ Object
- #print_counting_results ⇒ Object
- #print_results ⇒ Object
- #print_timing_results ⇒ Object
- #reset ⇒ Object
- #sort_data_hash(hash, sort_value_proc = nil) ⇒ Object
Constructor Details
#initialize ⇒ Profiler
Returns a new instance of Profiler.
16 17 18 |
# File 'lib/factory_girl_profiling/profiler.rb', line 16 def initialize reset end |
Instance Attribute Details
#output_buffer ⇒ Object
84 85 86 |
# File 'lib/factory_girl_profiling/profiler.rb', line 84 def output_buffer @output_buffer ||= $stdout end |
Class Method Details
.instance ⇒ Object
4 5 6 |
# File 'lib/factory_girl_profiling/profiler.rb', line 4 def self.instance @instance ||= new end |
Instance Method Details
#add(name, start, finish, id, payload) ⇒ Object
25 26 27 28 |
# File 'lib/factory_girl_profiling/profiler.rb', line 25 def add(name, start, finish, id, payload) add_counting(payload[:name], payload[:strategy]) add_timing(payload[:name], payload[:strategy], finish - start) end |
#add_counting(name, strategy) ⇒ Object
41 42 43 44 45 |
# File 'lib/factory_girl_profiling/profiler.rb', line 41 def add_counting(name, strategy) @factory_girl_results[name] ||= {} @factory_girl_results[name][strategy] ||= 0 @factory_girl_results[name][strategy] += 1 end |
#add_timing(name, strategy, timing) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/factory_girl_profiling/profiler.rb', line 30 def add_timing(name, strategy, timing) @factory_girl_timing_results[name] ||= {} @factory_girl_timing_results[name][strategy] ||= [] @factory_girl_timing_results[name][strategy] << timing #if timing >= 0.5 #output_string "Slow factory: #{name} using strategy #{strategy}" #end end |
#output_string(str) ⇒ Object
79 80 81 |
# File 'lib/factory_girl_profiling/profiler.rb', line 79 def output_string(str) output_buffer.puts str end |
#print_counting_results ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'lib/factory_girl_profiling/profiler.rb', line 52 def print_counting_results output_string 'FactoryGirl counting:' sort_data_hash(@factory_girl_results).each do |factory, values| counts_for_strategies = values.inject([]){|s, (strategy, count)| s << "#{strategy} = #{count}"} output_string "#{"#{factory}:".ljust(30)} #{"%15s \t" * counts_for_strategies.size}" % counts_for_strategies end output_string "\n" end |
#print_results ⇒ Object
47 48 49 50 |
# File 'lib/factory_girl_profiling/profiler.rb', line 47 def print_results print_counting_results print_timing_results end |
#print_timing_results ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/factory_girl_profiling/profiler.rb', line 61 def print_timing_results output_string 'FactoryGirl timing:' sort_value_proc = ->(val) { val.values.map{|e| e.reduce(0, &:+)}.reduce(0, &:+) / val.values.map(&:size).reduce(0, &:+) } sort_data_hash(@factory_girl_timing_results, sort_value_proc).each do |factory, data| output_string factory data.each do |strategy, times| output_string "#{"#{strategy}:".ljust(10)} avg=#{(times.reduce(0, &:+) / times.size).round(2)} \t(min=#{times.min.round(2)},\tmax=#{times.max.round(2)})" end output_string "" end output_string "\n" end |
#reset ⇒ Object
20 21 22 23 |
# File 'lib/factory_girl_profiling/profiler.rb', line 20 def reset @factory_girl_results = {} @factory_girl_timing_results = {} end |
#sort_data_hash(hash, sort_value_proc = nil) ⇒ Object
74 75 76 77 |
# File 'lib/factory_girl_profiling/profiler.rb', line 74 def sort_data_hash(hash, sort_value_proc = nil) sort_value_proc ||= Proc.new {|val| val.values.reduce(0, &:+) } hash.to_a.sort {|(_, v1), (_, v2)| sort_value_proc.call(v2) <=> sort_value_proc.call(v1)} end |