class Statistics
Aggregates coverage statistics across files.
Nested
Definitions
def self.for(coverage)
Build statistics for a single coverage object.
Signature
-
parameter
coverageCovered::Coverage The coverage object to summarize.
-
returns
Covered::Statistics Statistics containing the given coverage.
Implementation
def self.for(coverage)
self.new.tap do |statistics|
statistics << coverage
end
end
def initialize
Initialize empty coverage statistics.
Implementation
def initialize
@total = Aggregate.new
@paths = Hash.new
end
attr :total
Signature
-
attribute
Covered::Statistics::Aggregate The total aggregate statistics.
attr :paths
Signature
-
attribute
Hash(String, Covered::Coverage) Coverage statistics indexed by path.
def count
The number of unique paths with coverage data.
Signature
-
returns
Integer The number of unique paths.
Implementation
def count
@paths.size
end
def executable_count
The total number of executable lines.
Signature
-
returns
Integer The total executable line count.
Implementation
def executable_count
@total.executable_count
end
def executed_count
The total number of executed lines.
Signature
-
returns
Integer The total executed line count.
Implementation
def executed_count
@total.executed_count
end
def <<(coverage)
Add coverage to these statistics.
Signature
-
parameter
coverageCovered::Coverage The coverage object to add.
Implementation
def << coverage
@total << coverage
(@paths[coverage.path] ||= coverage.empty).merge!(coverage)
end
def [](path)
Get coverage for the given path.
Signature
-
parameter
pathString The source path.
-
returns
Covered::Coverage | Nil The merged coverage for the path.
Implementation
def [](path)
@paths[path]
end
def as_json
A JSON-compatible representation of these statistics.
Signature
-
returns
Hash The total statistics and path statistics.
Implementation
def as_json
{
total: total.as_json,
paths: @paths.map{|path, coverage| [path, coverage.as_json]}.to_h,
}
end
def to_json(options)
Convert these statistics to JSON.
Signature
-
parameter
optionsHash Options forwarded to
to_json.-
returns
String The JSON representation.
Implementation
def to_json(options)
as_json.to_json(options)
end
def print(output)
Print a human-readable coverage summary.
Signature
-
parameter
outputIO The output stream.
Implementation
def print(output)
output.puts "#{count} files checked; #{@total.executed_count}/#{@total.executable_count} lines executed; #{@total.percentage.to_f.round(2)}% covered."
if self.complete?
output.puts "🧘 #{COMPLETE.sample}"
end
end
def validate!(minimum = 1.0)
Validate that coverage meets the given minimum ratio.
Signature
-
parameter
minimumNumeric The minimum accepted coverage ratio.
-
raises
Covered::CoverageError If coverage is below the minimum ratio.
Implementation
def validate!(minimum = 1.0)
if total.ratio < minimum
raise CoverageError, "Coverage of #{self.percentage.to_f.round(2)}% is less than required minimum of #{(minimum * 100.0).round(2)}%!"
end
end