class TestDiff::Storage

class used to build the coverage file

Attributes

folder[R]

Public Class Methods

new(folder = 'test_diff_coverage', execution_times = ExecutionTimes.new('test_diff_coverage')) click to toggle source
# File lib/test_diff/storage.rb, line 8
def initialize(folder = 'test_diff_coverage',
               execution_times = ExecutionTimes.new('test_diff_coverage'))
  @folder = folder
  @execution_times = execution_times
  @preload_name = '_preload_'
end

Public Instance Methods

clear() click to toggle source
# File lib/test_diff/storage.rb, line 73
def clear
  Dir["#{@folder}/**/*.yml"].each do |storage_file|
    File.delete(storage_file)
  end
end
find_for(files, sub_folder = nil) click to toggle source
# File lib/test_diff/storage.rb, line 49
def find_for(files, sub_folder = nil)
  results = []
  each_file(sub_folder) do |storage_file|
    find_for_storage_file(results, storage_file, files)
  end
  results
end
get(file) click to toggle source
# File lib/test_diff/storage.rb, line 39
def get(file)
  get_store(file).transaction(true) do |store|
    coverage_data = {}
    store.roots.each do |key|
      coverage_data[key] = store[key]
    end
    coverage_data
  end
end
preload=(coverage_data) click to toggle source
# File lib/test_diff/storage.rb, line 15
def preload=(coverage_data)
  raise 'Data must be a Hash' unless coverage_data.is_a?(Hash)
  get_store(@preload_name).transaction do |store|
    store.roots.each do |key|
      store.delete(key)
    end
    coverage_data.keys.sort.each do |key|
      store[key] = coverage_data[key]
    end
  end
end
select_tests_for(files, sub_folder = nil) click to toggle source
# File lib/test_diff/storage.rb, line 57
def select_tests_for(files, sub_folder = nil)
  results = []
  preload_files = preload_found_files(files)
  each_file(sub_folder) do |storage_file|
    next if storage_file.include?(@preload_name)
    if preload_files.any? || found_files(storage_file, files).any?
      results << TestInfo.new(storage_file, @execution_times[storage_file])
    end
  end
  results
end
set(file, coverage_data) click to toggle source
# File lib/test_diff/storage.rb, line 27
def set(file, coverage_data)
  raise 'Data must be a Hash' unless coverage_data.is_a?(Hash)
  get_store(file).transaction do |store|
    store.roots.each do |key|
      store.delete(key)
    end
    coverage_data.keys.sort.each do |key|
      store[key] = coverage_data[key]
    end
  end
end
test_info_for(file) click to toggle source
# File lib/test_diff/storage.rb, line 69
def test_info_for(file)
  TestInfo.new(file, @execution_times[file])
end

Private Instance Methods

each_file(sub_folder = nil) { |gsub("#{folder}/", '').gsub('.yml', '')| ... } click to toggle source
# File lib/test_diff/storage.rb, line 109
def each_file(sub_folder = nil)
  root_folder = @folder
  root_folder += "/#{sub_folder}" if sub_folder
  Dir["#{root_folder}/**/*.yml"].sort.each do |full_storage_file|
    yield full_storage_file.gsub("#{@folder}/", '').gsub('.yml', '')
  end
end
find_for_storage_file(results, storage_file, files) click to toggle source
# File lib/test_diff/storage.rb, line 93
def find_for_storage_file(results, storage_file, files)
  get_store(storage_file).transaction(true) do |store|
    found_files = files & store.roots
    found_files.each do |_file|
      results << storage_file.gsub('.yml', '').gsub("#{@folder}/", '')
    end
  end
end
found_files(storage_file, files) click to toggle source
# File lib/test_diff/storage.rb, line 81
def found_files(storage_file, files)
  get_store(storage_file).transaction(true) do |store|
    files & store.roots
  end
end
get_store(file) click to toggle source
# File lib/test_diff/storage.rb, line 102
def get_store(file)
  dir = File.dirname("#{@folder}/#{file}")
  filename = File.basename(file) + '.yml'
  FileUtils.mkdir_p(dir)
  YAML::Store.new "#{dir}/#{filename}"
end
preload_found_files(files) click to toggle source
# File lib/test_diff/storage.rb, line 87
def preload_found_files(files)
  get_store(@preload_name).transaction(true) do |store|
    files & store.roots
  end
end