Skip to content

Commit

Permalink
feat: update service provider generation
Browse files Browse the repository at this point in the history
  • Loading branch information
Mohammad-Alavi committed Jan 19, 2025
1 parent 8b3573c commit c23fa17
Show file tree
Hide file tree
Showing 10 changed files with 17 additions and 143 deletions.
46 changes: 8 additions & 38 deletions src/Generator/Commands/ContainerApiGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ final class ContainerApiGenerator extends Generator implements ComponentsGenerat
['controllertype', null, InputOption::VALUE_OPTIONAL, 'The controller type (SAC, MAC)'],
['events', null, InputOption::VALUE_OPTIONAL, 'Generate Events for this Container?'],
['listeners', null, InputOption::VALUE_OPTIONAL, 'Generate Event Listeners for Events of this Container?'],
['register-listeners', null, InputOption::VALUE_OPTIONAL, 'Register the Event Listeners in the EventServiceProvider?'],
['tests', null, InputOption::VALUE_OPTIONAL, 'Generate Tests for this Container?'],
['maincalled', false, InputOption::VALUE_NONE],
];
Expand Down Expand Up @@ -126,12 +125,8 @@ public function getUserInputs(): array|null

$generateEvents = $this->checkParameterOrConfirm('events', 'Do you want to generate the corresponding CRUD Events for this Container?', false);
$generateListeners = false;
$registerListeners = false;
if ($generateEvents) {
$generateListeners = $this->checkParameterOrConfirm('listeners', 'Do you want to generate the corresponding Event Listeners for this Events?', false);
if ($generateListeners) {
$registerListeners = $this->checkParameterOrConfirm('register-listeners', 'Do you want the Event Listeners to be registered in the EventServiceProvider?', true);
}
}
$generateTests = $this->checkParameterOrConfirm('tests', 'Do you want to generate the corresponding Tests for this Container?', true);

Expand Down Expand Up @@ -381,12 +376,10 @@ public function getUserInputs(): array|null
}

if ($generateEvents) {
$listeners = [];
if ($generateListeners) {
$this->printInfoMessage('Generating Event Listeners');
foreach ($events as $event) {
$listener = $event . 'Listener';
$listeners[$listener] = [$event];
$this->call('apiato:make:listener', [
'--section' => $this->sectionName,
'--container' => $this->containerName,
Expand All @@ -395,39 +388,16 @@ public function getUserInputs(): array|null
]);
}
}

$stub = 'generic-event-service-provider';
if ($generateListeners && $registerListeners) {
$stub = 'event-service-provider-with-listener';
}

$this->printInfoMessage('Generating EventServiceProvider');
$this->call('apiato:make:provider', [
'--section' => $sectionName,
'--container' => $containerName,
'--file' => 'EventServiceProvider',
'--stub' => $stub,
'--event-listeners' => $listeners,
]);

$this->printInfoMessage('Generating MainServiceProvider');
$this->call('apiato:make:provider', [
'--section' => $sectionName,
'--container' => $containerName,
'--file' => 'MainServiceProvider',
'--stub' => 'main-service-provider-with-event-provider',
'--event-service-provider' => 'EventServiceProvider',
]);
} else {
$this->printInfoMessage('Generating MainServiceProvider');
$this->call('apiato:make:provider', [
'--section' => $sectionName,
'--container' => $containerName,
'--file' => 'MainServiceProvider',
'--stub' => 'main-service-provider',
]);
}

$this->printInfoMessage('Generating ServiceProvider');
$this->call('apiato:make:provider', [
'--section' => $sectionName,
'--container' => $containerName,
'--file' => Str::title($this->containerName) . 'ServiceProvider',
'--stub' => 'service-provider',
]);

