Class: SimpleCov::Result
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Forwardable
|
|
| Inherits: | Object |
| Defined in: | lib/simplecov/result.rb |
Overview
A simplecov code coverage result, initialized from the Hash Ruby's built-in coverage library generates (Coverage.result).
Class Method Summary
-
.from_hash(hash)
Loads a #to_hash dump.
-
.new(original_result, command_name: nil, created_at: nil, not_loaded_files: Set.new, filters: SimpleCov.filters, groups: SimpleCov.groups) ⇒ Result
constructor
Initialize a new
Resultfrom givenCoverage.result(a Hash of filenames each containing an array of coverage data).
Instance Attribute Summary
-
#command_name
rw
The command name that launched this result.
-
#command_name=(value)
rw
Explicitly set the command name that was used for this coverage result.
-
#created_at
rw
Defines when this result has been created.
-
#created_at=(value)
rw
Explicitly set the Time this result has been created.
-
#files
(also: #source_files)
readonly
Returns all files that are applicable to this result (sans filters!) as instances of
SourceFile. -
#original_result
readonly
Returns the original
Coverage.resultused for this instance ofResult -
#source_files
readonly
Alias for #files.
Instance Method Summary
-
#filenames
Returns all filenames for source files contained in this result.
-
#format!
Applies the configured
SimpleCov.formatteron this result. -
#groups
Returns a Hash of groups for this result.
-
#to_hash
Returns a hash representation of this
Resultthat can be used for marshalling it into JSON. -
#apply_filters!(filters)
private
Applies the given filter chain to
@files, dropping each source file that any filter matches. -
#apply_groups
private
Build the per-group FileLists from
@groups_config, plus the implicit "Ungrouped" bucket for files that no group filter matched. - #build_source_file(filename, coverage, not_loaded_files) private
- #coverage private
Constructor Details
.new(original_result, command_name: nil, created_at: nil, not_loaded_files: Set.new, filters: SimpleCov.filters, groups: SimpleCov.groups) ⇒ Result
Initialize a new Result from given Coverage.result (a Hash of filenames each containing an array of
coverage data).
filters defaults to the singleton's configured filter chain
(SimpleCov.filters) so existing call sites are unchanged. Pass an
empty array to opt out — useful for tests that build synthetic
Results and don't want the project's filters applied. #groups
behaves the same way against SimpleCov.groups.
# File 'lib/simplecov/result.rb', line 40
def initialize(original_result, command_name: nil, created_at: nil, not_loaded_files: Set.new, filters: SimpleCov.filters, groups: SimpleCov.groups) result = original_result @original_result = result.freeze @command_name = command_name @created_at = created_at @groups_config = groups @files = SimpleCov::FileList.new( result.filter_map { |filename, coverage| build_source_file(filename, coverage, not_loaded_files) } .sort_by(&:filename) ) apply_filters!(filters) end
Class Method Details
.from_hash(hash)
Loads a #to_hash dump
# File 'lib/simplecov/result.rb', line 91
def self.from_hash(hash) hash.map do |command_name, data| new(data.fetch("coverage"), command_name: command_name, created_at: Time.at(data["timestamp"])) end end
Instance Attribute Details
#command_name (rw)
The command name that launched this result.
Delegated to SimpleCov.command_name if not set manually
# File 'lib/simplecov/result.rb', line 76
def command_name @command_name ||= SimpleCov.command_name end
#command_name=(value) (rw)
Explicitly set the command name that was used for this coverage result. Defaults to SimpleCov.command_name
# File 'lib/simplecov/result.rb', line 23
attr_writer :command_name
#created_at (rw)
Defines when this result has been created. Defaults to Time.now
# File 'lib/simplecov/result.rb', line 70
def created_at @created_at ||= Time.now end
#created_at=(value) (rw)
Explicitly set the Time this result has been created
# File 'lib/simplecov/result.rb', line 21
attr_writer :created_at
#files (readonly) Also known as: #source_files
Returns all files that are applicable to this result (sans filters!) as instances of
SourceFile. Aliased as :source_files
# File 'lib/simplecov/result.rb', line 18
attr_reader :files
#original_result (readonly)
Returns the original Coverage.result used for this instance of Result
# File 'lib/simplecov/result.rb', line 15
attr_reader :original_result
#source_files (readonly)
Alias for #files.
# File 'lib/simplecov/result.rb', line 19
alias source_files files
Instance Method Details
#apply_filters!(filters) (private)
Applies the given filter chain to @files, dropping each source
file that any filter matches.
#apply_groups (private)
Build the per-group FileLists from @groups_config, plus the
implicit "Ungrouped" bucket for files that no group filter
matched.
# File 'lib/simplecov/result.rb', line 125
def apply_groups return {} if @groups_config.empty? grouped = @groups_config.transform_values do |filter| SimpleCov::FileList.new(files.select { |source_file| filter.matches?(source_file) }) end in_group = grouped.values.flat_map(&:to_a) ungrouped = files.reject { |source_file| in_group.include?(source_file) } grouped["Ungrouped"] = SimpleCov::FileList.new(ungrouped) if ungrouped.any? grouped end
#build_source_file(filename, coverage, not_loaded_files) (private)
[ GitHub ]# File 'lib/simplecov/result.rb', line 99
def build_source_file(filename, coverage, not_loaded_files) return unless File.file?(filename) SimpleCov::SourceFile.new( filename, JSON.parse(JSON.dump(coverage)), loaded: !not_loaded_files.include?(filename) ) end
#coverage (private)
[ GitHub ]# File 'lib/simplecov/result.rb', line 109
def coverage keys = original_result.keys & filenames keys.zip(original_result.values_at(*keys)).to_h end
#filenames
Returns all filenames for source files contained in this result
# File 'lib/simplecov/result.rb', line 55
def filenames files.map(&:filename) end
#format!
Applies the configured SimpleCov.formatter on this result
#groups
Returns a Hash of groups for this result. Define groups using SimpleCov.add_group 'Models', 'app/models'
# File 'lib/simplecov/result.rb', line 60
def groups @groups ||= apply_groups end
#to_hash
Returns a hash representation of this Result that can be used for marshalling it into JSON
# File 'lib/simplecov/result.rb', line 81
def to_hash { command_name => { "coverage" => coverage, "timestamp" => created_at.to_i } } end