/** * emulate swagger. save analyzed data to object * * @param string $basePath */ public static function analyze($basePath) { if (isset(self::$analyzedData)) { return; } if (isset($_ENV['swagger-assert-cache']) && $_ENV['swagger-assert-cache'] && file_exists(self::CACHE_FILE)) { self::$analyzedData = json_decode(file_get_contents(self::CACHE_FILE), true); return; } $swagger = new Swagger([$basePath], []); $resourceOptions = ['output' => 'json', 'defaultBasePath' => 'dummy string', 'defaultApiVersion' => null, 'defaultSwaggerVersion' => '1.2']; $analyzedData = []; foreach ($swagger->getResourceNames() as $resourceName) { $annotatedData = json_decode($swagger->getResource($resourceName, $resourceOptions), true); $resourceName = str_replace('/', '-', ltrim($resourceName, '/')); $analyzedData[$resourceName] = $annotatedData; } if (isset($_ENV['swagger-assert-cache']) && $_ENV['swagger-assert-cache']) { file_put_contents(self::CACHE_FILE, json_encode($analyzedData)); } self::$analyzedData = $analyzedData; }
/** * Show an specific Resource */ public function showResource($name) { $options = Config::get('laravel-swagger::getResourceOptions'); $resourceName = "/" . str_replace("-", "/", $name); $excludedPath = Config::get('laravel-swagger::excludedPath'); $swagger = new Swagger($this->getPaths(), $excludedPath); if (Config::get('laravel-swagger::cache') && Cache::has('resource_' . $resourceName)) { $resource = Cache::get('resource_' . $resourceName); } else { if (!in_array($resourceName, $swagger->getResourceNames())) { App::abort(404, 'Resource not found'); } // Pet demo uses the main laravel-swagger route. if ($resourceName == '/petdemo') { $options['defaultBasePath'] = route('swagger-index'); } $resource = $swagger->getResource($resourceName, $options); } if (Config::get('laravel-swagger::cache') && !Cache::has('resource_' . $resourceName)) { Cache::put('resource_' . $resourceName, $resource, $this->getExpireAt()); } return $resource; }
$docDir = Config::get('swagger.doc-dir'); if (!File::exists($docDir) || is_writable($docDir)) { // delete all existing documentation if (File::exists($docDir)) { File::deleteDirectory($docDir); } File::makeDirectory($docDir); $defaultBasePath = Config::get('swagger.default-base-path'); $defaultApiVersion = Config::get('swagger.default-api-version'); $defaultSwaggerVersion = Config::get('swagger.default-swagger-version'); $excludeDirs = Config::get('swagger.excludes'); $swagger = new Swagger($appDir, $excludeDirs); $resourceList = $swagger->getResourceList(array('output' => 'array', 'apiVersion' => $defaultApiVersion, 'swaggerVersion' => $defaultSwaggerVersion)); $resourceOptions = array('output' => 'json', 'defaultSwaggerVersion' => $resourceList['swaggerVersion'], 'defaultBasePath' => $defaultBasePath); $output = array(); foreach ($swagger->getResourceNames() as $resourceName) { $json = $swagger->getResource($resourceName, $resourceOptions); $resourceName = str_replace(DIRECTORY_SEPARATOR, '-', ltrim($resourceName, DIRECTORY_SEPARATOR)); $output[$resourceName] = $json; } $filename = $docDir . '/api-docs.json'; file_put_contents($filename, Swagger::jsonEncode($resourceList, true)); foreach ($output as $name => $json) { $name = str_replace(DIRECTORY_SEPARATOR, '-', ltrim($name, DIRECTORY_SEPARATOR)); $filename = $docDir . '/' . $name . '.json'; file_put_contents($filename, $json); } } } if (Config::get('swagger.behind-reverse-proxy')) { $proxy = Request::server('REMOTE_ADDR');