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, coverage_adapter) ⇒ Report

Initializes a new Undercover::Report

Parameters:



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/undercover.rb', line 40

def initialize(changeset, opts, coverage_adapter)
  @coverage_adapter = coverage_adapter

  @code_dir = opts.path
  @changeset = changeset

  ignored_files = coverage_adapter.ignored_files || []
  @filter_set = FilterSet.new(opts.glob_allow_filters, opts.glob_reject_filters, ignored_files)
  changeset.filter_with(filter_set)
  @max_warnings_limit = opts.max_warnings_limit
  @loaded_files = {}
  @results = {}
end

Instance Attribute Details

#changesetObject (readonly)

Returns the value of attribute changeset.



27
28
29
# File 'lib/undercover.rb', line 27

def changeset
  @changeset
end

#code_dirObject (readonly)

Returns the value of attribute code_dir.



27
28
29
# File 'lib/undercover.rb', line 27

def code_dir
  @code_dir
end

#coverage_adapterObject (readonly)

Returns the value of attribute coverage_adapter.



27
28
29
# File 'lib/undercover.rb', line 27

def coverage_adapter
  @coverage_adapter
end

#filter_setObject (readonly)

Returns the value of attribute filter_set.



27
28
29
# File 'lib/undercover.rb', line 27

def filter_set
  @filter_set
end

#lcovObject (readonly)

Returns the value of attribute lcov.



27
28
29
# File 'lib/undercover.rb', line 27

def lcov
  @lcov
end

#max_warnings_limitObject (readonly)

Returns the value of attribute max_warnings_limit.



27
28
29
# File 'lib/undercover.rb', line 27

def max_warnings_limit
  @max_warnings_limit
end

#resultsObject (readonly)

Returns the value of attribute results.



27
28
29
# File 'lib/undercover.rb', line 27

def results
  @results
end

Instance Method Details

#all_resultsObject



94
95
96
# File 'lib/undercover.rb', line 94

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

#buildObject

rubocop:disable Metrics/MethodLength, Metrics/AbcSize



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/undercover.rb', line 55

def build
  flag_count = 0
  changeset.each_changed_line do |filepath, line_no|
    break if max_warnings_limit && flag_count >= max_warnings_limit

    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)
    if res.uncovered?(line_no) && !res.flagged?
      res.flag
      flag_count += 1
    end
    results[filepath] ||= Set.new
    results[filepath] << res
  end
  self
end

#build_warningsObject

rubocop:enable Metrics/MethodLength, Metrics/AbcSize



88
89
90
91
92
# File 'lib/undercover.rb', line 88

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

#flagged_resultsObject



98
99
100
# File 'lib/undercover.rb', line 98

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

#inspectObject Also known as: to_s



102
103
104
# File 'lib/undercover.rb', line 102

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