Sha256: 0a4a0ca4508ca0955882f7d229f7cf0840ca514b428f48358b8823066881b2b1

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

module Cucover
  class Store
    def initialize(cache = DiskCache.new)
      @cache = cache
    end
    
    def latest_recordings
      recordings.keys.map{ |file_colon_line| latest_recording(file_colon_line) }
    end
  
    def latest_recording(file_colon_line)
      recordings[file_colon_line].sort{ |x, y| x.end_time <=> y.end_time }.last
    end
  
    def keep!(recording_data)
      Cucover.logger.debug("Storing recording of #{recording_data.file_colon_line}")
      recordings[recording_data.file_colon_line] << recording_data
      @cache.save(@recordings)
    end
  
    def recordings_covering(source_file)
      latest_recordings.select { |r| r.covers_file?(source_file) }
    end
  
    def recordings
      ensure_recordings_loaded!
      @recordings
    end
  
    private
  
    def ensure_recordings_loaded!
      return if @recordings
      
      if @recordings = @cache.load
        Cucover.logger.debug("Loaded #{@recordings.length} recording(s)")
      else
        Cucover.logger.debug("Starting with no existing coverage data.")
        @recordings = Recordings.new
      end
    end
    
    class Recordings < Hash
      def [](key)
        self[key] = [] if super.nil?
        super
      end        
    end
    
    class DiskCache
      def save(recordings)
        Cucover.logger.debug("Saving #{recordings.length} recording(s) to #{data_file}")
        File.open(data_file, 'w') { |f| f.puts Marshal.dump(recordings) }
      end
      
      def load
        return unless File.exists?(data_file)
        
        Cucover.logger.debug("Reading existing coverage data from #{data_file}")
        File.open(data_file) { |f| Marshal.load(f) }
      end
      
      private
      
      def data_file
        Dir.pwd + '/cucover.data'
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mattwynne-cucover-0.1.0 lib/cucover/store.rb
mattwynne-cucover-0.1.1 lib/cucover/store.rb