class Covered::Coverage
def self.deserialize(unpacker)
def self.deserialize(unpacker) source = unpacker.read counts = unpacker.read annotations = unpacker.read total = unpacker.read self.new(source, counts, annotations, total) end
def self.for(path, **options)
def self.for(path, **options) self.new(Source.new(path, **options)) end
def [] lineno
def [] lineno @counts[lineno] end
def executable_count
def executable_count executable_lines.count end
def executable_lines
def executable_lines @executable_lines ||= @counts.compact end
def executed_count
def executed_count executed_lines.count end
def executed_lines
def executed_lines @executed_lines ||= executable_lines.reject(&:zero?) end
def freeze
def freeze return self if frozen? @counts.freeze @annotations.freeze super end
def fresh?
def fresh? if @source.modified_time.nil? # We don't know when the file was last modified, so we assume it is fresh: return true end unless File.exist?(@source.path) # The file no longer exists, so we assume it is stale: return false end if @source.modified_time >= File.mtime(@source.path) # The file has not been modified since we last processed it, so we assume it is fresh: return true end return false end
def initialize(source, counts = [], annotations = {}, total = nil)
def initialize(source, counts = [], annotations = {}, total = nil) @source = source @counts = counts @annotations = annotations @total = total || counts.sum{|count| count || 0} # Memoized metrics: @executable_lines = nil @executed_lines = nil end
def missing_count
def missing_count executable_count - executed_count end
def path
def path @source.path end
def path= value
def path= value @source.path = value end
def print(output)
def print(output) output.puts "** #{executed_count}/#{executable_count} lines executed; #{percentage.to_f.round(2)}% covered." end
def read(&block)
def read(&block) @source.read(&block) end
def serialize(packer)
def serialize(packer) packer.write(@source) packer.write(@counts) packer.write(@annotations) packer.write(@total) end
def to_a
def to_a @counts end
def to_s
def to_s "\#<#{self.class} path=#{self.path} #{self.summary.percentage.to_f.round(2)}% covered>" end
def zero?
def zero? @total.zero? end