class QuickRspec

Public Class Methods

collect_stats(example) click to toggle source
# File lib/quick-rspec.rb, line 18
def collect_stats(example)
  spec = "#{example.metadata[:rerun_file_path]}[#{example.metadata[:scoped_id]}]"
  root = Rails.root.to_s
  result = {}
  cover = Coverage.peek_result
  cover.each do |path, coverage|
    next unless path =~ %r{^#{Regexp.escape(root)}\/(app|lib|config)\/.*\.rb}i
    last_cover = @@last_cover[path]
    next if coverage == last_cover
    coverage = coverage.each_with_index.map.map do |count, index|
      index unless last_cover.present? && count == last_cover[index]
    end.compact
    next unless coverage.any?
    path = QuickRspec.relevant_path(path)
    result[path] = coverage
  end
  @@coverage[spec] = result
  @@last_cover = cover
end
load_stats() click to toggle source
# File lib/quick-rspec.rb, line 43
def load_stats
  @@coverage = begin
                 JSON.parse(File.read(Rails.root.join('tmp/quick_rspec.new.json')))
               rescue Errno::ENOENT, JSON::ParserError
                 begin
                   JSON.parse(File.read(Rails.root.join('tmp/quick_rspec.json')))
                 rescue Errno::ENOENT, JSON::ParserError
                   {}
                 end
               end
end
on_exit() click to toggle source
# File lib/quick-rspec.rb, line 84
def on_exit
  QuickRspec.save_stats
end
relevant_path(path) click to toggle source
# File lib/quick-rspec.rb, line 38
def relevant_path(path)
  path = Rails.root.join(path).to_s
  path[Rails.root.to_s.length + 1..-1]
end
save_stats() click to toggle source
# File lib/quick-rspec.rb, line 55
def save_stats
  new_coverage = @@coverage
  load_stats()
  new_coverage.each do |spec, coverage|
    @@coverage[spec] = coverage
  end
  dir = Rails.root.join('tmp')
  FileUtils.mkdir_p(dir) unless File.directory?(dir)
  File.open(Rails.root.join('tmp/quick_rspec.new.json'), 'w+') do |f|
    f.write @@coverage.to_json
  end
  File.open(Rails.root.join('tmp/quick_rspec.stats'), 'w+') do |f|
    @@coverage.each do |spec_name, coverage|
      f.write "#{spec_name}:\n"
      coverage.each do |path, lines|
        f.write "  #{path}:\n"
        f.write "    #{lines}\n"
      end
    end
  end
end
start() click to toggle source
# File lib/quick-rspec.rb, line 14
def start
  Coverage.start
end
where_tested(file) click to toggle source
# File lib/quick-rspec.rb, line 77
def where_tested(file)
  @@coverage.map do |spec, coverage|
    next unless file.in? coverage.keys
    spec
  end.compact
end