class Coverband::Collectors::Coverage

StandardError seems like be better option coverband previously had RuntimeError here but runtime error can let a large number of error crash this method and this method is currently in a ensure block in middleware and threads

Public Class Methods

new() click to toggle source
# File lib/coverband/collectors/coverage.rb, line 70
def initialize
  @semaphore = Mutex.new
  raise NotImplementedError, "Coverage needs Ruby > 2.3.0" if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.3.0")

  require "coverage"
  if RUBY_PLATFORM == "java"
    unless ::Coverage.respond_to?(:line_stub)
      require "coverband/utils/jruby_ext"
    end
  end
  if defined?(SimpleCov) && defined?(Rails) && defined?(Rails.env) && Rails.env.test?
    puts "Coverband: detected SimpleCov in test Env, allowing it to start Coverage"
    puts "Coverband: to ensure no error logs or missing Coverage call `SimpleCov.start` prior to requiring Coverband"
  else
    if Coverage.ruby_version_greater_than_or_equal_to?("2.6.0")
      ::Coverage.start(oneshot_lines: Coverband.configuration.use_oneshot_lines_coverage) unless ::Coverage.running?
    elsif Coverage.ruby_version_greater_than_or_equal_to?("2.5.0")
      ::Coverage.start unless ::Coverage.running?
    else
      ::Coverage.start
    end
  end
  reset_instance
end
ruby_version_greater_than_or_equal_to?(version) click to toggle source
# File lib/coverband/collectors/coverage.rb, line 17
def self.ruby_version_greater_than_or_equal_to?(version)
  Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(version)
end

Public Instance Methods

eager_loading() { || ... } click to toggle source
# File lib/coverband/collectors/coverage.rb, line 40
def eager_loading
  old_coverage_type = @store.type
  eager_loading!
  yield
ensure
  report_coverage
  @store.type = old_coverage_type
end
eager_loading!() click to toggle source
# File lib/coverband/collectors/coverage.rb, line 36
def eager_loading!
  @store.type = Coverband::EAGER_TYPE
end
report_coverage() click to toggle source
# File lib/coverband/collectors/coverage.rb, line 49
def report_coverage
  @semaphore.synchronize do
    raise "no Coverband store set" unless @store

    files_with_line_usage = filtered_files(Delta.results)
    @store.save_report(files_with_line_usage)
  end
rescue => e
  @logger&.error "coverage failed to store"
  @logger&.error "Coverband Error: #{e.inspect} #{e.message}"
  e.backtrace.each { |line| @logger&.error line } if @verbose
  raise e if @test_env
end
reset_instance() click to toggle source
# File lib/coverband/collectors/coverage.rb, line 21
def reset_instance
  @project_directory = File.expand_path(Coverband.configuration.root)
  @ignore_patterns = Coverband.configuration.ignore
  @store = Coverband.configuration.store
  @verbose = Coverband.configuration.verbose
  @logger = Coverband.configuration.logger
  @test_env = Coverband.configuration.test_env
  Delta.reset
  self
end
runtime!() click to toggle source
# File lib/coverband/collectors/coverage.rb, line 32
def runtime!
  @store.type = Coverband::RUNTIME_TYPE
end

Private Instance Methods

filtered_files(new_results) click to toggle source
# File lib/coverband/collectors/coverage.rb, line 65
def filtered_files(new_results)
  new_results.select! { |_file, coverage| coverage.any? { |value| value&.nonzero? } }
  new_results
end