class SimpleCov::Result

A simplecov code coverage result, initialized from the Hash Ruby's built-in coverage library generates (Coverage.result).

Attributes

command_name[W]

Explicitly set the command name that was used for this coverage result. Defaults to SimpleCov.command_name

created_at[W]

Explicitly set the Time this result has been created

files[R]

Returns all files that are applicable to this result (sans filters!) as instances of SimpleCov::SourceFile. Aliased as :source_files

original_result[R]

Returns the original Coverage.result used for this instance of SimpleCov::Result

source_files[R]

Returns all files that are applicable to this result (sans filters!) as instances of SimpleCov::SourceFile. Aliased as :source_files

Public Class Methods

from_hash(hash) click to toggle source

Loads a SimpleCov::Result#to_hash dump

# File lib/simplecov/result.rb, line 74
def self.from_hash(hash)
  command_name, data = hash.first

  result = SimpleCov::Result.new(data["coverage"])

  result.command_name = command_name
  result.created_at = Time.at(data["timestamp"])
  result
end
new(original_result) click to toggle source

Initialize a new SimpleCov::Result from given Coverage.result (a Hash of filenames each containing an array of coverage data)

# File lib/simplecov/result.rb, line 28
def initialize(original_result)
  result = adapt_result(original_result)
  @original_result = result.freeze
  @files = SimpleCov::FileList.new(result.map do |filename, coverage|
    SimpleCov::SourceFile.new(filename, JSON.parse(JSON.dump(coverage))) if File.file?(filename)
  end.compact.sort_by(&:filename))
  filter!
end

Public Instance Methods

command_name() click to toggle source

The command name that launched this result. Delegated to SimpleCov.command_name if not set manually

# File lib/simplecov/result.rb, line 59
def command_name
  @command_name ||= SimpleCov.command_name
end
created_at() click to toggle source

Defines when this result has been created. Defaults to Time.now

# File lib/simplecov/result.rb, line 53
def created_at
  @created_at ||= Time.now
end
filenames() click to toggle source

Returns all filenames for source files contained in this result

# File lib/simplecov/result.rb, line 38
def filenames
  files.map(&:filename)
end
format!() click to toggle source

Applies the configured SimpleCov.formatter on this result

# File lib/simplecov/result.rb, line 48
def format!
  SimpleCov.formatter.new.format(self)
end
groups() click to toggle source

Returns a Hash of groups for this result. Define groups using SimpleCov.add_group 'Models', 'app/models'

# File lib/simplecov/result.rb, line 43
def groups
  @groups ||= SimpleCov.grouped(files)
end
to_hash() click to toggle source

Returns a hash representation of this Result that can be used for marshalling it into JSON

# File lib/simplecov/result.rb, line 64
def to_hash
  {
    command_name => {
      "coverage" => coverage,
      "timestamp" => created_at.to_i
    }
  }
end

Private Instance Methods

adapt_pre_simplecov_0_18_result(result) click to toggle source
# File lib/simplecov/result.rb, line 105
def adapt_pre_simplecov_0_18_result(result)
  result.map do |file_path, line_coverage_data|
    [file_path, {"lines" => line_coverage_data}]
  end.to_h
end
adapt_result(result) click to toggle source

We changed the format of the raw result data in simplecov, as people are likely to have “old” resultsets lying around (but not too old so that they're still considered we can adapt them). See github.com/colszowka/simplecov/pull/824#issuecomment-576049747

# File lib/simplecov/result.rb, line 90
def adapt_result(result)
  if pre_simplecov_0_18_result?(result)
    adapt_pre_simplecov_0_18_result(result)
  else
    result
  end
end
coverage() click to toggle source
# File lib/simplecov/result.rb, line 111
def coverage
  keys = original_result.keys & filenames
  Hash[keys.zip(original_result.values_at(*keys))]
end
filter!() click to toggle source

Applies all configured SimpleCov filters on this result's source files

# File lib/simplecov/result.rb, line 117
def filter!
  @files = SimpleCov.filtered(files)
end
pre_simplecov_0_18_result?(result) click to toggle source

pre 0.18 coverage data pointed from file directly to an array of line coverage

# File lib/simplecov/result.rb, line 99
def pre_simplecov_0_18_result?(result)
  _key, data = result.first

  data.is_a?(Array)
end