Skip to content

Commit 63db580

Browse files
committed
ADD laravel-backed-enum.stub
ADD LaravelBackedEnumMakeCommand.php MOD LaravelBackedEnumsServiceProvider.php to register make command
1 parent eee0f9a commit 63db580

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
namespace Webfox\LaravelBackedEnums;
4+
5+
use Illuminate\Support\Str;
6+
use Illuminate\Console\GeneratorCommand;
7+
use Symfony\Component\Console\Attribute\AsCommand;
8+
use function App\Console\Commands\class_basename;
9+
10+
#[AsCommand(name: 'make:laravel-backed-enum')]
11+
class LaravelBackedEnumMakeCommand extends GeneratorCommand
12+
{
13+
protected $signature = 'make:laravel-backed-enum {name} {enumType}';
14+
15+
protected $description = 'Create a new laravel backed enum';
16+
17+
protected $type = 'Enum';
18+
19+
protected function getStub(): string
20+
{
21+
return $this->resolveStubPath('/stubs/laravel-backed-enum.stub');
22+
}
23+
24+
protected function resolveStubPath($stub): string
25+
{
26+
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
27+
? $customPath
28+
: __DIR__ . $stub;
29+
}
30+
31+
protected function getDefaultNamespace($rootNamespace): string
32+
{
33+
return $rootNamespace . '\Enums';
34+
}
35+
36+
protected function buildClass($name): array|string
37+
{
38+
$replace = [
39+
'{{ name }}' => class_basename($name),
40+
'{{ enumType }}' => $this->argument('enumType'),
41+
];
42+
43+
return str_replace(
44+
array_keys($replace),
45+
array_values($replace),
46+
parent::buildClass($name)
47+
);
48+
}
49+
50+
protected function promptForMissingArgumentsUsing(): array
51+
{
52+
return [
53+
'enumType' => [
54+
'What is the type of the enum?',
55+
match (strtolower($this->argument('enumType'))) {
56+
'int' => 'int',
57+
default => 'string',
58+
},
59+
],
60+
...parent::promptForMissingArgumentsUsing(),
61+
];
62+
}
63+
64+
protected function getNameInput(): string
65+
{
66+
$name = trim($this->argument('name') . 'Enum');
67+
68+
if (Str::endsWith($name, '.php')) {
69+
return Str::substr($name, 0, -4);
70+
}
71+
72+
return $name;
73+
}
74+
}

src/LaravelBackedEnumsServiceProvider.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ public function configurePackage(Package $package): void
1717
$package
1818
->name('laravel-backed-enums')
1919
->hasConfigFile();
20+
21+
$package->withCommands([
22+
LaravelBackedEnumMakeCommand::class,
23+
]);
2024
}
2125
}

src/stubs/laravel-backed-enum.stub

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace {{ namespace }};
4+
5+
use Webfox\LaravelBackedEnums\BackedEnum;
6+
use Webfox\LaravelBackedEnums\IsBackedEnum;
7+
8+
enum {{ name }}:{{ enumType }} implements BackedEnum
9+
{
10+
use IsBackedEnum;
11+
12+
/**
13+
* Add your Enums below using.
14+
* e.g. case Standard = 'standard';
15+
*/
16+
17+
18+
}

0 commit comments

Comments
 (0)