Module: DeepCover::Base

Included in:
DeepCover
Defined in:
lib/deep_cover/base.rb

Instance Method Summary collapse

Instance Method Details

#autoload_trackerObject



55
56
57
# File 'lib/deep_cover/base.rb', line 55

def autoload_tracker
  @autoload_tracker ||= AutoloadTracker.new
end

#config_changed(what) ⇒ Object



40
41
42
43
44
45
# File 'lib/deep_cover/base.rb', line 40

def config_changed(what)
  if what == :paths
    warn "Changing DeepCover's paths after starting coverage is highly discouraged" if @started
    @custom_requirer = nil
  end
end

#coverObject



33
34
35
36
37
38
# File 'lib/deep_cover/base.rb', line 33

def cover
  start
  yield
ensure
  stop
end

#coverageObject



47
48
49
# File 'lib/deep_cover/base.rb', line 47

def coverage
  @coverage ||= Coverage.new
end

#covered_code(filename) ⇒ Object



29
30
31
# File 'lib/deep_cover/base.rb', line 29

def covered_code(filename)
  coverage.covered_code(handle_relative_filename(filename))
end

#custom_requirerObject



51
52
53
# File 'lib/deep_cover/base.rb', line 51

def custom_requirer
  @custom_requirer ||= CustomRequirer.new(lookup_paths: config.paths)
end

#handle_relative_filename(filename) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/deep_cover/base.rb', line 59

def handle_relative_filename(filename)
  unless Pathname.new(filename).absolute?
    relative_to = File.dirname(caller(2..2).first.partition(/\.rb:\d/).first)
    filename = File.absolute_path(filename, relative_to)
  end
  filename += '.rb' unless filename =~ /\.rb$/
  filename
end

#line_coverage(filename) ⇒ Object



25
26
27
# File 'lib/deep_cover/base.rb', line 25

def line_coverage(filename)
  coverage.line_coverage(handle_relative_filename(filename), **config)
end

#parserObject



68
69
70
71
72
73
# File 'lib/deep_cover/base.rb', line 68

def parser
  Parser::CurrentRuby.new.tap do |parser|
    parser.diagnostics.all_errors_are_fatal = true
    parser.diagnostics.ignore_warnings      = true
  end
end

#startObject



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/deep_cover/base.rb', line 5

def start
  return if @started
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
    # No issues with autoload in jruby, so no need to override it!
  else
    require_relative 'core_ext/autoload_overrides'
    AutoloadOverride.active = true
    autoload_tracker.initialize_autoloaded_paths
  end
  require_relative 'core_ext/require_overrides'
  RequireOverride.active = true
  @started = true
end

#stopObject



19
20
21
22
23
# File 'lib/deep_cover/base.rb', line 19

def stop
  AutoloadOverride.active = false if defined? AutoloadOverride
  RequireOverride.active = false
  @started = false
end