diff --git a/src/ProcessorBuilder.php b/src/ProcessorBuilder.php index 98fe3c9..af9eab7 100644 --- a/src/ProcessorBuilder.php +++ b/src/ProcessorBuilder.php @@ -11,32 +11,48 @@ class ProcessorBuilder { - public function __construct(private ProcessorRegistry $registry) + public function __construct(private readonly ProcessorRegistry $registry) { } - public function build(string $context, string $name, array $config = []): Processor + public function build(string $context, string $name, array $processorConfig = []): Processor { $processor = $this->registry->get($context, $name); - if ($processor instanceof ConfigurableProcessor && !empty($config)) { - $processor->configure($config); + if ($processor instanceof ConfigurableProcessor && !empty($processorConfig)) { + $processor->configure($processorConfig); } return $processor; } + /** + * @param array> $processorSpecs + */ public function buildPipeline(string $context, array $processorSpecs): Pipeline { $pipeline = new ProcessorPipeline(); - foreach ($processorSpecs as $name => $config) { - if (is_int($name)) { - $name = $config; - $config = []; - } - $processor = $this->build($context, $name, $config); + foreach ($processorSpecs as $key => $spec) { + $processorName = $this->resolveProcessorName($key, $spec); + $processorConfig = $this->resolveProcessorConfig($key, $spec); + $processor = $this->build($context, $processorName, $processorConfig); $pipeline->addProcessor($processor); } return $pipeline; } + + private function isUnnamedProcessor(int|string $key): bool + { + return is_int($key); + } + + private function resolveProcessorName(int|string $key, string|array $spec): string + { + return $this->isUnnamedProcessor($key) ? (string) $spec : (string) $key; + } + + private function resolveProcessorConfig(int|string $key, string|array $spec): array + { + return $this->isUnnamedProcessor($key) ? [] : (array) $spec; + } }