From 9b3b88310bf7cce1e4a661184973cd5c3fcbb1ac Mon Sep 17 00:00:00 2001 From: JesusValera Date: Mon, 26 Jun 2023 17:52:11 +0200 Subject: [PATCH] Change design simple view from gacela list:modules --- CHANGELOG.md | 2 +- .../Domain/AllAppModules/AppModule.php | 6 +++ .../Domain/AllAppModules/AppModuleCreator.php | 20 +++++-- .../Command/ListModulesCommand.php | 53 +++++++++++-------- .../ListModules/ListModulesCommandTest.php | 14 +++-- .../Domain/AllAppModulesFinderTest.php | 5 ++ 6 files changed, 69 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43cb6e28..ee8ce651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Unreleased -- Added command `gacela list:modules [--simple|-s]` +- Added command `gacela list:modules [--detailed|-d]` - Fixed Windows support ### 1.4.0 diff --git a/src/Console/Domain/AllAppModules/AppModule.php b/src/Console/Domain/AllAppModules/AppModule.php index 9482766b..bfdac78f 100644 --- a/src/Console/Domain/AllAppModules/AppModule.php +++ b/src/Console/Domain/AllAppModules/AppModule.php @@ -7,6 +7,7 @@ final class AppModule { public function __construct( + private string $fullModuleName, private string $moduleName, private string $facadeClass, private ?string $factoryClass = null, @@ -15,6 +16,11 @@ public function __construct( ) { } + public function fullModuleName(): string + { + return $this->fullModuleName; + } + public function moduleName(): string { return $this->moduleName; diff --git a/src/Console/Domain/AllAppModules/AppModuleCreator.php b/src/Console/Domain/AllAppModules/AppModuleCreator.php index 19254c15..1225225f 100644 --- a/src/Console/Domain/AllAppModules/AppModuleCreator.php +++ b/src/Console/Domain/AllAppModules/AppModuleCreator.php @@ -12,6 +12,8 @@ use Gacela\Framework\ClassResolver\Factory\FactoryResolver; use ReflectionClass; +use function strlen; + final class AppModuleCreator { public function __construct( @@ -27,6 +29,7 @@ public function __construct( public function fromClass(string $facadeClass): AppModule { return new AppModule( + $this->fullModuleName($facadeClass), $this->moduleName($facadeClass), $facadeClass, $this->findFactory($facadeClass), @@ -35,15 +38,26 @@ public function fromClass(string $facadeClass): AppModule ); } + /** + * @param class-string $facadeClass + */ + private function fullModuleName(string $facadeClass): string + { + $moduleNameIndex = strrpos($facadeClass, '\\') ?: strlen($facadeClass); + + return substr($facadeClass, 0, $moduleNameIndex); + } + /** * @param class-string $facadeClass */ private function moduleName(string $facadeClass): string { - $parts = explode('\\', $facadeClass); - array_pop($parts); + $fullModuleName = $this->fullModuleName($facadeClass); + + $moduleName = strrchr($fullModuleName, '\\') ?: $fullModuleName; - return (string)end($parts); + return ltrim($moduleName, '\\'); } /** diff --git a/src/Console/Infrastructure/Command/ListModulesCommand.php b/src/Console/Infrastructure/Command/ListModulesCommand.php index cd07f44b..f8242be7 100644 --- a/src/Console/Infrastructure/Command/ListModulesCommand.php +++ b/src/Console/Infrastructure/Command/ListModulesCommand.php @@ -8,6 +8,7 @@ use Gacela\Console\Domain\AllAppModules\AppModule; use Gacela\Framework\DocBlockResolverAwareTrait; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -25,55 +26,62 @@ protected function configure(): void $this->setName('list:modules') ->setDescription('Render all modules found') ->addArgument('filter', InputArgument::OPTIONAL, 'Any filter to simplify the output') - ->addOption('simple', 's', InputOption::VALUE_NONE, 'Display just the module names'); + ->addOption('detailed', 'd', InputOption::VALUE_NONE, 'Display all the modules in detail'); } protected function execute(InputInterface $input, OutputInterface $output): int { $filter = (string)$input->getArgument('filter'); - $listOfModules = $this->generateListOfModules( - (bool)$input->getOption('simple'), + $this->generateListOfModules( + $output, + (bool)$input->getOption('detailed'), $this->getFacade()->findAllAppModules($filter), ); - $output->write($listOfModules); - return self::SUCCESS; } /** * @param list $modules */ - private function generateListOfModules(bool $isSimple, array $modules): string + private function generateListOfModules(OutputInterface $output, bool $isDetailed, array $modules): void { - return ($isSimple) - ? $this->generateSimpleView($modules) - : $this->generateDetailedView($modules); + if ($isDetailed) { + $this->generateDetailedView($output, $modules); + return; + } + + $this->generateSimpleView($output, $modules); } /** * @param list $modules */ - private function generateSimpleView(array $modules): string + private function generateSimpleView(OutputInterface $output, array $modules): void { - $result = ''; - - foreach ($modules as $i => $module) { - $n = $i + 1; - $result .= <<{$module->moduleName()} - -TXT; + $rows = []; + + foreach ($modules as $module) { + $rows[] = [ + $module->fullModuleName(), + '✔️', // facade is always true + $module->factoryClass() ? '✔️' : '✖️', + $module->configClass() ? '✔️' : '✖️', + $module->dependencyProviderClass() ? '✔️' : '✖️', + ]; } - - return $result; + $table = new Table($output); + $table->setStyle('box'); + $table->setHeaders(['Module namespace', 'Facade', 'Factory', 'Config', 'Dep. Provider']); + $table->setRows($rows); + $table->render(); } /** * @param list $modules */ - private function generateDetailedView(array $modules): string + private function generateDetailedView(OutputInterface $output, array $modules): void { $result = ''; foreach ($modules as $i => $module) { @@ -93,6 +101,7 @@ private function generateDetailedView(array $modules): string TXT; } - return $result; + + $output->write($result); } } diff --git a/tests/Feature/Console/ListModules/ListModulesCommandTest.php b/tests/Feature/Console/ListModules/ListModulesCommandTest.php index 53e388d7..c0c61272 100644 --- a/tests/Feature/Console/ListModules/ListModulesCommandTest.php +++ b/tests/Feature/Console/ListModules/ListModulesCommandTest.php @@ -25,12 +25,16 @@ protected function setUp(): void public function test_list_modules_simple(): void { - $this->command->execute(['--simple' => null]); + $this->command->execute([]); $expected = <<command->getDisplay()); @@ -38,7 +42,7 @@ public function test_list_modules_simple(): void public function test_list_modules(): void { - $this->command->execute([]); + $this->command->execute(['--detailed' => null]); $expected = <<