Module: SimpleCov::ParallelAdapters

Defined in:
lib/simplecov/parallel_adapters.rb,
lib/simplecov/parallel_adapters/base.rb,
lib/simplecov/parallel_adapters/generic.rb,
lib/simplecov/parallel_adapters/parallel_tests.rb,
sig/simplecov.rbs,
sig/simplecov.rbs,
sig/simplecov.rbs,
sig/simplecov.rbs

Overview

Registry + selection for parallel-test-runner adapters. An adapter is a class (used as a singleton, never instantiated) answering the _Adapter contract; subclass ParallelAdapters::Base to inherit no-op defaults. Register custom adapters via SimpleCov::ParallelAdapters.register MyRunnerAdapter.

Defined Under Namespace

Modules: _Adapter Classes: Base, GenericAdapter, ParallelTestsAdapter

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.adaptersObject

Adapters in selection order. ParallelTestsAdapter first (most specific — uses the gem's own API when the gem is loaded); then GenericAdapter as the env-var fallback. User-registered adapters are prepended (#register puts new entries at the front) so downstream code can override the built-ins by registering a more specific match.



44
45
46
# File 'lib/simplecov/parallel_adapters.rb', line 44

def adapters
  @adapters ||= [ParallelTestsAdapter, GenericAdapter]
end

.currentObject

The adapter SimpleCov should consult for this process — the first registered adapter whose active? returns true. Returns nil when no adapter is active (i.e., we're not running under any recognized parallel test runner), in which case the caller should treat the process as single-worker.



71
72
73
74
75
# File 'lib/simplecov/parallel_adapters.rb', line 71

def current
  return @current if defined?(@current)

  @current = adapters.find(&:active?)
end

.register(adapter) ⇒ Object

Register a custom adapter. Newly registered adapters are inserted at the front of the selection list so a custom adapter for a specific runner takes precedence over the built-in ParallelTests and Generic adapters.

class MyRunnerAdapter < SimpleCov::ParallelAdapters::Base
def self.active?       = ENV["MY_RUNNER_PID"]
def self.first_worker? = ENV["MY_RUNNER_PID"].to_i == 1
def self.expected_worker_count = ENV["MY_RUNNER_WORKERS"].to_i
end

SimpleCov::ParallelAdapters.register MyRunnerAdapter


60
61
62
63
64
# File 'lib/simplecov/parallel_adapters.rb', line 60

def register(adapter)
  reset_current!
  adapters.unshift(adapter) unless adapters.include?(adapter)
  adapter
end

.reset_current!Object

Clear the memoized current selection. Primarily for tests that mutate env vars between examples; production runs are single-shot.



79
80
81
# File 'lib/simplecov/parallel_adapters.rb', line 79

def reset_current!
  remove_instance_variable(:@current) if defined?(@current)
end

Instance Method Details

#self?.adaptersArray[_Adapter]

Adapters in selection order: user-registered adapters first, then ParallelTestsAdapter, then GenericAdapter.

Returns:



1508
# File 'sig/simplecov.rbs', line 1508

def self?.adapters: () -> Array[_Adapter]

#self?.current_Adapter?

The first registered adapter whose active? returns true, or nil when no recognized parallel runner is active (single-worker run).

Returns:



1516
# File 'sig/simplecov.rbs', line 1516

def self?.current: () -> _Adapter?

#self?.register_Adapter

Registers a custom adapter at the front of the selection list and returns it. Clears the memoized current selection.

Parameters:

Returns:



1512
# File 'sig/simplecov.rbs', line 1512

def self?.register: (_Adapter adapter) -> _Adapter

#self?.reset_current!void

This method returns an undefined value.

Clears the memoized current selection (primarily for tests that mutate env vars between examples).



1520
# File 'sig/simplecov.rbs', line 1520

def self?.reset_current!: () -> void