InterNACHI/modular

View on GitHub
src/Console/Commands/ModulesList.php

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
<?php

namespace InterNACHI\Modular\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Str;
use InterNACHI\Modular\Support\ModuleConfig;
use InterNACHI\Modular\Support\ModuleRegistry;

class ModulesList extends Command
{
    protected $signature = 'modules:list';
    
    protected $description = 'List all modules';
    
    public function handle(ModuleRegistry $registry)
    {
        $namespace_title = 'Namespace';
        
        $table = $registry->modules()
            ->map(function(ModuleConfig $config) use (&$namespace_title) {
                $namespaces = $config->namespaces->map(function($namespace) {
                    return rtrim($namespace, '\\');
                });
                
                if ($config->namespaces->count() > 1) {
                    $namespace_title = 'Namespaces';
                }
                
                return [
                    $config->name,
                    Str::after(str_replace('\\', '/', $config->base_path), str_replace('\\', '/', $this->laravel->basePath()).'/'),
                    $namespaces->implode(', '),
                ];
            })
            ->toArray();
        
        $count = $registry->modules()->count();
        $this->line('You have '.$count.' '.Str::plural('module', $count).' installed.');
        $this->line('');
        
        $this->table(['Module', 'Path', $namespace_title], $table);
    }
}