From 2902ac3cbbc7b2fb6ac5a10e7d0a89b25f55653b Mon Sep 17 00:00:00 2001 From: Evan Villemez Date: Mon, 27 Aug 2012 12:56:19 -0400 Subject: [PATCH] working on apidoc return property --- Annotation/ApiDoc.php | 44 ++++++++++++++++++++ Extractor/ApiDocExtractor.php | 16 ++++++- Tests/Extractor/ApiDocExtratorTest.php | 2 +- Tests/Fixtures/Controller/TestController.php | 11 +++++ Tests/Fixtures/app/config/routing.yml | 6 +++ Tests/Formatter/SimpleFormatterTest.php | 13 +++++- 6 files changed, 88 insertions(+), 4 deletions(-) diff --git a/Annotation/ApiDoc.php b/Annotation/ApiDoc.php index 1c9c9d0..8f29375 100644 --- a/Annotation/ApiDoc.php +++ b/Annotation/ApiDoc.php @@ -27,6 +27,11 @@ class ApiDoc * @var string */ private $input = null; + + /** + * @var string + */ + private $return = null; /** * @var string @@ -62,6 +67,11 @@ class ApiDoc * @var array */ private $parameters = array(); + + /** + * @var array + */ + private $response = array(); /** * @var Route @@ -88,6 +98,10 @@ class ApiDoc if (isset($data['description'])) { $this->description = $data['description']; } + + if (isset($data['return'])) { + $this->return = $data['return']; + } $this->isResource = isset($data['resource']) && $data['resource']; } @@ -126,6 +140,14 @@ class ApiDoc return $this->input; } + /** + * @return string|null + */ + public function getReturn() + { + return $this->return; + } + /** * @return string */ @@ -181,6 +203,24 @@ class ApiDoc { $this->parameters = $parameters; } + + /** + * Sets the responsed data as processed by the parsers - same format as parameters + * + * @param array $response + */ + public function setResponse(array $response) + { + $this->response = $response; + } + + /** + * @return array + */ + public function getResponse() + { + return $this->response; + } /** * @param Route $route @@ -227,6 +267,10 @@ class ApiDoc if ($requirements = $this->requirements) { $data['requirements'] = $requirements; } + + if ($response = $this->response) { + $data['response'] = $response; + } return $data; } diff --git a/Extractor/ApiDocExtractor.php b/Extractor/ApiDocExtractor.php index 6eb028f..771547a 100644 --- a/Extractor/ApiDocExtractor.php +++ b/Extractor/ApiDocExtractor.php @@ -223,7 +223,7 @@ class ApiDocExtractor // doc $annotation->setDocumentation($this->getDocCommentText($method)); - // input + // input (populates 'parameters' for the formatters) if (null !== $input = $annotation->getInput()) { $parameters = array(); @@ -244,6 +244,20 @@ class ApiDocExtractor $annotation->setParameters($parameters); } + // return (populates 'response' for the formatters) + if (null !== $return = $annotation->getReturn()) { + $response = array(); + + foreach ($this->parsers as $parser) { + if ($parser->supports($return)) { + $response = $parser->parse($return); + break; + } + } + + $annotation->setResponse($response); + } + // requirements $requirements = array(); foreach ($route->getRequirements() as $name => $value) { diff --git a/Tests/Extractor/ApiDocExtratorTest.php b/Tests/Extractor/ApiDocExtratorTest.php index a15de3a..700c01e 100644 --- a/Tests/Extractor/ApiDocExtratorTest.php +++ b/Tests/Extractor/ApiDocExtratorTest.php @@ -22,7 +22,7 @@ class ApiDocExtractorTest extends WebTestCase $data = $extractor->all(); $this->assertTrue(is_array($data)); - $this->assertCount(11, $data); + $this->assertCount(12, $data); foreach ($data as $d) { $this->assertTrue(is_array($d)); diff --git a/Tests/Fixtures/Controller/TestController.php b/Tests/Fixtures/Controller/TestController.php index 16c8e04..ec52f1b 100644 --- a/Tests/Fixtures/Controller/TestController.php +++ b/Tests/Fixtures/Controller/TestController.php @@ -100,4 +100,15 @@ class TestController public function jmsInputTestAction() { } + + /** + * @ApiDoc( + * description="Testing return", + * return="test_type" + * ) + */ + public function jmsReturnTestAction() + { + } + } diff --git a/Tests/Fixtures/app/config/routing.yml b/Tests/Fixtures/app/config/routing.yml index 4a3e6f2..25f5ac5 100644 --- a/Tests/Fixtures/app/config/routing.yml +++ b/Tests/Fixtures/app/config/routing.yml @@ -46,6 +46,12 @@ test_route_9: requirements: _method: POST +test_route_10: + pattern: /jms-return-test + defaults: { _controller: NelmioApiDocTestBundle:Test:jmsReturnTest } + requirements: + _method: GET + test_service_route_1: pattern: /tests.{_format} defaults: { _controller: nemlio.test.controller:indexAction, _format: json } diff --git a/Tests/Formatter/SimpleFormatterTest.php b/Tests/Formatter/SimpleFormatterTest.php index 6868d28..b571a0f 100644 --- a/Tests/Formatter/SimpleFormatterTest.php +++ b/Tests/Formatter/SimpleFormatterTest.php @@ -215,6 +215,15 @@ class SimpleFormatterTest extends WebTestCase 'description' => 'Testing JMS' ), 4 => + array( + 'method' => 'GET', + 'uri' => '/jms-return-test', + 'description' => 'Testing return', + 'response' => array( + + ) + ), + 5 => array( 'method' => 'ANY', 'uri' => '/my-commented/{id}/{page}', @@ -226,7 +235,7 @@ class SimpleFormatterTest extends WebTestCase 'description' => 'This method is useful to test if the getDocComment works.', 'documentation' => "This method is useful to test if the getDocComment works.\nAnd, it supports multilines until the first '@' char." ), - 5 => + 6 => array( 'method' => 'ANY', 'uri' => '/yet-another/{id}', @@ -235,7 +244,7 @@ class SimpleFormatterTest extends WebTestCase 'id' => array('type' => '', 'description' => '', 'requirement' => '\d+') ), ), - 6 => + 7 => array( 'method' => 'GET', 'uri' => '/z-action-with-query-param',