19
19
use Symfony \Bundle \MakerBundle \InputAwareMakerInterface ;
20
20
use Symfony \Bundle \MakerBundle \InputConfiguration ;
21
21
use Symfony \Bundle \MakerBundle \Maker \Common \InstallDependencyTrait ;
22
- use Symfony \Bundle \MakerBundle \Str ;
23
- use Symfony \Bundle \MakerBundle \Util \ClassNameDetails ;
24
- use Symfony \Bundle \MakerBundle \Util \UseStatementGenerator ;
22
+ use Symfony \Bundle \MakerBundle \Util \ClassSource \Model \ClassData ;
25
23
use Symfony \Bundle \MakerBundle \Util \YamlSourceManipulator ;
26
24
use Symfony \Bundle \MakerBundle \Validator ;
27
25
use Symfony \Component \Console \Command \Command ;
@@ -146,21 +144,37 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma
146
144
147
145
public function generate (InputInterface $ input , ConsoleStyle $ io , Generator $ generator ): void
148
146
{
149
- $ requestParserDetails = $ this ->generator ->createClassNameDetails (
150
- Str::asClassName ($ this ->name .'RequestParser ' ),
151
- 'Webhook \\'
147
+ $ requestParserClassData = ClassData::create (
148
+ class: \sprintf ('Webhook \\%s ' , $ input ->getArgument ('name ' )),
149
+ suffix: 'RequestParser ' ,
150
+ extendsClass: AbstractRequestParser::class,
151
+ useStatements: [
152
+ JsonException::class,
153
+ Request::class,
154
+ Response::class,
155
+ RemoteEvent::class,
156
+ AbstractRequestParser::class,
157
+ RejectWebhookException::class,
158
+ RequestMatcherInterface::class,
159
+ ],
152
160
);
153
- $ remoteEventConsumerDetails = $ this ->generator ->createClassNameDetails (
154
- Str::asClassName ($ this ->name .'WebhookConsumer ' ),
155
- 'RemoteEvent \\'
161
+
162
+ $ remoteEventClassData = ClassData::create (
163
+ class: \sprintf ('RemoteEvent \\%s ' , $ input ->getArgument ('name ' )),
164
+ suffix: 'WebhookConsumer ' ,
165
+ useStatements: [
166
+ AsRemoteEventConsumer::class,
167
+ ConsumerInterface::class,
168
+ RemoteEvent::class,
169
+ ],
156
170
);
157
171
158
- $ this ->addToYamlConfig ($ this ->name , $ requestParserDetails );
172
+ $ this ->addToYamlConfig ($ this ->name , $ requestParserClassData );
159
173
160
- $ this ->generateRequestParser (requestParserDetails: $ requestParserDetails );
174
+ $ this ->generateRequestParser ($ requestParserClassData );
161
175
162
- $ this ->generator ->generateClass (
163
- $ remoteEventConsumerDetails -> getFullName () ,
176
+ $ this ->generator ->generateClassFromClassData (
177
+ $ remoteEventClassData ,
164
178
'webhook/WebhookConsumer.tpl.php ' ,
165
179
[
166
180
'webhook_name ' => $ this ->name ,
@@ -178,7 +192,7 @@ private function verifyWebhookName(string $entityName): bool
178
192
return preg_match (self ::WEBHOOK_NAME_PATTERN , $ entityName );
179
193
}
180
194
181
- private function addToYamlConfig (string $ webhookName , ClassNameDetails $ requestParserDetails ): void
195
+ private function addToYamlConfig (string $ webhookName , ClassData $ requestParserClassData ): void
182
196
{
183
197
$ yamlConfig = Yaml::dump (['framework ' => ['webhook ' => ['routing ' => []]]], 4 , 2 );
184
198
if ($ this ->fileManager ->fileExists (self ::WEBHOOK_CONFIG_PATH )) {
@@ -193,7 +207,7 @@ private function addToYamlConfig(string $webhookName, ClassNameDetails $requestP
193
207
}
194
208
195
209
$ arrayConfig ['framework ' ]['webhook ' ]['routing ' ][$ webhookName ] = [
196
- 'service ' => $ requestParserDetails -> getFullName (),
210
+ 'service ' => $ requestParserClassData -> getFullClassName (),
197
211
'secret ' => 'your_secret_here ' ,
198
212
];
199
213
$ this ->ysm ->setData (
@@ -204,43 +218,31 @@ private function addToYamlConfig(string $webhookName, ClassNameDetails $requestP
204
218
/**
205
219
* @throws \Exception
206
220
*/
207
- private function generateRequestParser (ClassNameDetails $ requestParserDetails ): void
221
+ private function generateRequestParser (ClassData $ requestParserClassData ): void
208
222
{
209
- $ useStatements = new UseStatementGenerator ([
210
- JsonException::class,
211
- Request::class,
212
- Response::class,
213
- RemoteEvent::class,
214
- AbstractRequestParser::class,
215
- RejectWebhookException::class,
216
- RequestMatcherInterface::class,
217
- ]);
218
-
219
223
// Use a ChainRequestMatcher if multiple matchers have been added OR if none (will be printed with an empty array)
220
224
$ useChainRequestsMatcher = false ;
221
225
222
226
if (1 !== \count ($ this ->requestMatchers )) {
223
227
$ useChainRequestsMatcher = true ;
224
- $ useStatements ->addUseStatement (ChainRequestMatcher::class);
228
+ $ requestParserClassData ->addUseStatement (ChainRequestMatcher::class);
225
229
}
226
230
227
231
$ requestMatcherArguments = [];
228
232
229
233
foreach ($ this ->requestMatchers as $ requestMatcherClass ) {
230
- $ useStatements ->addUseStatement ($ requestMatcherClass );
234
+ $ requestParserClassData ->addUseStatement ($ requestMatcherClass );
231
235
$ requestMatcherArguments [$ requestMatcherClass ] = $ this ->getRequestMatcherArguments (requestMatcherClass: $ requestMatcherClass );
232
236
233
237
if (ExpressionRequestMatcher::class === $ requestMatcherClass ) {
234
- $ useStatements ->addUseStatement (Expression::class);
235
- $ useStatements ->addUseStatement (ExpressionLanguage::class);
238
+ $ requestParserClassData ->addUseStatement ([Expression::class, ExpressionLanguage::class]);
236
239
}
237
240
}
238
241
239
- $ this ->generator ->generateClass (
240
- $ requestParserDetails -> getFullName () ,
242
+ $ this ->generator ->generateClassFromClassData (
243
+ $ requestParserClassData ,
241
244
'webhook/RequestParser.tpl.php ' ,
242
245
[
243
- 'use_statements ' => $ useStatements ,
244
246
'use_chained_requests_matcher ' => $ useChainRequestsMatcher ,
245
247
'request_matchers ' => $ this ->requestMatchers ,
246
248
'request_matcher_arguments ' => $ requestMatcherArguments ,
0 commit comments