$generateComposerFile = [
'path-parameters' => [
'section-name' => $this->sectionName,
Expand Down
6 changes: 0 additions & 6 deletions src/Generator/Commands/ContainerGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ final class ContainerGenerator extends Generator implements ComponentsGenerator
['ui', null, InputOption::VALUE_OPTIONAL, 'The user-interface to generate the Controller for.'],
['events', null, InputOption::VALUE_OPTIONAL, 'Generate Events for this Container?'],
['listeners', null, InputOption::VALUE_OPTIONAL, 'Generate Event Listeners for Events of this Container?'],
['register-listeners', null, InputOption::VALUE_OPTIONAL, 'Register the Event Listeners in the EventServiceProvider?'],
['tests', null, InputOption::VALUE_OPTIONAL, 'Generate Tests for this Container?'],
];
/**
Expand Down Expand Up @@ -54,12 +53,8 @@ public function getUserInputs(): array|null
$ui = Str::lower($this->checkParameterOrChoice('ui', 'Select the UI for this container', ['API', 'WEB', 'BOTH'], 0));
$generateEvents = $this->checkParameterOrConfirm('events', 'Do you want to generate the corresponding CRUD Events for this Container?', false);
$generateListeners = false;
$registerListeners = false;
if ($generateEvents) {
$generateListeners = $this->checkParameterOrConfirm('listeners', 'Do you want to generate the corresponding Event Listeners for this Events?', false);
if ($generateListeners) {
$registerListeners = $this->checkParameterOrConfirm('register-listeners', 'Do you want the Event Listeners to be registered in the EventServiceProvider?', true);
}
}
$generateTests = $this->checkParameterOrConfirm('tests', 'Do you want to generate the corresponding Tests for this Container?', true);
if ($generateTests) {
Expand Down Expand Up @@ -119,7 +114,6 @@ public function getUserInputs(): array|null
'--file' => 'composer',
'--events' => $generateEvents,
'--listeners' => $generateListeners,
'--register-listeners' => $registerListeners,
'--tests' => $generateTests,
'--maincalled' => true,
]);
Expand Down
6 changes: 3 additions & 3 deletions src/Generator/Commands/ContainerWebGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,12 @@ public function getUserInputs(): array|null
'--file' => Str::camel($this->sectionName) . '-' . Str::camel($this->containerName),
]);

$this->printInfoMessage('Generating MainServiceProvider');
$this->printInfoMessage('Generating ServiceProvider');
$this->call('apiato:make:provider', [
'--section' => $sectionName,
'--container' => $containerName,
'--file' => 'MainServiceProvider',
'--stub' => 'main-service-provider',
'--file' => Str::title($this->containerName) . 'ServiceProvider',
'--stub' => 'service-provider',
]);

$this->printInfoMessage('Generating Model and Repository');
Expand Down
38 changes: 4 additions & 34 deletions src/Generator/Commands/ServiceProviderGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ final class ServiceProviderGenerator extends Generator implements ComponentsGene
*/
public array $inputs = [
['stub', null, InputOption::VALUE_OPTIONAL, 'The stub file to load for this generator.'],
['event-listeners', null, InputOption::VALUE_OPTIONAL, 'The Event Listeners that this Provider should register.'],
['event-service-provider', null, InputOption::VALUE_OPTIONAL, 'The Event Service Provider that this Provider should register.'],
];
/**
* The console command name.
Expand Down Expand Up @@ -47,48 +45,23 @@ final class ServiceProviderGenerator extends Generator implements ComponentsGene
*/
protected string $stubName = 'providers/generic.stub';

private const TAB2 = ' ';
private const TAB3 = ' ';

public function getUserInputs(): array|null
{
$stub = $this->option('stub');
$eventServiceProvider = $this->option('event-service-provider');
if (!$stub) {
$stub = $this->checkParameterOrChoice(
'stub',
'Select the Stub you want to load',
['Generic', 'MainServiceProvider', 'EventServiceProvider', 'MiddlewareServiceProvider'],
['ServiceProvider', 'EventServiceProvider'],
0,
);

$stub = match ($stub) {
'MainServiceProvider' => 'main-service-provider',
'EventServiceProvider' => 'generic-event-service-provider',
'MiddlewareServiceProvide' => 'middleware-service-provider',
default => 'generic',
'EventServiceProvider' => 'event-service-provider',
default => 'service-provider',
};
}
$this->stubName = "providers/$stub.stub";
$eventListeners = $this->option('event-listeners');
$eventListenersString = '[]';
$listenersUseStatements = '';
$eventsUseStatements = '';
if ($eventListeners) {
$listenersWithClass = array_map(static fn ($listeners, $listener) => [$listener . '::class' => array_map(static fn ($event): string => $event . '::class', $listeners)], $eventListeners, array_keys($eventListeners));
$eventListenersString = '[' . PHP_EOL . array_reduce($listenersWithClass, static fn ($carry, $item): string => $carry . array_reduce(array_keys($item), static function ($carry, string $key) use ($item): string {
$carry .= self::TAB2 . $key . ' => [' . PHP_EOL;
$carry .= array_reduce($item[$key], static fn ($carry, $event): string => $carry . (self::TAB3 . $event . ',' . PHP_EOL));

return $carry . (self::TAB2 . '],' . PHP_EOL);
})) . ' ]';
$listenersUseStatements = array_reduce(array_keys($eventListeners), fn ($carry, $item): string => $carry . ('use App\Containers\\' . $this->sectionName . '\\' . $this->containerName . '\Listeners\\' . $item . ';' . PHP_EOL));

$eventsUseStatements = array_map(fn ($listeners, $listener): array => array_map(fn ($event): string => 'use App\Containers\\' . $this->sectionName . '\\' . $this->containerName . '\Events\\' . $event . ';', $listeners), $eventListeners, array_keys($eventListeners));
$eventsUseStatements = array_reduce($eventsUseStatements, static fn ($carry, $item): string => $carry . array_reduce(array_keys($item), static fn ($carry, $key): string => $carry . ($item[$key] . PHP_EOL)));
}

$useStatements = $eventsUseStatements . $listenersUseStatements;

return [
'path-parameters' => [
Expand All @@ -101,9 +74,6 @@ public function getUserInputs(): array|null
'_container-name' => Str::lower($this->containerName),
'container-name' => $this->containerName,
'class-name' => $this->fileName,
'event-listeners' => $eventListenersString,
'use-statements' => $useStatements,
'event-service-provider' => $eventServiceProvider,
],
'file-parameters' => [
'file-name' => $this->fileName,
Expand All @@ -116,6 +86,6 @@ public function getUserInputs(): array|null
*/
public function getDefaultFileName(): string
{
return 'MainServiceProvider';
return 'ServiceProvider';
}
}

This file was deleted.

This file was deleted.

16 changes: 0 additions & 16 deletions src/Generator/Stubs/providers/main-service-provider.stub

This file was deleted.

17 changes: 0 additions & 17 deletions src/Generator/Stubs/providers/middleware-service-provider.stub

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace App\Containers\{{section-name}}\{{container-name}}\Providers;

use Apiato\Abstract\Providers\ServiceProvider;
use App\Ship\Parents\Providers\ServiceProvider as ParentServiceProvider;

class {{class-name}} extends ServiceProvider
class {{class-name}} extends ParentServiceProvider
{
public function register(): void
{
Expand Down

0 comments on commit c23fa17

Please sign in to comment.