diff --git a/DependencyInjection/EXSystApiDocExtension.php b/DependencyInjection/EXSystApiDocExtension.php
index 6d2fc06..7aef328 100644
--- a/DependencyInjection/EXSystApiDocExtension.php
+++ b/DependencyInjection/EXSystApiDocExtension.php
@@ -13,6 +13,7 @@ namespace EXSyst\Bundle\ApiDocBundle\DependencyInjection;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use phpDocumentor\Reflection\DocBlockFactory;
+use Swagger\Annotations\Swagger;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -40,10 +41,13 @@ class EXSystApiDocExtension extends Extension
// Removes useless services
if (!class_exists(ApiDoc::class)) {
- $container->removeDefinition('exsyst_api_doc.routing_extractors.nelmio_annotation');
+ $container->removeDefinition('exsyst_api_doc.route_describers.nelmio_annotation');
}
if (!class_exists(DocBlockFactory::class)) {
- $container->removeDefinition('exsyst_api_doc.routing_extractors.php_doc');
+ $container->removeDefinition('exsyst_api_doc.route_describers.php_doc');
+ }
+ if (!class_exists(Swagger::class)) {
+ $container->removeDefinition('exsyst_api_doc.describers.swagger_php');
}
}
}
diff --git a/Describer/ExternalDocDescriber.php b/Describer/ExternalDocDescriber.php
new file mode 100644
index 0000000..10f74b1
--- /dev/null
+++ b/Describer/ExternalDocDescriber.php
@@ -0,0 +1,52 @@
+externalDoc = $externalDoc;
+ $this->strategy = $strategy;
+ }
+
+ public function describe(Swagger $api)
+ {
+ $externalDoc = $this->getExternalDoc();
+ $api->merge($externalDoc, $this->strategy);
+ }
+
+ private function getExternalDoc(): array
+ {
+ if (is_callable($this->externalDoc)) {
+ return call_user_func($this->externalDoc);
+ }
+
+ return $this->externalDoc;
+ }
+}
diff --git a/Describer/RouteDescriber.php b/Describer/RouteDescriber.php
index 42668c3..74e892a 100644
--- a/Describer/RouteDescriber.php
+++ b/Describer/RouteDescriber.php
@@ -12,7 +12,7 @@
namespace EXSyst\Bundle\ApiDocBundle\Describer;
use Doctrine\Common\Util\ClassUtils;
-use EXSyst\Bundle\ApiDocBundle\Extractor\Routing\RouteExtractorInterface;
+use EXSyst\Bundle\ApiDocBundle\RouteDescriber\RouteDescriberInterface;
use gossi\swagger\Swagger;
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
use Symfony\Component\Routing\Route;
@@ -34,7 +34,7 @@ class RouteDescriber implements DescriberInterface
$this->routeDescribers = $routeDescribers;
}
- public function describe(Swagger $swagger)
+ public function describe(Swagger $api)
{
if (0 === count($this->routeDescribers)) {
return;
@@ -45,7 +45,7 @@ class RouteDescriber implements DescriberInterface
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
// Extract as many informations as possible about this route
foreach ($this->routeDescribers as $describer) {
- $describer->describe($swagger, $route, $method);
+ $describer->describe($api, $route, $method);
}
}
}
diff --git a/Describer/SwaggerPhpDescriber.php b/Describer/SwaggerPhpDescriber.php
new file mode 100644
index 0000000..1c4b015
--- /dev/null
+++ b/Describer/SwaggerPhpDescriber.php
@@ -0,0 +1,46 @@
+projectPath = $projectPath;
+ $this->overwrite = $overwrite;
+ }
+
+ public function describe(Swagger $api)
+ {
+ $annotation = \Swagger\scan($this->projectPath);
+
+ $api->merge($this->normalize($annotation), $this->overwrite);
+ }
+
+ private function normalize($annotation)
+ {
+ return json_decode(json_encode($annotation));
+ }
+}
diff --git a/Resources/config/services.xml b/Resources/config/services.xml
index 86fbf2d..3fe3636 100644
--- a/Resources/config/services.xml
+++ b/Resources/config/services.xml
@@ -9,6 +9,12 @@
+
+ %kernel.root_dir%
+
+
+
+
diff --git a/RouteDescriber/NelmioAnnotationDescriber.php b/RouteDescriber/NelmioAnnotationDescriber.php
index 7c3a344..e14d584 100644
--- a/RouteDescriber/NelmioAnnotationDescriber.php
+++ b/RouteDescriber/NelmioAnnotationDescriber.php
@@ -101,10 +101,10 @@ class NelmioAnnotationDescriber implements RouteDescriberInterface
$items = $items->getItems();
} while ('[]' === substr($requirement, -2));
- $items->setType(Swagger::T_STRING);
+ $items->setType('string');
$items->setFormat($requirement);
} else {
- $parameter->setType(Swagger::T_STRING);
+ $parameter->setType('string');
$parameter->setFormat($requirement);
}
diff --git a/RouteDescriber/RouteMetadataDescriber.php b/RouteDescriber/RouteMetadataDescriber.php
index 271d312..b0421a6 100644
--- a/RouteDescriber/RouteMetadataDescriber.php
+++ b/RouteDescriber/RouteMetadataDescriber.php
@@ -26,7 +26,7 @@ class RouteMetadataDescriber implements RouteDescriberInterface
foreach ($route->getRequirements() as $parameterName => $requirement) {
$parameter = $operation->getParameters()->get($parameterName, 'path');
$parameter->setRequired(true);
- $parameter->setType(Swagger::T_STRING);
+ $parameter->setType('string');
$parameter->setFormat($requirement);
}
}
diff --git a/Tests/Functional/Fixtures/SwaggerPhp/Info.php b/Tests/Functional/Fixtures/SwaggerPhp/Info.php
new file mode 100644
index 0000000..29ede8c
--- /dev/null
+++ b/Tests/Functional/Fixtures/SwaggerPhp/Info.php
@@ -0,0 +1,24 @@
+assertTrue($operation->getDeprecated());
}
+ public function testSwaggerPhpInfo()
+ {
+ $api = $this->getSwaggerDefinition();
+ $info = $api->getInfo();
+
+ $this->assertEquals('My Awesome App', $info->getTitle());
+ $this->assertEquals('1.3', $info->getVersion());
+ }
+
private function getSwaggerDefinition()
{
static::createClient();
diff --git a/composer.json b/composer.json
index 6ea2e92..66f9804 100644
--- a/composer.json
+++ b/composer.json
@@ -9,17 +9,18 @@
}
],
"require": {
- "php": ">=7.0",
+ "php": "^7.0",
"symfony/framework-bundle": "^3.2@dev",
- "gossi/swagger": "^0.2"
+ "exsyst/swagger": "dev-master"
},
"require-dev": {
- "symfony/browser-kit": "~2.8|~3.0",
+ "symfony/browser-kit": "^2.8|^3.0",
"symfony/phpunit-bridge": "^3.2@dev",
- "sensio/framework-extra-bundle": "~3.0",
+ "sensio/framework-extra-bundle": "^3.0",
"nelmio/api-doc-bundle": "^2.0",
"phpdocumentor/reflection-docblock": "^3.1",
- "phpunit/phpunit": "^5.4"
+ "phpunit/phpunit": "^5.4",
+ "zircote/swagger-php": "^2.0"
},
"suggest": {
"nelmio/api-doc-bundle": "For using the ApiDoc annotation.",