Sfoglia il codice sorgente

Extend no overwrite feature to all standard markdown files, not just routes.

shalvah 5 anni fa
parent
commit
d854a593c1
3 ha cambiato i file con 40 aggiunte e 22 eliminazioni
  1. 1 0
      phpstan.neon
  2. 21 15
      src/Writing/Writer.php
  3. 18 7
      tests/GenerateDocumentationTest.php

+ 1 - 0
phpstan.neon

@@ -13,3 +13,4 @@ parameters:
         - '#(.*)NunoMaduro\\Collision(.*)#'
         - '#Instantiated class Whoops\\Exception\\Inspector not found\.#'
         - '#.+Dingo.+#'
+        - '#Right side of && is always false.#'

+ 21 - 15
src/Writing/Writer.php

@@ -61,7 +61,7 @@ class Writer
     /**
      * @var array
      */
-    private $lastTimesWeModifiedTheseFiles;
+    private $lastTimesWeModifiedTheseFiles = [];
 
     public function __construct(DocumentationConfig $config = null, bool $shouldOverwrite = false)
     {
@@ -112,10 +112,14 @@ class Writer
             mkdir($this->sourceOutputPath, 0777, true);
         }
 
+        $this->fetchLastTimeWeModifiedFilesFromTrackingFile();
+
         $this->writeRoutesMarkdownFile($parsedRoutes, $settings);
         $this->writeIndexMarkdownFile($settings);
         $this->writeAuthMarkdownFile();
 
+        $this->writeModificationTimesTrackingFile();
+
         ConsoleOutputUtils::info('Wrote source Markdown files to: ' . $this->sourceOutputPath);
     }
 
@@ -298,17 +302,6 @@ class Writer
             mkdir($this->sourceOutputPath . '/groups', 0777, true);
         }
 
-        if (file_exists($this->fileModificationTimesFile)) {
-            $this->lastTimesWeModifiedTheseFiles = explode("\n", file_get_contents($this->fileModificationTimesFile));
-            array_shift($this->lastTimesWeModifiedTheseFiles);
-            array_shift($this->lastTimesWeModifiedTheseFiles);
-            $this->lastTimesWeModifiedTheseFiles = collect($this->lastTimesWeModifiedTheseFiles)
-                ->mapWithKeys(function ($line) {
-                    [$filePath, $mtime] = explode("=", $line);
-                    return [$filePath => $mtime];
-                })->toArray();
-        }
-
         // Generate Markdown for each route. Not using a Blade component bc of some complex logic
         $parsedRoutesWithOutput = $this->generateMarkdownOutputForEachRoute($parsedRoutes, $settings);
         $parsedRoutesWithOutput->each(function ($routesInGroup, $groupName) {
@@ -335,8 +328,6 @@ class Writer
             $this->writeFile($routeGroupMarkdownFile, $groupMarkdown);
         });
 
-        $this->writeModificationTimesFile();
-
     }
 
     /**
@@ -349,7 +340,7 @@ class Writer
 
     /**
      */
-    protected function writeModificationTimesFile(): void
+    protected function writeModificationTimesTrackingFile(): void
     {
         $content = "# GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE.\n";
         $content .= "# Scribe uses this file to know when you change something manually in your docs.\n";
@@ -376,4 +367,19 @@ class Writer
         return false;
     }
 
+    protected function fetchLastTimeWeModifiedFilesFromTrackingFile()
+    {
+        if (file_exists($this->fileModificationTimesFile)) {
+            $lastTimesWeModifiedTheseFiles = explode("\n", file_get_contents($this->fileModificationTimesFile));
+            // First two lines are comments
+            array_shift($lastTimesWeModifiedTheseFiles);
+            array_shift($lastTimesWeModifiedTheseFiles);
+            $this->lastTimesWeModifiedTheseFiles = collect($lastTimesWeModifiedTheseFiles)
+                ->mapWithKeys(function ($line) {
+                    [$filePath, $mtime] = explode("=", $line);
+                    return [$filePath => $mtime];
+                })->toArray();
+        }
+    }
+
 }

+ 18 - 7
tests/GenerateDocumentationTest.php

@@ -391,7 +391,7 @@ class GenerateDocumentationTest extends TestCase
     }
 
     /** @test */
-    public function will_not_overwrite_modified_markdown_file_unless_force_option_is_set()
+    public function will_not_overwrite_manually_modified_markdown_files_unless_force_flag_is_set()
     {
         RouteFacade::get('/api/action1', TestGroupController::class . '@action1');
         RouteFacade::get('/api/action1b', TestGroupController::class . '@action1b');
@@ -401,19 +401,30 @@ class GenerateDocumentationTest extends TestCase
 
         $this->artisan('scribe:generate');
 
-        $file1MtimeAfterFirstGeneration = filemtime(__DIR__ . '/../resources/docs/groups/1-group-1.md');
-        $file2MtimeAfterFirstGeneration = filemtime(__DIR__ . '/../resources/docs/groups/2-group-2.md');
+        $group1FilePath = __DIR__ . '/../resources/docs/groups/1-group-1.md';
+        $group2FilePath = __DIR__ . '/../resources/docs/groups/2-group-2.md';
+        $authFilePath = __DIR__ . '/../resources/docs/authentication.md';
+
+        $file1MtimeAfterFirstGeneration = filemtime($group1FilePath);
+        $file2MtimeAfterFirstGeneration = filemtime($group2FilePath);
+        $authFileMtimeAfterFirstGeneration = filemtime($authFilePath);
 
         sleep(1);
-        touch(__DIR__ . '/../resources/docs/groups/1-group-1.md');
-        $file1MtimeAfterManualModification = filemtime(__DIR__ . '/../resources/docs/groups/1-group-1.md');
+        touch($group1FilePath);
+        touch($authFilePath);
+        $file1MtimeAfterManualModification = filemtime($group1FilePath);
+        $authFileMtimeAfterManualModification = filemtime($authFilePath);
         $this->assertGreaterThan($file1MtimeAfterFirstGeneration, $file1MtimeAfterManualModification);
+        $this->assertGreaterThan($authFileMtimeAfterFirstGeneration, $authFileMtimeAfterManualModification);
 
         $this->artisan('scribe:generate');
 
-        $file1MtimeAfterSecondGeneration = filemtime(__DIR__ . '/../resources/docs/groups/1-group-1.md');
-        $file2MtimeAfterSecondGeneration = filemtime(__DIR__ . '/../resources/docs/groups/2-group-2.md');
+        $file1MtimeAfterSecondGeneration = filemtime($group1FilePath);
+        $file2MtimeAfterSecondGeneration = filemtime($group2FilePath);
+        $authFileMtimeAfterSecondGeneration = filemtime($authFilePath);
+
         $this->assertEquals($file1MtimeAfterManualModification, $file1MtimeAfterSecondGeneration);
         $this->assertNotEquals($file2MtimeAfterFirstGeneration, $file2MtimeAfterSecondGeneration);
+        $this->assertNotEquals($authFileMtimeAfterFirstGeneration, $authFileMtimeAfterSecondGeneration);
     }
 }