mirror of
https://github.com/ambieco/scribe.git
synced 2026-04-24 10:44:55 +08:00
Sort the groups naturally (fixes #423)
This commit is contained in:
@@ -41,7 +41,7 @@ class GenerateDocumentation extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return false|null
|
||||
* @return void
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
@@ -55,9 +55,10 @@ class GenerateDocumentation extends Command
|
||||
$generator = new Generator();
|
||||
$parsedRoutes = $this->processRoutes($generator, $routes);
|
||||
$parsedRoutes = collect($parsedRoutes)->groupBy('group')
|
||||
->sort(function ($a, $b) {
|
||||
return strcmp($a->first()['group'], $b->first()['group']);
|
||||
});
|
||||
->sortBy(static function ($group) {
|
||||
/** @var $group Collection */
|
||||
return $group->first()['group'];
|
||||
}, SORT_NATURAL);
|
||||
|
||||
$this->writeMarkdown($parsedRoutes);
|
||||
}
|
||||
|
||||
15
tests/Fixtures/TestNaturalSortController.php
Normal file
15
tests/Fixtures/TestNaturalSortController.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Mpociot\ApiDoc\Tests\Fixtures;
|
||||
|
||||
class TestNaturalSortController
|
||||
{
|
||||
/** @group 1. Group 1 */
|
||||
public function action1() {}
|
||||
|
||||
/** @group 2. Group 2 */
|
||||
public function action2() {}
|
||||
|
||||
/** @group 10. Group 10 */
|
||||
public function action10() {}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Mpociot\ApiDoc\Tests;
|
||||
|
||||
use Mpociot\ApiDoc\Tests\Fixtures\TestNaturalSortController;
|
||||
use RecursiveIteratorIterator;
|
||||
use RecursiveDirectoryIterator;
|
||||
use Orchestra\Testbench\TestCase;
|
||||
@@ -256,6 +257,30 @@ class GenerateDocumentationTest extends TestCase
|
||||
$this->assertContains('Лорем ипсум долор сит амет', $generatedMarkdown);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function sorts_group_naturally()
|
||||
{
|
||||
RouteFacade::get('/api/action1', TestNaturalSortController::class.'@action1');
|
||||
RouteFacade::get('/api/action2', TestNaturalSortController::class.'@action2');
|
||||
RouteFacade::get('/api/action10', TestNaturalSortController::class.'@action10');
|
||||
|
||||
config(['apidoc.routes.0.prefixes' => ['api/*']]);
|
||||
$this->artisan('apidoc:generate');
|
||||
$generatedMarkdown = file_get_contents(__DIR__.'/../public/docs/source/index.md');
|
||||
|
||||
$firstGroup1Occurrence = strpos($generatedMarkdown, '#1. Group 1');
|
||||
$firstGroup2Occurrence = strpos($generatedMarkdown, '#2. Group 2');
|
||||
$firstGroup10Occurrence = strpos($generatedMarkdown, '#10. Group 10');
|
||||
|
||||
$this->assertNotFalse($firstGroup1Occurrence);
|
||||
$this->assertNotFalse($firstGroup2Occurrence);
|
||||
$this->assertNotFalse($firstGroup2Occurrence);
|
||||
|
||||
$this->assertTrue(
|
||||
$firstGroup1Occurrence < $firstGroup2Occurrence && $firstGroup2Occurrence < $firstGroup10Occurrence
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $command
|
||||
* @param array $parameters
|
||||
|
||||
Reference in New Issue
Block a user