Sha256: b2fdaca7e55f74342ce3d79d676289fee28b655e77749612f48d54121f98ebf8

Contents?: true

Size: 988 Bytes

Versions: 11

Compression:

Stored size: 988 Bytes

Contents

# frozen_string_literal: true

module DeepCover
  bootstrap

  # Should be seen as a hash like {path => tracker_hits, ...},
  # where tracker_hits is simply an array of integers returned from
  # TrackerStorage#tracker_hits.
  # Make it easier to separate some concerns, as well as marshalling.
  #
  class TrackerHitsPerPath
    extend Forwardable
    def_delegators :@index, :each, :each_key, :map, :transform_values, :to_h, :to_hash

    def initialize(index = {})
      @index = index
    end

    def [](val)
      @index[val] ||= []
    end

    def merge!(tracker_hits_per_path)
      @index.merge!(tracker_hits_per_path) { |_h, actual, to_merge| merge_tracker_hits(actual, to_merge) }
      self
    end

    private def merge_tracker_hits(hits, to_merge)
      unless hits.size == to_merge.size
        raise "Attempting to merge trackers of different sizes: #{hits.size} vs #{to_merge.size}"
      end
      hits.map!.with_index { |val, i| val + to_merge[i] }
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
deep-cover-core-0.6.4 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-core-0.6.3 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-core-0.6.3.pre lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.6.2 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.6.1 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.6.0 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.5.7 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.5.6 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.5.5 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.5.4 lib/deep_cover/tracker_hits_per_path.rb
deep-cover-0.5.3 lib/deep_cover/tracker_hits_per_path.rb