diff --git a/src/Lexers/ControllerLexer.php b/src/Lexers/ControllerLexer.php index d18e1c60..8118eb08 100644 --- a/src/Lexers/ControllerLexer.php +++ b/src/Lexers/ControllerLexer.php @@ -30,9 +30,10 @@ public function analyze(array $tokens): array $controller = new Controller($name); if (isset($definition['resource'])) { - $resource_definition = $this->generateResourceTokens($controller, $this->methodsForResource($definition['resource'])); + $resource_methods = $this->methodsForResource($definition['resource']); + $resource_definition = $this->generateResourceTokens($controller, $resource_methods); - if ($definition['resource'] === 'api') { + if ($this->hasOnlyApiResourceMethods($resource_methods)) { $controller->setApiResource(true); } @@ -139,6 +140,13 @@ private function methodsForResource(string $type) return ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy']; } - return array_map('trim', explode(',', $type)); + return array_map('trim', explode(',', strtolower($type))); + } + + private function hasOnlyApiResourceMethods(array $methods) + { + return collect($methods)->every(function ($item, $key) { + return Str::startsWith($item, 'api.'); + }); } } diff --git a/tests/Feature/Lexers/ControllerLexerTest.php b/tests/Feature/Lexers/ControllerLexerTest.php index 2a1a1c40..e7635a23 100644 --- a/tests/Feature/Lexers/ControllerLexerTest.php +++ b/tests/Feature/Lexers/ControllerLexerTest.php @@ -202,7 +202,7 @@ public function it_returns_an_api_resource_controller() $tokens = [ 'controllers' => [ 'Comment' => [ - 'resource' => 'api' + 'resource' => 'api.index, api.store, api.show, api.update' ] ] ]; @@ -232,12 +232,6 @@ public function it_returns_an_api_resource_controller() 'resource' => 'comment' ]) ->andReturn(['api-update-statements']); - $this->statementLexer->expects('analyze') - ->with([ - 'delete' => 'comment', - 'respond' => 200 - ]) - ->andReturn(['api-destroy-statements']); $actual = $this->subject->analyze($tokens); @@ -248,7 +242,7 @@ public function it_returns_an_api_resource_controller() $this->assertTrue($controller->isApiResource()); $methods = $controller->methods(); - $this->assertCount(5, $methods); + $this->assertCount(4, $methods); $this->assertCount(1, $methods['index']); $this->assertEquals('api-index-statements', $methods['index'][0]); @@ -258,8 +252,6 @@ public function it_returns_an_api_resource_controller() $this->assertEquals('api-show-statements', $methods['show'][0]); $this->assertCount(1, $methods['update']); $this->assertEquals('api-update-statements', $methods['update'][0]); - $this->assertCount(1, $methods['destroy']); - $this->assertEquals('api-destroy-statements', $methods['destroy'][0]); } /** diff --git a/tests/fixtures/definitions/multiple-resource-controllers.bp b/tests/fixtures/definitions/multiple-resource-controllers.bp index c7ffe1b8..28001230 100644 --- a/tests/fixtures/definitions/multiple-resource-controllers.bp +++ b/tests/fixtures/definitions/multiple-resource-controllers.bp @@ -26,10 +26,10 @@ controllers: resource File: - resource: api + resource: api.store, api.show, api.update Category: - resource + resource: index, api.destroy Gallery: resource: api diff --git a/tests/fixtures/routes/multiple-resource-controllers-api.php b/tests/fixtures/routes/multiple-resource-controllers-api.php index b94d068e..08252ba2 100644 --- a/tests/fixtures/routes/multiple-resource-controllers-api.php +++ b/tests/fixtures/routes/multiple-resource-controllers-api.php @@ -1,5 +1,5 @@ -Route::apiResource('file', 'FileController'); +Route::apiResource('file', 'FileController')->except('index', 'destroy'); Route::apiResource('gallery', 'GalleryController'); diff --git a/tests/fixtures/routes/multiple-resource-controllers-web.php b/tests/fixtures/routes/multiple-resource-controllers-web.php index bc851a39..7dd93c1e 100644 --- a/tests/fixtures/routes/multiple-resource-controllers-web.php +++ b/tests/fixtures/routes/multiple-resource-controllers-web.php @@ -2,4 +2,4 @@ Route::resource('page', 'PageController'); -Route::resource('category', 'CategoryController'); +Route::resource('category', 'CategoryController')->only('index', 'destroy');