From 7eb03bf2b12904fec6adefdfe0454560d0622e05 Mon Sep 17 00:00:00 2001 From: Andreas Wolf Date: Tue, 3 Sep 2024 14:44:35 +0200 Subject: [PATCH] Make Fractor config file optional in DI container --- .../src/Configuration/ConfigurationFactory.php | 1 + .../Configuration/ValueObject/Configuration.php | 6 ++++++ .../fractor/src/Console/Command/ProcessCommand.php | 9 ++++++++- .../ContainerContainerBuilder.php | 14 ++++++++++---- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/fractor/src/Configuration/ConfigurationFactory.php b/packages/fractor/src/Configuration/ConfigurationFactory.php index f601a815..75f3e31c 100644 --- a/packages/fractor/src/Configuration/ConfigurationFactory.php +++ b/packages/fractor/src/Configuration/ConfigurationFactory.php @@ -20,6 +20,7 @@ public function __construct( public function createFromInput(InputInterface $input): Configuration { return new Configuration( + $this->parameterBag->get('fractor_config_file'), $this->allowedFileExtensionsResolver->resolve(), (array) $this->parameterBag->get(Option::PATHS), (array) $this->parameterBag->get(Option::SKIP), diff --git a/packages/fractor/src/Configuration/ValueObject/Configuration.php b/packages/fractor/src/Configuration/ValueObject/Configuration.php index c75dbfe3..badcb936 100644 --- a/packages/fractor/src/Configuration/ValueObject/Configuration.php +++ b/packages/fractor/src/Configuration/ValueObject/Configuration.php @@ -17,6 +17,7 @@ * @param string[] $skip */ public function __construct( + private ?string $configurationFile, private array $fileExtensions, private array $paths, private array $skip, @@ -26,6 +27,11 @@ public function __construct( Assert::allStringNotEmpty($this->paths, 'No directories given'); } + public function getConfigurationFile(): ?string + { + return $this->configurationFile; + } + /** * @return string[] */ diff --git a/packages/fractor/src/Console/Command/ProcessCommand.php b/packages/fractor/src/Console/Command/ProcessCommand.php index 78c15236..caf27ac0 100644 --- a/packages/fractor/src/Console/Command/ProcessCommand.php +++ b/packages/fractor/src/Console/Command/ProcessCommand.php @@ -55,12 +55,19 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { + $io = new SymfonyStyle($input, $output); $configuration = $this->configurationFactory->createFromInput($input); + + if ($configuration->getConfigurationFile() === null) { + $io->error('No configuration file specified, cannot run Fractor.'); + return Command::FAILURE; + } + $processResult = $this->runner->run(new SymfonyConsoleOutput($output), $configuration); $outputFormat = 'console'; $outputFormatter = $this->outputFormatterCollector->getByName($outputFormat); - $outputFormatter->setSymfonyStyle(new SymfonyStyle($input, $output)); + $outputFormatter->setSymfonyStyle($io); $outputFormatter->report($processResult, $configuration); return $this->resolveReturnCode($processResult, $configuration); diff --git a/packages/fractor/src/DependencyInjection/ContainerContainerBuilder.php b/packages/fractor/src/DependencyInjection/ContainerContainerBuilder.php index 70952841..c5b462a4 100644 --- a/packages/fractor/src/DependencyInjection/ContainerContainerBuilder.php +++ b/packages/fractor/src/DependencyInjection/ContainerContainerBuilder.php @@ -4,6 +4,7 @@ namespace a9f\Fractor\DependencyInjection; +use a9f\Fractor\Configuration\FractorConfiguration; use a9f\FractorExtensionInstaller\Generated\InstalledPackages; use Symfony\Component\Config\FileLocator; use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass; @@ -68,12 +69,17 @@ private function collectConfigFilesFromExtensions(): array private function loadFractorConfigFile(string $fractorConfigFile, ContainerBuilder $containerBuilder): void { - Assert::fileExists($fractorConfigFile); + if (!file_exists($fractorConfigFile)) { + $callable = (FractorConfiguration::configure()); + $containerBuilder->setParameter('fractor_config_file', null); + } else { + $containerBuilder->setParameter('fractor_config_file', $fractorConfigFile); - $self = $this; - $callable = (require $fractorConfigFile); + $self = $this; + $callable = (require $fractorConfigFile); - Assert::isCallable($callable); + Assert::isCallable($callable); + } $instanceOf = []; /** @var callable(ContainerConfigurator $container): void $callable */ $callable(new ContainerConfigurator($containerBuilder, new PhpFileLoader($containerBuilder, new FileLocator(