Class: Mutant::Config Private

Inherits:
Object
  • Object
show all
Includes:
Unparser::Adamantium
Defined in:
lib/mutant.rb,
lib/mutant/config.rb,
lib/mutant/config/coverage_criteria.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Standalone configuration of a mutant execution.

Does not reference any “external” volatile state. The configuration applied to current environment is being represented by the Mutant::Env object.

Defined Under Namespace

Classes: CoverageCriteria

Constant Summary collapse

DEFAULT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

new(
  coverage_criteria: Config::CoverageCriteria::EMPTY,
  expression_parser: Expression::Parser.new([
    Expression::Method,
    Expression::Methods,
    Expression::Namespace::Exact,
    Expression::Namespace::Recursive
  ]),
  fail_fast:         false,
  includes:          EMPTY_ARRAY,
  integration:       nil,
  isolation:         Mutant::Isolation::Fork.new(WORLD),
  jobs:              nil,
  matcher:           Matcher::Config::DEFAULT,
  mutation_timeout:  nil,
  reporter:          Reporter::CLI.build(WORLD.stdout),
  requires:          EMPTY_ARRAY,
  zombie:            false
)
MORE_THAN_ONE_CONFIG_FILE =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

<<~'MESSAGE'
  Found more than one candidate for use as implicit config file: %s
MESSAGE
CANDIDATES =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w[
  .mutant.yml
  config/mutant.yml
  mutant.yml
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.envConfig

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The configuration from the environment

Returns:



105
106
107
# File 'lib/mutant/config.rb', line 105

def self.env
  DEFAULT.with(jobs: Etc.nprocessors)
end

.load_config_file(world) ⇒ Either<String,Config>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Load config file

Parameters:

Returns:



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/mutant/config.rb', line 70

def self.load_config_file(world)
  files = CANDIDATES
    .map(&world.pathname.public_method(:new))
    .select(&:readable?)

  if files.one?
    load_contents(files.first).fmap(&DEFAULT.public_method(:with))
  elsif files.empty?
    Either::Right.new(DEFAULT)
  else
    Either::Left.new(MORE_THAN_ONE_CONFIG_FILE % files.join(', '))
  end
end

Instance Method Details

#expand_defaultsConfig

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Expand config with defaults

Returns:



87
88
89
90
91
92
# File 'lib/mutant/config.rb', line 87

def expand_defaults
  with(
    coverage_criteria: CoverageCriteria::DEFAULT.merge(coverage_criteria),
    jobs:              jobs || 1
  )
end

#merge(other) ⇒ Config

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Merge with other config

rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength

Parameters:

Returns:



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/mutant/config.rb', line 48

def merge(other)
  other.with(
    coverage_criteria: coverage_criteria.merge(other.coverage_criteria),
    fail_fast:         fail_fast || other.fail_fast,
    includes:          includes + other.includes,
    jobs:              other.jobs || jobs,
    integration:       other.integration || integration,
    mutation_timeout:  other.mutation_timeout || mutation_timeout,
    matcher:           matcher.merge(other.matcher),
    requires:          requires + other.requires,
    zombie:            zombie || other.zombie
  )
end