class FactoryFaster::DataStore

Each row looks like this: filename|md5 hash|lines to skip test/unit/foo_test.rb|abcdefabcde|5,12,19,20

Attributes

records[R]
store_file[R]

Public Class Methods

new(filename) click to toggle source
# File lib/factory_faster/data_store.rb, line 12
def initialize(filename)
  @store_file = filename
  load
end

Public Instance Methods

set(filename, skips) click to toggle source
# File lib/factory_faster/data_store.rb, line 17
def set(filename, skips)
  @records[filename] = [signature_for(filename),skips]
  store
end
skips_for(filename) click to toggle source
# File lib/factory_faster/data_store.rb, line 22
def skips_for(filename)
  (!@records[filename].nil? && !@records[filename][1].nil?) ? @records[filename][1] : []
end
unchanged?(filename) click to toggle source
# File lib/factory_faster/data_store.rb, line 26
def unchanged?(filename)
  !@records[filename].nil? && @records[filename][0] == signature_for(filename)
end

Private Instance Methods

load() click to toggle source

in memory data structure is test/unit/foo_test.rb => [abcdefabcde, [5,12,19.20]]

# File lib/factory_faster/data_store.rb, line 46
def load
  @records = {}
  File.readlines(store_file).each do |line|
    fields = line.split("|")
    filename = fields[0]
    signature = fields[1]
    skips = !fields[2].nil? ? fields[2].split(',').map(&:to_i) : []
    @records[filename] = [signature, skips]
  end unless !File.exists?(store_file)
end
signature_for(filename) click to toggle source
# File lib/factory_faster/data_store.rb, line 32
def signature_for(filename)
  Digest::MD5.hexdigest(File.read(filename))
end
store() click to toggle source
# File lib/factory_faster/data_store.rb, line 36
def store
  File.open(store_file, "w") do |f|
    @records.each do |filename, data|
      f.syswrite("#{filename}|#{data[0]}|#{data[1].join(',')}\n")
    end
  end
end