From c481cd02b5109a965bde0a9414208a1b45fd73ea Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Wed, 26 Mar 2025 12:50:25 +0300 Subject: [PATCH] Simplified by elements --- app/Actions/QuestionsAction.php | 6 +- app/Data/Casts/QuestionsCast.php | 29 +------- ...kSelectData.php => QuestionSelectData.php} | 7 +- ...onAskTextData.php => QuestionTextData.php} | 7 +- app/Enums/PromptEnum.php | 1 + app/Enums/TypeEnum.php | 3 +- app/Fillers/AskFiller.php | 27 ------- .../{AskSelectFiller.php => SelectFiller.php} | 8 +- .../{AskTextFiller.php => TextFiller.php} | 8 +- resources/schemas/example-v2.json | 17 ++--- resources/schemas/schema-v2.json | 73 +++++-------------- 11 files changed, 47 insertions(+), 139 deletions(-) rename app/Data/Questions/{QuestionAskSelectData.php => QuestionSelectData.php} (73%) rename app/Data/Questions/{QuestionAskTextData.php => QuestionTextData.php} (82%) delete mode 100644 app/Fillers/AskFiller.php rename app/Fillers/Questions/{AskSelectFiller.php => SelectFiller.php} (80%) rename app/Fillers/Questions/{AskTextFiller.php => TextFiller.php} (87%) diff --git a/app/Actions/QuestionsAction.php b/app/Actions/QuestionsAction.php index 1fcf931..7e03b46 100644 --- a/app/Actions/QuestionsAction.php +++ b/app/Actions/QuestionsAction.php @@ -13,9 +13,10 @@ use PackageWizard\Installer\Data\ReplaceData; use PackageWizard\Installer\Enums\ConditionOperatorEnum; use PackageWizard\Installer\Enums\TypeEnum; -use PackageWizard\Installer\Fillers\AskFiller; use PackageWizard\Installer\Fillers\Questions\AuthorFiller; use PackageWizard\Installer\Fillers\Questions\LicenseFiller; +use PackageWizard\Installer\Fillers\Questions\SelectFiller; +use PackageWizard\Installer\Fillers\Questions\TextFiller; use PackageWizard\Installer\Replacers\AskReplacer; use PackageWizard\Installer\Replacers\AuthorReplacer; use PackageWizard\Installer\Replacers\LicenseReplacer; @@ -67,9 +68,10 @@ protected function question(QuestionData $question): void protected function getValue(QuestionData $question): array|Data|null { return match ($question->type) { - TypeEnum::Ask => AskReplacer::get(AskFiller::make(data: $question), true), TypeEnum::Author => AuthorReplacer::get(AuthorFiller::make(data: $question), true), TypeEnum::License => LicenseReplacer::get(LicenseFiller::make(data: $question), true), + TypeEnum::Select => AskReplacer::get(SelectFiller::make(data: $question), true), + TypeEnum::Text => AskReplacer::get(TextFiller::make(data: $question), true), }; } diff --git a/app/Data/Casts/QuestionsCast.php b/app/Data/Casts/QuestionsCast.php index 1ce216f..8e2082b 100644 --- a/app/Data/Casts/QuestionsCast.php +++ b/app/Data/Casts/QuestionsCast.php @@ -5,11 +5,10 @@ namespace PackageWizard\Installer\Data\Casts; use PackageWizard\Installer\Concerns\Data\ChoiceData; -use PackageWizard\Installer\Data\Questions\QuestionAskSelectData; -use PackageWizard\Installer\Data\Questions\QuestionAskTextData; use PackageWizard\Installer\Data\Questions\QuestionAuthorData; use PackageWizard\Installer\Data\Questions\QuestionLicenseData; -use PackageWizard\Installer\Enums\PromptEnum; +use PackageWizard\Installer\Data\Questions\QuestionSelectData; +use PackageWizard\Installer\Data\Questions\QuestionTextData; use PackageWizard\Installer\Enums\TypeEnum; use Spatie\LaravelData\Casts\Cast; use Spatie\LaravelData\Data; @@ -21,31 +20,11 @@ class QuestionsCast implements Cast protected function map(string|TypeEnum $type, array $item): Data { return match ($this->type($type)) { - TypeEnum::Ask => $this->ask($item), TypeEnum::Author => QuestionAuthorData::from($item), TypeEnum::License => QuestionLicenseData::from($item), + TypeEnum::Select => QuestionSelectData::from($item), + TypeEnum::Text => QuestionTextData::from($item), default => $this->throw($type) }; } - - protected function ask(array $item): Data - { - return match ($this->prompt($item['prompt'] ?? null)) { - PromptEnum::Select => QuestionAskSelectData::from($item), - default => QuestionAskTextData::from($item) - }; - } - - protected function prompt(PromptEnum|string|null $prompt): ?PromptEnum - { - if ($prompt === null) { - return null; - } - - if ($prompt instanceof PromptEnum) { - return $prompt; - } - - return PromptEnum::tryFrom($prompt); - } } diff --git a/app/Data/Questions/QuestionAskSelectData.php b/app/Data/Questions/QuestionSelectData.php similarity index 73% rename from app/Data/Questions/QuestionAskSelectData.php rename to app/Data/Questions/QuestionSelectData.php index c101378..af6aede 100644 --- a/app/Data/Questions/QuestionAskSelectData.php +++ b/app/Data/Questions/QuestionSelectData.php @@ -6,15 +6,12 @@ use PackageWizard\Installer\Data\Casts\ArrayWrapCast; use PackageWizard\Installer\Data\Casts\TranslatableCast; -use PackageWizard\Installer\Enums\PromptEnum; use PackageWizard\Installer\Enums\TypeEnum; use Spatie\LaravelData\Attributes\WithCast; -class QuestionAskSelectData extends QuestionData +class QuestionSelectData extends QuestionData { - public TypeEnum $type = TypeEnum::Ask; - - public PromptEnum $prompt = PromptEnum::Select; + public TypeEnum $type = TypeEnum::Select; #[WithCast(ArrayWrapCast::class)] public array $replace; diff --git a/app/Data/Questions/QuestionAskTextData.php b/app/Data/Questions/QuestionTextData.php similarity index 82% rename from app/Data/Questions/QuestionAskTextData.php rename to app/Data/Questions/QuestionTextData.php index 4ab2614..04338a3 100644 --- a/app/Data/Questions/QuestionAskTextData.php +++ b/app/Data/Questions/QuestionTextData.php @@ -9,15 +9,12 @@ use PackageWizard\Installer\Data\Casts\ToStringCast; use PackageWizard\Installer\Data\Casts\TranslatableCast; use PackageWizard\Installer\Data\Casts\ValidationCast; -use PackageWizard\Installer\Enums\PromptEnum; use PackageWizard\Installer\Enums\TypeEnum; use Spatie\LaravelData\Attributes\WithCast; -class QuestionAskTextData extends QuestionData +class QuestionTextData extends QuestionData { - public TypeEnum $type = TypeEnum::Ask; - - public PromptEnum $prompt = PromptEnum::Text; + public TypeEnum $type = TypeEnum::Text; #[WithCast(ArrayWrapCast::class)] public array $replace; diff --git a/app/Enums/PromptEnum.php b/app/Enums/PromptEnum.php index 17fd3a2..7590714 100644 --- a/app/Enums/PromptEnum.php +++ b/app/Enums/PromptEnum.php @@ -4,6 +4,7 @@ namespace PackageWizard\Installer\Enums; +/** @deprecated */ enum PromptEnum: string { case Text = 'text'; diff --git a/app/Enums/TypeEnum.php b/app/Enums/TypeEnum.php index 557e8d1..0013f99 100644 --- a/app/Enums/TypeEnum.php +++ b/app/Enums/TypeEnum.php @@ -6,11 +6,12 @@ enum TypeEnum: string { - case Ask = 'ask'; case Author = 'author'; case Date = 'date'; case License = 'license'; case Rename = 'rename'; + case Select = 'select'; + case Text = 'text'; case Year = 'year'; case YearRange = 'yearRange'; } diff --git a/app/Fillers/AskFiller.php b/app/Fillers/AskFiller.php deleted file mode 100644 index 17cbe9f..0000000 --- a/app/Fillers/AskFiller.php +++ /dev/null @@ -1,27 +0,0 @@ -data->prompt) { - PromptEnum::Select => AskSelectFiller::make(data: $this->data), - PromptEnum::Text => AskTextFiller::make(data: $this->data), - }; - } -} diff --git a/app/Fillers/Questions/AskSelectFiller.php b/app/Fillers/Questions/SelectFiller.php similarity index 80% rename from app/Fillers/Questions/AskSelectFiller.php rename to app/Fillers/Questions/SelectFiller.php index 659cfdf..2ec4913 100644 --- a/app/Fillers/Questions/AskSelectFiller.php +++ b/app/Fillers/Questions/SelectFiller.php @@ -4,18 +4,18 @@ namespace PackageWizard\Installer\Fillers\Questions; -use PackageWizard\Installer\Data\Questions\QuestionAskSelectData; +use PackageWizard\Installer\Data\Questions\QuestionSelectData; use PackageWizard\Installer\Data\ReplaceData; use PackageWizard\Installer\Fillers\Filler; use Spatie\LaravelData\Data; use function Laravel\Prompts\select; -/** @method static make(QuestionAskSelectData|Data $data) */ -class AskSelectFiller extends Filler +/** @method static make(QuestionSelectData|Data $data) */ +class SelectFiller extends Filler { public function __construct( - protected QuestionAskSelectData $data + protected QuestionSelectData $data ) {} public function get(): ReplaceData diff --git a/app/Fillers/Questions/AskTextFiller.php b/app/Fillers/Questions/TextFiller.php similarity index 87% rename from app/Fillers/Questions/AskTextFiller.php rename to app/Fillers/Questions/TextFiller.php index dc9e547..177d0ff 100644 --- a/app/Fillers/Questions/AskTextFiller.php +++ b/app/Fillers/Questions/TextFiller.php @@ -6,7 +6,7 @@ use Closure; use Illuminate\Support\Str; -use PackageWizard\Installer\Data\Questions\QuestionAskTextData; +use PackageWizard\Installer\Data\Questions\QuestionTextData; use PackageWizard\Installer\Data\ReplaceData; use PackageWizard\Installer\Fillers\Filler; use PackageWizard\Installer\Helpers\ValidationHelper; @@ -14,11 +14,11 @@ use function Laravel\Prompts\text; -/** @method static make(QuestionAskTextData|Data $data) */ -class AskTextFiller extends Filler +/** @method static make(QuestionTextData|Data $data) */ +class TextFiller extends Filler { public function __construct( - protected QuestionAskTextData $data + protected QuestionTextData $data ) {} public function get(): ?ReplaceData diff --git a/resources/schemas/example-v2.json b/resources/schemas/example-v2.json index 37d85dd..12c75b5 100644 --- a/resources/schemas/example-v2.json +++ b/resources/schemas/example-v2.json @@ -10,7 +10,7 @@ "clean": true }, "authors": [ - [], + { }, { "name": "John Doe", "email": "john@example.com", @@ -170,8 +170,7 @@ "operator": "!=", "value": "MIT License" }, - "type": "ask", - "prompt": "text", + "type": "text", "question": "Some question", "replace": ":some_answer:", "placeholder": "Some kind of auxiliary information" @@ -181,8 +180,7 @@ "for": "author123", "value": "John Doe " }, - "type": "ask", - "prompt": "text", + "type": "text", "question": "form.question.name", "placeholder": "form.eg.name", "default": "foo", @@ -194,8 +192,7 @@ ] }, { - "type": "ask", - "prompt": "select", + "type": "select", "question": "Select one of the options", "options": [ 100, @@ -206,8 +203,7 @@ "replace": ":foo:" }, { - "type": "ask", - "prompt": "select", + "type": "select", "question": "Select one of the options", "options": [ 100, @@ -218,8 +214,7 @@ "replace": ":foo:" }, { - "type": "ask", - "prompt": "select", + "type": "select", "question": "Select one of the options", "options": { "100": "foo", diff --git a/resources/schemas/schema-v2.json b/resources/schemas/schema-v2.json index ddc5b6e..d1e3c0e 100644 --- a/resources/schemas/schema-v2.json +++ b/resources/schemas/schema-v2.json @@ -67,18 +67,10 @@ "type": "array", "items": { "anyOf": [ - { - "$ref": "#/definitions/questionAuthor" - }, - { - "$ref": "#/definitions/questionLicense" - }, - { - "$ref": "#/definitions/questionAskText" - }, - { - "$ref": "#/definitions/questionAskSelect" - } + { "$ref": "#/definitions/questionAuthor" }, + { "$ref": "#/definitions/questionLicense" }, + { "$ref": "#/definitions/questionText" }, + { "$ref": "#/definitions/questionSelect" } ] }, "additionalProperties": false @@ -438,7 +430,7 @@ }, "additionalProperties": false }, - "questionAskText": { + "questionText": { "type": "object", "properties": { "id": { @@ -449,10 +441,6 @@ "$ref": "#/definitions/condition" }, "type": { - "type": "string", - "const": "ask" - }, - "prompt": { "type": "string", "const": "text" }, @@ -466,12 +454,8 @@ }, "default": { "oneOf": [ - { - "type": "string" - }, - { - "type": "integer" - } + { "type": "string" }, + { "type": "integer" } ], "default": "" }, @@ -488,13 +472,12 @@ }, "required": [ "type", - "prompt", "question", "replace" ], "additionalProperties": false }, - "questionAskSelect": { + "questionSelect": { "type": "object", "properties": { "id": { @@ -505,10 +488,6 @@ "$ref": "#/definitions/condition" }, "type": { - "type": "string", - "const": "ask" - }, - "prompt": { "type": "string", "const": "select" }, @@ -519,12 +498,8 @@ "options": { "type": "array", "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - }, + { "type": "string" }, + { "type": "integer" }, { "type": "object", "propertyNames": { @@ -539,12 +514,8 @@ }, "default": { "oneOf": [ - { - "type": "string" - }, - { - "type": "integer" - } + { "type": "string" }, + { "type": "integer" } ] }, "replace": { @@ -557,27 +528,21 @@ }, "required": [ "type", - "prompt", "question", "options", "replace" - ] + ], + "additionalProperties": false }, "valueReplace": { "oneOf": [ - { - "type": "string" - }, + { "type": "string" }, { "type": "array", "items": { "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } + { "type": "string" }, + { "type": "number" } ] }, "uniqueItems": true, @@ -590,9 +555,7 @@ "validation": { "type": "array", "items": [ - { - "type": "string" - } + { "type": "string" } ], "default": null, "uniqueItems": true,