| Total Complexity | 0 |
| Total Lines | 75 |
| Duplicated Lines | 0 % |
| Changes | 9 | ||
| Bugs | 0 | Features | 0 |
| 1 | require 'forwardable' |
||
| 4 | class Profiler |
||
| 5 | class Entries |
||
| 6 | extend Forwardable |
||
| 7 | |||
| 8 | def_delegators :storage, :size |
||
| 9 | def_delegators :to_a, :each |
||
| 10 | |||
| 11 | def initialize(groups = []) |
||
| 12 | @storage = Hash.new |
||
| 13 | groups.each { |group| append_group(group) } |
||
| 14 | end |
||
| 15 | |||
| 16 | def append(name, time) |
||
| 17 | group = find_by_name(name) || create_group(name) |
||
| 18 | append_to_group(group, name, time) |
||
| 19 | end |
||
| 20 | |||
| 21 | def find_by_name(name) |
||
| 22 | storage[name.to_s] |
||
| 23 | end |
||
| 24 | |||
| 25 | def elapsed_time |
||
| 26 | storage.inject(0) do |total, (_key, group)| |
||
| 27 | total + group.elapsed_time |
||
| 28 | end |
||
| 29 | end |
||
| 30 | |||
| 31 | def sort_by(&_block) |
||
| 32 | sorted = storage.sort_by { |item| yield(item[1]) }.map {|_key, group| group } |
||
| 33 | create(sorted) |
||
| 34 | end |
||
| 35 | |||
| 36 | def reverse |
||
| 37 | create(storage.to_a.reverse.map { |_key, group| group }) |
||
| 38 | end |
||
| 39 | |||
| 40 | def slowest |
||
| 41 | sort_by(&:elapsed_time).reverse |
||
| 42 | end |
||
| 43 | |||
| 44 | def to_a |
||
| 45 | storage.values |
||
| 46 | end |
||
| 47 | |||
| 48 | def limit(number) |
||
| 49 | create(to_a.slice(0, number.to_i)) |
||
| 50 | end |
||
| 51 | |||
| 52 | def ==(other) |
||
| 53 | storage.to_a == other.storage.to_a |
||
| 54 | end |
||
| 55 | |||
| 56 | private |
||
| 57 | |||
| 58 | def create(groups = []) |
||
| 59 | self.class.new(groups) |
||
| 60 | end |
||
| 61 | |||
| 62 | def create_group(name) |
||
| 63 | append_group(EntryGroup.new(name)) |
||
| 64 | end |
||
| 65 | |||
| 66 | def append_group(group) |
||
| 67 | storage[group.name] = group |
||
| 68 | end |
||
| 69 | |||
| 70 | def append_to_group(group, name, time) |
||
| 71 | group.append(Entry.new(name, time)) |
||
| 72 | end |
||
| 73 | |||
| 74 | protected |
||
| 75 | |||
| 76 | attr_reader :storage |
||
| 77 | end |
||
| 78 | end |
||
| 79 | end |
||
| 80 |