Browse Source

Support partial resource controller (fixes #426)

An Phan 6 years ago
parent
commit
b530057e68

+ 8 - 0
src/Commands/GenerateDocumentation.php

@@ -3,6 +3,7 @@
 namespace Mpociot\ApiDoc\Commands;
 
 use ReflectionClass;
+use ReflectionException;
 use Illuminate\Routing\Route;
 use Illuminate\Console\Command;
 use Mpociot\Reflection\DocBlock;
@@ -215,12 +216,19 @@ class GenerateDocumentation extends Command
      * @param $route
      *
      * @return bool
+     * @throws ReflectionException
      */
     private function isRouteVisibleForDocumentation($route)
     {
         list($class, $method) = explode('@', $route);
         $reflection = new ReflectionClass($class);
+
+        if (!$reflection->hasMethod($method)) {
+            return false;
+        }
+
         $comment = $reflection->getMethod($method)->getDocComment();
+
         if ($comment) {
             $phpdoc = new DocBlock($comment);
 

+ 20 - 0
tests/Fixtures/TestPartialResourceController.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Mpociot\ApiDoc\Tests\Fixtures;
+
+class TestPartialResourceController
+{
+    /**
+     * @group Group A
+     */
+    public function index()
+    {
+    }
+
+    /**
+     * @group Group B
+     */
+    public function update()
+    {
+    }
+}

+ 23 - 0
tests/GenerateDocumentationTest.php

@@ -2,6 +2,7 @@
 
 namespace Mpociot\ApiDoc\Tests;
 
+use ReflectionException;
 use RecursiveIteratorIterator;
 use RecursiveDirectoryIterator;
 use Orchestra\Testbench\TestCase;
@@ -11,6 +12,7 @@ use Mpociot\ApiDoc\Tests\Fixtures\TestController;
 use Mpociot\ApiDoc\ApiDocGeneratorServiceProvider;
 use Illuminate\Support\Facades\Route as RouteFacade;
 use Mpociot\ApiDoc\Tests\Fixtures\TestResourceController;
+use Mpociot\ApiDoc\Tests\Fixtures\TestPartialResourceController;
 
 class GenerateDocumentationTest extends TestCase
 {
@@ -256,6 +258,27 @@ class GenerateDocumentationTest extends TestCase
         $this->assertContains('Лорем ипсум долор сит амет', $generatedMarkdown);
     }
 
+    /** @test */
+    public function supports_partial_resource_controller()
+    {
+        RouteFacade::resource('/api/partial', TestPartialResourceController::class);
+
+        config(['apidoc.routes.0.prefixes' => ['api/*']]);
+
+        $thrownException = null;
+
+        try {
+            $this->artisan('apidoc:generate');
+        } catch (ReflectionException $e) {
+            $thrownException = $e;
+        }
+
+        $this->assertNull($thrownException);
+        $generatedMarkdown = file_get_contents(__DIR__.'/../public/docs/source/index.md');
+        $this->assertContains('Group A', $generatedMarkdown);
+        $this->assertContains('Group B', $generatedMarkdown);
+    }
+
     /**
      * @param string $command
      * @param array $parameters