Class: Rcov::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/rcov/report.rb

Overview

:nodoc:

Defined Under Namespace

Classes: XRefHelper

Constant Summary collapse

DEFAULT_OPTS =
{:ignore => ignore_files, :sort => :name, :sort_reverse => false,
:output_threshold => 101, :dont_ignore => [],
:callsite_analyzer => nil, :comments_run_by_default => false}

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Formatter

Returns a new instance of Formatter.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/rcov/report.rb', line 93

def initialize(opts = {})
    options = DEFAULT_OPTS.clone.update(opts)
    @files = {}
    @ignore_files = options[:ignore]
    @dont_ignore_files = options[:dont_ignore]
    @sort_criterium = case options[:sort]
        when :loc then lambda{|fname, finfo| finfo.num_code_lines}
        when :coverage then lambda{|fname, finfo| finfo.code_coverage}
        else lambda{|fname, finfo| fname}
    end
    @sort_reverse = options[:sort_reverse]
    @output_threshold = options[:output_threshold]
    @callsite_analyzer = options[:callsite_analyzer]
    @comments_run_by_default = options[:comments_run_by_default]
    @callsite_index = nil

    @mangle_filename = Hash.new{|h,base|
        h[base] = Pathname.new(base).cleanpath.to_s.gsub(%r{^\w:[/\\]}, "").gsub(/\./, "_").gsub(/[\\\/]/, "-") + ".html"
    }
end

Instance Method Details

#add_file(filename, lines, coverage, counts) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/rcov/report.rb', line 114

def add_file(filename, lines, coverage, counts)
    old_filename = filename
    filename = normalize_filename(filename)
    SCRIPT_LINES__[filename] = SCRIPT_LINES__[old_filename]
    if @ignore_files.any?{|x| x === filename} &&
       !@dont_ignore_files.any?{|x| x === filename}
        return nil
    end
    if @files[filename]
        @files[filename].merge(lines, coverage, counts)
    else
        @files[filename] = FileStatistics.new(filename, lines, counts,
                                              @comments_run_by_default)
    end
end

#code_coverageObject



161
162
163
164
165
166
167
168
169
170
# File 'lib/rcov/report.rb', line 161

def code_coverage
    lines = 0
    total = 0.0
    @files.each do |k,f|
        total += f.num_code_lines * f.code_coverage
        lines += f.num_code_lines
    end
    return 0 if lines == 0
    total / lines
end

#each_file_pair_sorted(&b) ⇒ Object



138
139
140
141
# File 'lib/rcov/report.rb', line 138

def each_file_pair_sorted(&b)
    return sorted_file_pairs unless block_given?
    sorted_file_pairs.each(&b)
end

#mangle_filename(base) ⇒ Object



134
135
136
# File 'lib/rcov/report.rb', line 134

def mangle_filename(base)
    @mangle_filename[base]
end

#normalize_filename(filename) ⇒ Object



130
131
132
# File 'lib/rcov/report.rb', line 130

def normalize_filename(filename)
    File.expand_path(filename).gsub(/^#{Regexp.escape(Dir.getwd)}\//, '')
end

#num_code_linesObject



172
173
174
175
176
# File 'lib/rcov/report.rb', line 172

def num_code_lines
    lines = 0
    @files.each{|k, f| lines += f.num_code_lines }
    lines
end

#num_linesObject



178
179
180
181
182
# File 'lib/rcov/report.rb', line 178

def num_lines
    lines = 0
    @files.each{|k, f| lines += f.num_lines }
    lines
end

#sorted_file_pairsObject



143
144
145
146
147
148
# File 'lib/rcov/report.rb', line 143

def sorted_file_pairs
    pairs = @files.sort_by do |fname, finfo|
        @sort_criterium.call(fname, finfo)
    end.select{|_, finfo| 100 * finfo.code_coverage < @output_threshold}
    @sort_reverse ? pairs.reverse : pairs
end

#total_coverageObject



150
151
152
153
154
155
156
157
158
159
# File 'lib/rcov/report.rb', line 150

def total_coverage
    lines = 0
    total = 0.0
    @files.each do |k,f|
        total += f.num_lines * f.total_coverage
        lines += f.num_lines
    end
    return 0 if lines == 0
    total / lines
end