@@ -22,7 +22,8 @@ class GenerateDocumentation extends Command
2222 */
2323 protected $ signature = 'api:generate
2424 {--output=public/docs : The output path for the generated documentation}
25- {--routePrefix= : The route prefix to use for generation}
25+ {--routeDomain= : The route domain (or domains) to use for generation}
26+ {--routePrefix= : The route prefix (or prefixes) to use for generation}
2627 {--routes=* : The route names to use for generation}
2728 {--middleware= : The middleware to use for generation}
2829 {--noResponseCalls : Disable API response calls}
@@ -68,23 +69,37 @@ public function handle()
6869 }
6970
7071 $ allowedRoutes = $ this ->option ('routes ' );
72+ $ routeDomain = $ this ->option ('routeDomain ' );
7173 $ routePrefix = $ this ->option ('routePrefix ' );
7274 $ middleware = $ this ->option ('middleware ' );
7375
7476 $ this ->setUserToBeImpersonated ($ this ->option ('actAsUserId ' ));
7577
76- if ($ routePrefix === null && ! count ($ allowedRoutes ) && $ middleware === null ) {
77- $ this ->error ('You must provide either a route prefix or a route or a middleware to generate the documentation. ' );
78+ if ($ routePrefix === null && $ routeDomain === null && ! count ($ allowedRoutes ) && $ middleware === null ) {
79+ $ this ->error ('You must provide either a route prefix, a route domain, a route or a middleware to generate the documentation. ' );
7880
7981 return false ;
8082 }
8183
8284 $ generator ->prepareMiddleware ($ this ->option ('useMiddlewares ' ));
8385
86+ $ routePrefixes = explode (', ' , $ routePrefix ?: '* ' );
87+ $ routeDomains = explode (', ' , $ routeDomain ?: '* ' );
88+
89+ $ parsedRoutes = [];
90+
8491 if ($ this ->option ('router ' ) === 'laravel ' ) {
85- $ parsedRoutes = $ this ->processLaravelRoutes ($ generator , $ allowedRoutes , $ routePrefix , $ middleware );
92+ foreach ($ routeDomains as $ routeDomain ) {
93+ foreach ($ routePrefixes as $ routePrefix ) {
94+ $ parsedRoutes += $ this ->processLaravelRoutes ($ generator , $ allowedRoutes , $ routeDomain , $ routePrefix , $ middleware );
95+ }
96+ }
8697 } else {
87- $ parsedRoutes = $ this ->processDingoRoutes ($ generator , $ allowedRoutes , $ routePrefix , $ middleware );
98+ foreach ($ routeDomains as $ routeDomain ) {
99+ foreach ($ routePrefixes as $ routePrefix ) {
100+ $ parsedRoutes += $ this ->processDingoRoutes ($ generator , $ allowedRoutes , $ routeDomain , $ routePrefix , $ middleware );
101+ }
102+ }
88103 }
89104 $ parsedRoutes = collect ($ parsedRoutes )->groupBy ('resource ' )->sort (function ($ a , $ b ) {
90105 return strcmp ($ a ->first ()['resource ' ], $ b ->first ()['resource ' ]);
@@ -125,10 +140,6 @@ private function writeMarkdown($parsedRoutes)
125140 $ generatedDocumentation = file_get_contents ($ targetFile );
126141 $ compareDocumentation = file_get_contents ($ compareFile );
127142
128- if (preg_match ('/<!-- START_INFO -->(.*)<!-- END_INFO -->/is ' , $ generatedDocumentation , $ generatedInfoText )) {
129- $ infoText = trim ($ generatedInfoText [1 ], "\n" );
130- }
131-
132143 if (preg_match ('/---(.*)--- \\s<!-- START_INFO -->/is ' , $ generatedDocumentation , $ generatedFrontmatter )) {
133144 $ frontmatter = trim ($ generatedFrontmatter [1 ], "\n" );
134145 }
@@ -222,12 +233,12 @@ private function setUserToBeImpersonated($actAs)
222233 if (! empty ($ actAs )) {
223234 if (version_compare ($ this ->laravel ->version (), '5.2.0 ' , '< ' )) {
224235 $ userModel = config ('auth.model ' );
225- $ user = $ userModel ::find (( int ) $ actAs );
236+ $ user = $ userModel ::find ($ actAs );
226237 $ this ->laravel ['auth ' ]->setUser ($ user );
227238 } else {
228239 $ provider = $ this ->option ('authProvider ' );
229240 $ userModel = config ("auth.providers. $ provider.model " );
230- $ user = $ userModel ::find (( int ) $ actAs );
241+ $ user = $ userModel ::find ($ actAs );
231242 $ this ->laravel ['auth ' ]->guard ($ this ->option ('authGuard ' ))->setUser ($ user );
232243 }
233244 }
@@ -248,20 +259,25 @@ private function getRoutes()
248259 /**
249260 * @param AbstractGenerator $generator
250261 * @param $allowedRoutes
262+ * @param $routeDomain
251263 * @param $routePrefix
252264 *
253265 * @return array
254266 */
255- private function processLaravelRoutes (AbstractGenerator $ generator , $ allowedRoutes , $ routePrefix , $ middleware )
267+ private function processLaravelRoutes (AbstractGenerator $ generator , $ allowedRoutes , $ routeDomain , $ routePrefix , $ middleware )
256268 {
257269 $ withResponse = $ this ->option ('noResponseCalls ' ) === false ;
258270 $ routes = $ this ->getRoutes ();
259271 $ bindings = $ this ->getBindings ();
260272 $ parsedRoutes = [];
261273 foreach ($ routes as $ route ) {
262- if (in_array ($ route ->getName (), $ allowedRoutes ) || str_is ($ routePrefix , $ generator ->getUri ($ route )) || in_array ($ middleware , $ route ->middleware ())) {
274+ if (in_array ($ route ->getName (), $ allowedRoutes )
275+ || (str_is ($ routeDomain , $ generator ->getDomain ($ route ))
276+ && str_is ($ routePrefix , $ generator ->getUri ($ route )))
277+ || in_array ($ middleware , $ route ->middleware ())
278+ ) {
263279 if ($ this ->isValidRoute ($ route ) && $ this ->isRouteVisibleForDocumentation ($ route ->getAction ()['uses ' ])) {
264- $ parsedRoutes [] = $ generator ->processRoute ($ route , $ bindings , $ this ->option ('header ' ), $ withResponse );
280+ $ parsedRoutes [] = $ generator ->processRoute ($ route , $ bindings , $ this ->option ('header ' ), $ withResponse && in_array ( ' GET ' , $ generator -> getMethods ( $ route )) );
265281 $ this ->info ('Processed route: [ ' .implode (', ' , $ generator ->getMethods ($ route )).'] ' .$ generator ->getUri ($ route ));
266282 } else {
267283 $ this ->warn ('Skipping route: [ ' .implode (', ' , $ generator ->getMethods ($ route )).'] ' .$ generator ->getUri ($ route ));
@@ -275,18 +291,25 @@ private function processLaravelRoutes(AbstractGenerator $generator, $allowedRout
275291 /**
276292 * @param AbstractGenerator $generator
277293 * @param $allowedRoutes
294+ * @param $routeDomain
278295 * @param $routePrefix
279296 *
280297 * @return array
281298 */
282- private function processDingoRoutes (AbstractGenerator $ generator , $ allowedRoutes , $ routePrefix , $ middleware )
299+ private function processDingoRoutes (AbstractGenerator $ generator , $ allowedRoutes , $ routeDomain , $ routePrefix , $ middleware )
283300 {
284301 $ withResponse = $ this ->option ('noResponseCalls ' ) === false ;
285302 $ routes = $ this ->getRoutes ();
286303 $ bindings = $ this ->getBindings ();
287304 $ parsedRoutes = [];
288305 foreach ($ routes as $ route ) {
289- if (empty ($ allowedRoutes ) || in_array ($ route ->getName (), $ allowedRoutes ) || str_is ($ routePrefix , $ route ->uri ()) || in_array ($ middleware , $ route ->middleware ())) {
306+ if (empty ($ allowedRoutes )
307+ // TODO extract this into a method
308+ || in_array ($ route ->getName (), $ allowedRoutes )
309+ || (str_is ($ routeDomain , $ generator ->getDomain ($ route ))
310+ && str_is ($ routePrefix , $ generator ->getUri ($ route )))
311+ || in_array ($ middleware , $ route ->middleware ())
312+ ) {
290313 if ($ this ->isValidRoute ($ route ) && $ this ->isRouteVisibleForDocumentation ($ route ->getAction ()['uses ' ])) {
291314 $ parsedRoutes [] = $ generator ->processRoute ($ route , $ bindings , $ this ->option ('header ' ), $ withResponse );
292315 $ this ->info ('Processed route: [ ' .implode (', ' , $ route ->getMethods ()).'] ' .$ route ->uri ());
0 commit comments