Skip to content

Commit

Permalink
Add --no-extraction option to skip extraction phase
Browse files Browse the repository at this point in the history
  • Loading branch information
shalvah committed May 12, 2020
1 parent caf255e commit 4d022d0
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 12 deletions.
8 changes: 8 additions & 0 deletions src/Commands/GenerateDocumentation.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class GenerateDocumentation extends Command
*/
protected $signature = "scribe:generate
{--force : Discard any changes you've made to the Markdown files}
{--no-extraction : Skip extraction of route info and just transform the Markdown files}
";

/**
Expand Down Expand Up @@ -60,6 +61,13 @@ public function handle(RouteMatcherInterface $routeMatcher)
{
$this->bootstrap();

$noExtraction = $this->option('no-extraction');
if ($noExtraction) {
$writer = new Writer($this->docConfig);
$writer->writeDocs();
return;
}

$routes = $routeMatcher->getRoutes($this->docConfig->get('routes'), $this->docConfig->get('router'));

$parsedRoutes = $this->processRoutes($routes);
Expand Down
43 changes: 31 additions & 12 deletions src/Writing/Writer.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Writer
/**
* @var bool
*/
private $forceIt;
private $shouldOverwrite;

/**
* @var bool
Expand Down Expand Up @@ -63,12 +63,12 @@ class Writer
*/
private $lastTimesWeModifiedTheseFiles;

public function __construct(DocumentationConfig $config = null, bool $forceIt = false)
public function __construct(DocumentationConfig $config = null, bool $shouldOverwrite = false)
{
// If no config is injected, pull from global
$this->config = $config ?: new DocumentationConfig(config('scribe'));
$this->baseUrl = $this->config->get('base_url') ?? config('app.url');
$this->forceIt = $forceIt;
$this->shouldOverwrite = $shouldOverwrite;
$this->shouldGeneratePostmanCollection = $this->config->get('postman.enabled', false);
$this->pastel = new Pastel();
$this->isStatic = $this->config->get('type') === 'static';
Expand All @@ -78,19 +78,19 @@ public function __construct(DocumentationConfig $config = null, bool $forceIt =
$this->lastTimesWeModifiedTheseFiles = [];
}

public function writeDocs(Collection $routes)
public function writeDocs(Collection $routes = null)
{
// The source Markdown files always go in resources/docs.
// The static assets (js/, css/, and images/) always go in public/docs/.
// For 'static' docs, the output files (index.html, collection.json) go in public/docs/.
// For 'laravel' docs, the output files (index.blade.php, collection.json)
// go in resources/views/scribe/ and storage/app/scribe/ respectively.

$this->writeMarkdownAndSourceFiles($routes);
$routes && $this->writeMarkdownAndSourceFiles($routes);

$this->writeHtmlDocs();

$this->writePostmanCollection($routes);
$routes && $this->writePostmanCollection($routes);
}

/**
Expand All @@ -112,9 +112,9 @@ public function writeMarkdownAndSourceFiles(Collection $parsedRoutes)
mkdir($this->sourceOutputPath, 0777, true);
}

$this->writeRoutesMarkdownFile($parsedRoutes, $settings);
$this->writeIndexMarkdownFile($settings);
$this->writeAuthMarkdownFile();
$this->writeRoutesMarkdownFile($parsedRoutes, $settings);

ConsoleOutputUtils::info('Wrote source Markdown files to: ' . $this->sourceOutputPath);
}
Expand Down Expand Up @@ -213,23 +213,42 @@ public function writeHtmlDocs(): void

protected function writeIndexMarkdownFile(array $settings): void
{
$indexMarkdownFile = $this->sourceOutputPath . '/index.md';
if ($this->hasFileBeenModified($indexMarkdownFile)) {
if ($this->shouldOverwrite) {
ConsoleOutputUtils::warn("Discarding manual changes for file $indexMarkdownFile because you specified --force");
} else {
ConsoleOutputUtils::warn("Skipping modified file $indexMarkdownFile");
return;
}
}

$frontmatter = view('scribe::partials.frontmatter')
->with('showPostmanCollectionButton', $this->shouldGeneratePostmanCollection)
// This path is wrong for laravel type but will be replaced in post
->with('postmanCollectionLink', './collection.json')
->with('outputPath', 'docs')
->with('settings', $settings);
$indexFile = $this->sourceOutputPath . '/index.md';

$introText = $this->config->get('intro_text', '');
$introMarkdown = view('scribe::index')
->with('frontmatter', $frontmatter)
->with('introText', $introText);
$this->writeFile($indexFile, $introMarkdown);
$this->writeFile($indexMarkdownFile, $introMarkdown);
}

protected function writeAuthMarkdownFile(): void
{
$authMarkdownFile = $this->sourceOutputPath . '/authentication.md';
if ($this->hasFileBeenModified($authMarkdownFile)) {
if ($this->shouldOverwrite) {
ConsoleOutputUtils::warn("Discarding manual changes for file $authMarkdownFile because you specified --force");
} else {
ConsoleOutputUtils::warn("Skipping modified file $authMarkdownFile");
return;
}
}

$isAuthed = $this->config->get('auth.enabled', false);
$text = '';
$extraInfo = '';
Expand Down Expand Up @@ -270,7 +289,7 @@ protected function writeAuthMarkdownFile(): void
'authDescription' => $text,
'extraAuthInfo' => $extraInfo,
]);
$this->writeFile($this->sourceOutputPath . '/authentication.md', $authMarkdown);
$this->writeFile($authMarkdownFile, $authMarkdown);
}

protected function writeRoutesMarkdownFile(Collection $parsedRoutes, array $settings): void
Expand All @@ -297,8 +316,8 @@ protected function writeRoutesMarkdownFile(Collection $parsedRoutes, array $sett
$routeGroupMarkdownFile = $this->sourceOutputPath . "/groups/$groupId.md";

if ($this->hasFileBeenModified($routeGroupMarkdownFile)) {
if ($this->forceIt) {
ConsoleOutputUtils::warn("Discarded manual changes for file $routeGroupMarkdownFile");
if ($this->shouldOverwrite) {
ConsoleOutputUtils::warn("Discarding manual changes for file $routeGroupMarkdownFile because you specified --force");
} else {
ConsoleOutputUtils::warn("Skipping modified file $routeGroupMarkdownFile");
return;
Expand Down

0 comments on commit 4d022d0

Please sign in to comment.