Class: Undercover::Report

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/undercover.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(changeset, opts) ⇒ Report

Initializes a new Undercover::Report

Parameters:



31
32
33
34
35
36
37
# File 'lib/undercover.rb', line 31

def initialize(changeset, opts)
  @lcov = LcovParser.parse(File.open(opts.lcov))
  @code_dir = opts.path
  @changeset = changeset.update
  @loaded_files = {}
  @results = {}
end

Instance Attribute Details

#changesetObject (readonly)

Returns the value of attribute changeset.



22
23
24
# File 'lib/undercover.rb', line 22

def changeset
  @changeset
end

#code_dirObject (readonly)

Returns the value of attribute code_dir.



22
23
24
# File 'lib/undercover.rb', line 22

def code_dir
  @code_dir
end

#lcovObject (readonly)

Returns the value of attribute lcov.



22
23
24
# File 'lib/undercover.rb', line 22

def lcov
  @lcov
end

#resultsObject (readonly)

Returns the value of attribute results.



22
23
24
# File 'lib/undercover.rb', line 22

def results
  @results
end

Instance Method Details

#all_resultsObject



72
73
74
# File 'lib/undercover.rb', line 72

def all_results
  results.values.map(&:to_a).flatten
end

#buildObject

rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/undercover.rb', line 40

def build
  changeset.each_changed_line do |filepath, line_no|
    dist_from_line_no = lambda do |res|
      return BigDecimal::INFINITY if line_no < res.first_line

      res_lines = res.first_line..res.last_line
      return BigDecimal::INFINITY unless res_lines.cover?(line_no)

      line_no - res.first_line
    end
    dist_from_line_no_sorter = lambda do |res1, res2|
      dist_from_line_no[res1] <=> dist_from_line_no[res2]
    end
    load_and_parse_file(filepath)

    next unless loaded_files[filepath]

    res = loaded_files[filepath].min(&dist_from_line_no_sorter)
    res.flag if res&.uncovered?(line_no)
    results[filepath] ||= Set.new
    results[filepath] << res
  end
  self
end

#build_warningsObject

rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity



66
67
68
69
70
# File 'lib/undercover.rb', line 66

def build_warnings
  warn('Undercover::Report#build_warnings is deprecated! ' \
       'Please use the #flagged_results accessor instead.')
  all_results.select(&:flagged?)
end

#flagged_resultsObject



76
77
78
# File 'lib/undercover.rb', line 76

def flagged_results
  all_results.select(&:flagged?)
end

#inspectObject Also known as: to_s



80
81
82
# File 'lib/undercover.rb', line 80

def inspect
  "#<Undercover::Report:#{object_id} results: #{results.size}>"
end