From 98f680568c7721bcc40d45a9eff1a65cf549892a Mon Sep 17 00:00:00 2001 From: Bert Heyman Date: Sat, 3 Feb 2024 02:15:03 +0100 Subject: [PATCH] Plural routes by default (#663) --- config/blueprint.php | 6 +++--- src/Generators/MigrationGenerator.php | 6 +++--- src/Generators/RouteGenerator.php | 2 +- tests/Feature/Generators/RouteGeneratorTest.php | 12 ++++++------ tests/fixtures/routes/api-routes-plural.php | 3 --- tests/fixtures/routes/api-routes-singular.php | 3 +++ tests/fixtures/routes/api-routes.php | 2 +- tests/fixtures/routes/cruddy.php | 2 +- tests/fixtures/routes/invokable-controller.php | 2 +- .../routes/multiple-resource-controllers-api.php | 4 ++-- .../routes/multiple-resource-controllers-web.php | 4 ++-- tests/fixtures/routes/non-cruddy.php | 8 ++++---- tests/fixtures/routes/readme-example-plural.php | 3 --- tests/fixtures/routes/readme-example-singular.php | 3 +++ tests/fixtures/routes/readme-example.php | 2 +- tests/fixtures/routes/respond-statements.php | 4 ++-- tests/fixtures/routes/routes-mixed.php | 6 +++--- 17 files changed, 36 insertions(+), 36 deletions(-) delete mode 100644 tests/fixtures/routes/api-routes-plural.php create mode 100644 tests/fixtures/routes/api-routes-singular.php delete mode 100644 tests/fixtures/routes/readme-example-plural.php create mode 100644 tests/fixtures/routes/readme-example-singular.php diff --git a/config/blueprint.php b/config/blueprint.php index 3db6c3b4..378f7d6f 100644 --- a/config/blueprint.php +++ b/config/blueprint.php @@ -106,15 +106,15 @@ /* |-------------------------------------------------------------------------- - | Pluralize route names + | Singular route names |-------------------------------------------------------------------------- | | By default, Blueprint will use the `kebab-case` of the controller name - | for the route name. If you would like to ensure a plural route name + | for the route name. If you would like to ensure a singular route name | is used, you may set this to `true`. | */ - 'plural_routes' => null, + 'singular_routes' => null, /* |-------------------------------------------------------------------------- diff --git a/src/Generators/MigrationGenerator.php b/src/Generators/MigrationGenerator.php index bf4cb6c1..8aa75acf 100644 --- a/src/Generators/MigrationGenerator.php +++ b/src/Generators/MigrationGenerator.php @@ -320,9 +320,9 @@ protected function buildPivotTableDefinition(array $segments, array $models = [] * pivot table segment, it defaults to appending `$table->foreignId(\'' . $foreignKeyColumnName . '\');` * to the `$definition` string. The function then returns the `$definition` string. * - * @param string $pivotTableSegment The segment of the pivot table. e.g 'dive_job' it would be 'Dive' or 'Job'. - * @param string $foreignKeyColumnName The name of the foreign key column. e.g 'dive_id' or 'job_id'. - * @param array $models An array of models. e.g ['Dive' => $diveModel, 'Job' => $jobModel]. + * @param string $pivotTableSegment The segment of the pivot table. e.g 'dive_job' it would be 'Dive' or 'Job'. + * @param string $foreignKeyColumnName The name of the foreign key column. e.g 'dive_id' or 'job_id'. + * @param array $models An array of models. e.g ['Dive' => $diveModel, 'Job' => $jobModel]. * @return string The foreign key definition. e.g '$table->foreignUlid('dive_id');' */ protected function generateForeignKeyDefinition(string $pivotTableSegment, string $foreignKeyColumnName, array $models = []): string diff --git a/src/Generators/RouteGenerator.php b/src/Generators/RouteGenerator.php index 31b16336..59e04c90 100644 --- a/src/Generators/RouteGenerator.php +++ b/src/Generators/RouteGenerator.php @@ -43,7 +43,7 @@ protected function buildRoutes(Controller $controller): string $routes = ''; $methods = array_keys($controller->methods()); $className = $this->getClassName($controller); - $slug = config('blueprint.plural_routes') ? Str::plural(Str::kebab($controller->prefix())) : Str::kebab($controller->prefix()); + $slug = config('blueprint.singular_routes') ? Str::kebab($controller->prefix()) : Str::plural(Str::kebab($controller->prefix())); foreach (array_diff($methods, Controller::$resourceMethods) as $method) { $routes .= $this->buildRouteLine($className, $slug, $method); diff --git a/tests/Feature/Generators/RouteGeneratorTest.php b/tests/Feature/Generators/RouteGeneratorTest.php index 967b3ae3..7519ca5c 100644 --- a/tests/Feature/Generators/RouteGeneratorTest.php +++ b/tests/Feature/Generators/RouteGeneratorTest.php @@ -68,12 +68,12 @@ public function output_generates_api_routes(): void } #[Test] - public function output_generates_routes_with_plural_slug(): void + public function output_generates_routes_with_singular_slug(): void { - $this->app['config']->set('blueprint.plural_routes', true); + $this->app['config']->set('blueprint.singular_routes', true); $this->filesystem->expects('append') - ->with('routes/web.php', $this->fixture('routes/readme-example-plural.php')); + ->with('routes/web.php', $this->fixture('routes/readme-example-singular.php')); $tokens = $this->blueprint->parse($this->fixture('drafts/readme-example.yaml')); $tree = $this->blueprint->analyze($tokens); @@ -82,12 +82,12 @@ public function output_generates_routes_with_plural_slug(): void } #[Test] - public function output_generates_api_routes_with_plural_slug(): void + public function output_generates_api_routes_with_singular_slug(): void { - $this->app['config']->set('blueprint.plural_routes', true); + $this->app['config']->set('blueprint.singular_routes', true); $this->filesystem->expects('append') - ->with('routes/api.php', $this->fixture('routes/api-routes-plural.php')); + ->with('routes/api.php', $this->fixture('routes/api-routes-singular.php')); $tokens = $this->blueprint->parse($this->fixture('drafts/api-routes-example.yaml')); $tree = $this->blueprint->analyze($tokens); diff --git a/tests/fixtures/routes/api-routes-plural.php b/tests/fixtures/routes/api-routes-plural.php deleted file mode 100644 index 45867aa1..00000000 --- a/tests/fixtures/routes/api-routes-plural.php +++ /dev/null @@ -1,3 +0,0 @@ - - -Route::apiResource('certificates', App\Http\Controllers\Api\CertificateController::class); diff --git a/tests/fixtures/routes/api-routes-singular.php b/tests/fixtures/routes/api-routes-singular.php new file mode 100644 index 00000000..936b8e4d --- /dev/null +++ b/tests/fixtures/routes/api-routes-singular.php @@ -0,0 +1,3 @@ + + +Route::apiResource('certificate', App\Http\Controllers\Api\CertificateController::class); diff --git a/tests/fixtures/routes/api-routes.php b/tests/fixtures/routes/api-routes.php index 936b8e4d..45867aa1 100644 --- a/tests/fixtures/routes/api-routes.php +++ b/tests/fixtures/routes/api-routes.php @@ -1,3 +1,3 @@ -Route::apiResource('certificate', App\Http\Controllers\Api\CertificateController::class); +Route::apiResource('certificates', App\Http\Controllers\Api\CertificateController::class); diff --git a/tests/fixtures/routes/cruddy.php b/tests/fixtures/routes/cruddy.php index d837fe90..db6c6977 100644 --- a/tests/fixtures/routes/cruddy.php +++ b/tests/fixtures/routes/cruddy.php @@ -1,5 +1,5 @@ -Route::resource('crud', App\Http\Controllers\CrudController::class); +Route::resource('cruds', App\Http\Controllers\CrudController::class); Route::resource('users', App\Http\Controllers\UsersController::class)->except('create', 'store'); diff --git a/tests/fixtures/routes/invokable-controller.php b/tests/fixtures/routes/invokable-controller.php index 9ae7ab3b..3e5cb4be 100644 --- a/tests/fixtures/routes/invokable-controller.php +++ b/tests/fixtures/routes/invokable-controller.php @@ -1,3 +1,3 @@ -Route::get('report', App\Http\Controllers\ReportController::class); +Route::get('reports', App\Http\Controllers\ReportController::class); diff --git a/tests/fixtures/routes/multiple-resource-controllers-api.php b/tests/fixtures/routes/multiple-resource-controllers-api.php index 1681dcc9..29ed689b 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', App\Http\Controllers\FileController::class)->except('index', 'destroy'); +Route::apiResource('files', App\Http\Controllers\FileController::class)->except('index', 'destroy'); -Route::apiResource('gallery', App\Http\Controllers\GalleryController::class); +Route::apiResource('galleries', App\Http\Controllers\GalleryController::class); diff --git a/tests/fixtures/routes/multiple-resource-controllers-web.php b/tests/fixtures/routes/multiple-resource-controllers-web.php index a9c549f1..58a15b1c 100644 --- a/tests/fixtures/routes/multiple-resource-controllers-web.php +++ b/tests/fixtures/routes/multiple-resource-controllers-web.php @@ -1,5 +1,5 @@ -Route::resource('page', App\Http\Controllers\PageController::class); +Route::resource('pages', App\Http\Controllers\PageController::class); -Route::resource('category', App\Http\Controllers\CategoryController::class)->only('index', 'destroy'); +Route::resource('categories', App\Http\Controllers\CategoryController::class)->only('index', 'destroy'); diff --git a/tests/fixtures/routes/non-cruddy.php b/tests/fixtures/routes/non-cruddy.php index dda45c56..1d68543f 100644 --- a/tests/fixtures/routes/non-cruddy.php +++ b/tests/fixtures/routes/non-cruddy.php @@ -1,9 +1,9 @@ -Route::get('some/whatever', [App\Http\Controllers\SomeController::class, 'whatever']); -Route::get('some/slug-name', [App\Http\Controllers\SomeController::class, 'slugName']); -Route::resource('some', App\Http\Controllers\SomeController::class)->only('index', 'show'); +Route::get('somes/whatever', [App\Http\Controllers\SomeController::class, 'whatever']); +Route::get('somes/slug-name', [App\Http\Controllers\SomeController::class, 'slugName']); +Route::resource('somes', App\Http\Controllers\SomeController::class)->only('index', 'show'); Route::get('subscriptions/resume', [App\Http\Controllers\SubscriptionsController::class, 'resume']); -Route::get('report', App\Http\Controllers\ReportController::class); +Route::get('reports', App\Http\Controllers\ReportController::class); diff --git a/tests/fixtures/routes/readme-example-plural.php b/tests/fixtures/routes/readme-example-plural.php deleted file mode 100644 index 4cb52aaf..00000000 --- a/tests/fixtures/routes/readme-example-plural.php +++ /dev/null @@ -1,3 +0,0 @@ - - -Route::resource('posts', App\Http\Controllers\PostController::class)->only('index', 'store'); diff --git a/tests/fixtures/routes/readme-example-singular.php b/tests/fixtures/routes/readme-example-singular.php new file mode 100644 index 00000000..2dd741c7 --- /dev/null +++ b/tests/fixtures/routes/readme-example-singular.php @@ -0,0 +1,3 @@ + + +Route::resource('post', App\Http\Controllers\PostController::class)->only('index', 'store'); diff --git a/tests/fixtures/routes/readme-example.php b/tests/fixtures/routes/readme-example.php index 2dd741c7..4cb52aaf 100644 --- a/tests/fixtures/routes/readme-example.php +++ b/tests/fixtures/routes/readme-example.php @@ -1,3 +1,3 @@ -Route::resource('post', App\Http\Controllers\PostController::class)->only('index', 'store'); +Route::resource('posts', App\Http\Controllers\PostController::class)->only('index', 'store'); diff --git a/tests/fixtures/routes/respond-statements.php b/tests/fixtures/routes/respond-statements.php index 95f20dc1..ea7c813a 100644 --- a/tests/fixtures/routes/respond-statements.php +++ b/tests/fixtures/routes/respond-statements.php @@ -1,4 +1,4 @@ -Route::get('post/error', [App\Http\Controllers\Api\PostController::class, 'error']); -Route::resource('post', App\Http\Controllers\Api\PostController::class)->only('index', 'store'); +Route::get('posts/error', [App\Http\Controllers\Api\PostController::class, 'error']); +Route::resource('posts', App\Http\Controllers\Api\PostController::class)->only('index', 'store'); diff --git a/tests/fixtures/routes/routes-mixed.php b/tests/fixtures/routes/routes-mixed.php index 1b7f8892..b91d3307 100644 --- a/tests/fixtures/routes/routes-mixed.php +++ b/tests/fixtures/routes/routes-mixed.php @@ -1,7 +1,7 @@ -Route::resource('foo', App\Http\Controllers\FooController::class); +Route::resource('foos', App\Http\Controllers\FooController::class); -Route::get('some/whatever', [App\Http\Controllers\SomeController::class, 'whatever']); +Route::get('somes/whatever', [App\Http\Controllers\SomeController::class, 'whatever']); -Route::get('report', App\Http\Controllers\ReportController::class); +Route::get('reports', App\Http\Controllers\ReportController::class);