X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c6ad16dba657c82512ae495a4a38b99b8cfa9eeb..refs/heads/development:/app/Api/ApiDocsGenerator.php diff --git a/app/Api/ApiDocsGenerator.php b/app/Api/ApiDocsGenerator.php index 76157c9a5..287c83877 100644 --- a/app/Api/ApiDocsGenerator.php +++ b/app/Api/ApiDocsGenerator.php @@ -2,7 +2,8 @@ namespace BookStack\Api; -use BookStack\Http\Controllers\Api\ApiController; +use BookStack\App\AppVersion; +use BookStack\Http\ApiController; use Exception; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Support\Collection; @@ -16,8 +17,8 @@ use ReflectionMethod; class ApiDocsGenerator { - protected $reflectionClasses = []; - protected $controllerClasses = []; + protected array $reflectionClasses = []; + protected array $controllerClasses = []; /** * Load the docs form the cache if existing @@ -25,15 +26,18 @@ class ApiDocsGenerator */ public static function generateConsideringCache(): Collection { - $appVersion = trim(file_get_contents(base_path('version'))); + $appVersion = AppVersion::get(); $cacheKey = 'api-docs::' . $appVersion; - if (Cache::has($cacheKey) && config('app.env') === 'production') { - $docs = Cache::get($cacheKey); - } else { - $docs = (new ApiDocsGenerator())->generate(); - Cache::put($cacheKey, $docs, 60 * 24); + $isProduction = config('app.env') === 'production'; + $cacheVal = $isProduction ? Cache::get($cacheKey) : null; + + if (!is_null($cacheVal)) { + return $cacheVal; } + $docs = (new ApiDocsGenerator())->generate(); + Cache::put($cacheKey, $docs, 60 * 24); + return $docs; } @@ -102,8 +106,8 @@ class ApiDocsGenerator $this->controllerClasses[$className] = $class; } - $rules = collect($class->getValidationRules()[$methodName] ?? [])->map(function($validations) { - return array_map(function($validation) { + $rules = collect($class->getValidationRules()[$methodName] ?? [])->map(function ($validations) { + return array_map(function ($validation) { return $this->getValidationAsString($validation); }, $validations); })->toArray(); @@ -129,6 +133,7 @@ class ApiDocsGenerator } $class = get_class($validation); + throw new Exception("Cannot provide string representation of rule for class: {$class}"); } @@ -138,9 +143,10 @@ class ApiDocsGenerator protected function parseDescriptionFromMethodComment(string $comment): string { $matches = []; - preg_match_all('/^\s*?\*\s((?![@\s]).*?)$/m', $comment, $matches); + preg_match_all('/^\s*?\*\s?($|((?![\/@\s]).*?))$/m', $comment, $matches); - return implode(' ', $matches[1] ?? []); + $text = implode(' ', $matches[1] ?? []); + return str_replace(' ', "\n", $text); } /**