This document covers the global configuration system for Solid::Process, specifically the Solid::Process::Config singleton and its API for customizing default base classes used in process definitions. For information about configuring observability features, see Event Logging System.
The Configuration API provides a centralized mechanism to set framework-wide defaults that affect all process definitions. The primary use case is customizing the base classes used for input and deps blocks, allowing projects to establish their own conventions and shared behavior across all processes.
The configuration system is accessed through the Solid::Process.config singleton and supports both read-only access and block-based configuration with automatic freezing.
Sources: lib/solid/process/config.rb1-36
Sources: lib/solid/process/config.rb1-36 lib/solid/process/class_methods.rb1-42
The Solid::Process::Config class implements the singleton pattern with a class-level @instance variable initialized at load time.
| Attribute | Type | Description |
|---|---|---|
@instance | Solid::Process::Config | Singleton instance created on class load |
input_class | Class | Base class for input blocks (default: Solid::Input) |
dependencies_class | Class | Base class for deps blocks (default: Solid::Input) |
The singleton is accessible via:
Solid::Process.config - Returns the singleton instance for read accessSolid::Process::Config.instance - Direct class-level accessor (primarily for internal use)Sources: lib/solid/process/config.rb29-34 test/solid/process/config_test.rb38-42
Use Solid::Process.config to retrieve the current configuration without modification:
Use Solid::Process.configuration (or its alias configure) to modify settings. The configuration instance is automatically frozen after the block executes:
Sources: lib/solid/process.rb (implied by test), test/solid/process/config_test.rb14-36
Type: Class (must include Solid::Model)
Default: Solid::Input
Aliases: None
Controls the base class used when defining process inputs via the input DSL. When a process defines input do ... end, a new anonymous class is created that inherits from this configured class.
Validation: The setter enforces that the provided class includes Solid::Model, raising ArgumentError otherwise.
Usage in Process Definition:
The ClassMethods module uses this setting when creating the Input constant:
lib/solid/process/class_methods.rb16
Sources: lib/solid/process/config.rb11-20 lib/solid/process/class_methods.rb11-20 test/solid/process/config_test.rb44-68
Type: Class (must include Solid::Model)
Default: Solid::Input
Aliases: deps_class (both getter and setter)
Controls the base class used when defining process dependencies via the deps DSL. When a process defines deps do ... end, a new anonymous class is created that inherits from this configured class.
Validation: The setter enforces that the provided class includes Solid::Model, raising ArgumentError otherwise.
Aliases: The deps_class and deps_class= methods are provided as convenience aliases for consistency with the deps DSL keyword.
Usage in Process Definition:
The ClassMethods module uses this setting when creating the Dependencies constant:
lib/solid/process/class_methods.rb33
Sources: lib/solid/process/config.rb11-28 lib/solid/process/class_methods.rb28-37 test/solid/process/config_test.rb71-96
The Config class uses a lambda constant SolidModel to validate that configured classes properly include Solid::Model:
lib/solid/process/config.rb5-9
This validator is used in both input_class= and dependencies_class= setters to ensure type safety.
Error Behavior:
Sources: lib/solid/process/config.rb5-9 test/solid/process/dependencies/assignment_alias_test.rb52-59
The configuration singleton is created when the Solid::Process::Config class is loaded:
The initialize method sets default values:
lib/solid/process/config.rb13-16
Configuration is mutable during the .configuration block:
test/solid/process/config_test.rb23-27
After the configuration block exits, the instance is frozen to prevent further modification:
test/solid/process/config_test.rb29
Sources: lib/solid/process/config.rb13-34 test/solid/process/config_test.rb14-32
When a process defines input do ... end, the ClassMethods module:
Input constant already exists (prevents redefinition)input_class from Config.instanceInput constantlib/solid/process/class_methods.rb11-20
The deps (or dependencies) DSL follows the same pattern using dependencies_class:
lib/solid/process/class_methods.rb28-37
Sources: lib/solid/process/class_methods.rb1-42 test/solid/process/config_test.rb44-96
Most applications use the default configuration without modification:
Projects can establish shared behavior across all processes:
Different base classes can be configured for inputs and dependencies:
Sources: test/solid/process/config_test.rb44-96
| Configuration Method | Purpose | Default | Validation |
|---|---|---|---|
config.input_class | Base class for input blocks | Solid::Input | Must include Solid::Model |
config.dependencies_class | Base class for deps blocks | Solid::Input | Must include Solid::Model |
config.deps_class | Alias for dependencies_class | Solid::Input | Same as dependencies_class |
Solid::Process.config | Read-only access to configuration | N/A | N/A |
Solid::Process.configuration | Block-based configuration with auto-freeze | N/A | N/A |
Solid::Process.configure | Alias for .configuration | N/A | N/A |
Sources: lib/solid/process/config.rb1-36 test/solid/process/config_test.rb1-97
The configuration system's singleton nature requires careful handling in tests. When testing custom configurations, preserve and restore the original instance:
Refresh this wiki