浏览代码

Switch to md compiler for example langs

shalvah 4 年之前
父节点
当前提交
412ad31c96

+ 1 - 0
CHANGELOG.md

@@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 - Inline validators
 - 3 base URLs
 - static docs fix
+- switch to md for example langs
   
 - `include` not supported in frontmatter; use prepend or append
 - Endpoints in views are now objects

+ 1 - 1
camel/Output/OutputEndpointData.php

@@ -160,7 +160,7 @@ class OutputEndpointData extends BaseDTO
         return in_array('GET', $this->httpMethods);
     }
 
-    public function hasRequestOptions(): bool
+    public function hasHeadersOrQueryOrBodyParams(): bool
     {
         return !empty($this->headers)
             || !empty($this->cleanQueryParameters)

+ 2 - 2
resources/views/partials/example-requests/bash.blade.php → resources/views/partials/example-requests/bash.md.blade.php

@@ -2,7 +2,7 @@
     use Knuckles\Scribe\Tools\WritingUtils as u;
     /** @var  Knuckles\Camel\Output\OutputEndpointData $endpoint */
 @endphp
-<pre><code class="language-bash">
+```bash
 curl --request {{$endpoint->httpMethods[0]}} \
     {{$endpoint->httpMethods[0] == 'GET' ? '--get ' : ''}}"{{ rtrim($baseUrl, '/')}}/{{ ltrim($endpoint->boundUri, '/') }}@if(count($endpoint->cleanQueryParameters))?{!! u::printQueryParamsAsString($endpoint->cleanQueryParameters) !!}@endif"@if(count($endpoint->headers)) \
 @foreach($endpoint->headers as $header => $value)
@@ -25,4 +25,4 @@ curl --request {{$endpoint->httpMethods[0]}} \
 @elseif(count($endpoint->cleanBodyParameters))
     --data "{!! addslashes(json_encode($endpoint->cleanBodyParameters, JSON_UNESCAPED_UNICODE)) !!}"
 @endif
-</code></pre>
+```

+ 2 - 2
resources/views/partials/example-requests/javascript.blade.php → resources/views/partials/example-requests/javascript.md.blade.php

@@ -2,7 +2,7 @@
     use Knuckles\Scribe\Tools\WritingUtils as u;
     /** @var  Knuckles\Camel\Output\OutputEndpointData $endpoint */
 @endphp
-<pre><code class="language-javascript">
+```javascript
 const url = new URL(
     "{{ rtrim($baseUrl, '/') }}/{{ ltrim($endpoint->boundUri, '/') }}"
 );
@@ -51,4 +51,4 @@ fetch(url, {
     body: JSON.stringify(body),
 @endif
 }).then(response => response.json());
-</code></pre>
+```

+ 3 - 3
resources/views/partials/example-requests/php.blade.php → resources/views/partials/example-requests/php.md.blade.php

@@ -2,9 +2,9 @@
     use Knuckles\Scribe\Tools\WritingUtils as u;
     /** @var  Knuckles\Camel\Output\OutputEndpointData $endpoint */
 @endphp
-<pre><code class="language-php">
+```php
 $client = new \GuzzleHttp\Client();
-@if($endpoint->hasRequestOptions())
+@if($endpoint->hasHeadersOrQueryOrBodyParams())
 $response = $client->{{ strtolower($endpoint->httpMethods[0]) }}(
     '{{ rtrim($baseUrl, '/') . '/' . ltrim($endpoint->boundUri, '/') }}',
     [
@@ -46,4 +46,4 @@ $response = $client->{{ strtolower($endpoint->httpMethods[0]) }}('{{ rtrim($base
 @endif
 $body = $response->getBody();
 print_r(json_decode((string) $body));
-</code></pre>
+```

+ 2 - 2
resources/views/partials/example-requests/python.blade.php → resources/views/partials/example-requests/python.md.blade.php

@@ -2,7 +2,7 @@
   use Knuckles\Scribe\Tools\WritingUtils as u;
   /** @var  Knuckles\Camel\Output\OutputEndpointData $endpoint */
 @endphp
-<pre><code class="language-python">
+```python
 import requests
 import json
 
@@ -44,4 +44,4 @@ $optionalArguments = implode(', ',$optionalArguments);
 @endphp
 response = requests.request('{{$endpoint->httpMethods[0]}}', url, {{ $optionalArguments }})
 response.json()
-</code></pre>
+```

+ 3 - 1
resources/views/themes/default/endpoint.blade.php

@@ -14,7 +14,9 @@
 <blockquote>Example request:</blockquote>
 
 @foreach($metadata['example_languages'] as $language)
-    @include("scribe::partials.example-requests.$language")
+
+@include("scribe::partials.example-requests.$language")
+
 @endforeach
 
 @if($endpoint->isGet() || $endpoint->hasResponses())

+ 5 - 5
routes/laravel.php

@@ -1,14 +1,14 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
+use Knuckles\Scribe\Http\Controller;
 
 $prefix = config('scribe.laravel.docs_url', '/docs');
 $middleware = config('scribe.laravel.middleware', []);
 
-Route::namespace('\Knuckles\Scribe\Http')
-    ->middleware($middleware)
+Route::middleware($middleware)
     ->group(function () use ($prefix) {
-        Route::get($prefix, 'Controller@webpage')->name('scribe');
-        Route::get("$prefix.postman", 'Controller@postman')->name('scribe.postman');
-        Route::get("$prefix.openapi", 'Controller@openapi')->name('scribe.openapi');
+        Route::get($prefix, [Controller::class, 'webpage'])->name('scribe');
+        Route::get("$prefix.postman", [Controller::class, 'postman'])->name('scribe.postman');
+        Route::get("$prefix.openapi", [Controller::class, 'openapi'])->name('scribe.openapi');
     });

+ 4 - 5
routes/lumen.php

@@ -1,6 +1,6 @@
 <?php
 
-use Illuminate\Support\Facades\Route;
+use Knuckles\Scribe\Http\Controller;
 
 $prefix = config('scribe.laravel.docs_url', '/docs');
 $middleware = config('scribe.laravel.middleware', []);
@@ -8,10 +8,9 @@ $middleware = config('scribe.laravel.middleware', []);
 $router = app()->router;
 
 $router->group([
-    'namespace' => '\Knuckles\Scribe\Http',
     'middleware' => $middleware
 ], function () use ($router, $prefix) {
-    $router->get($prefix, ['uses' => 'Controller@webpage', 'as' => 'scribe']);
-    $router->get("$prefix.postman", ['uses' => 'Controller@postman', 'as' => 'scribe.postman']);
-    $router->get("$prefix.openapi", ['uses' => 'Controller@openapi', 'as' => 'scribe.openapi']);
+    $router->get($prefix, ['uses' => [Controller::class, 'webpage'], 'as' => 'scribe']);
+    $router->get("$prefix.postman", ['uses' => [Controller::class, 'postman'], 'as' => 'scribe.postman']);
+    $router->get("$prefix.openapi", ['uses' => [Controller::class, 'openapi'], 'as' => 'scribe.openapi']);
 });

+ 1 - 0
src/Extracting/Strategies/BodyParameters/GetFromInlineValidator.php

@@ -98,6 +98,7 @@ class GetFromInlineValidator extends Strategy
                 }
                 $rules[$paramName] = join('|', $rulesList);
             } else {
+                $rules[$paramName] = [];
                 continue;
             }
 

+ 10 - 0
src/ScribeServiceProvider.php

@@ -7,10 +7,20 @@ use Knuckles\Scribe\Commands\GenerateDocumentation;
 use Knuckles\Scribe\Commands\MakeStrategy;
 use Knuckles\Scribe\Matching\RouteMatcher;
 use Knuckles\Scribe\Matching\RouteMatcherInterface;
+use Knuckles\Scribe\Tools\BladeMarkdownEngine;
 use Knuckles\Scribe\Tools\Utils;
 
 class ScribeServiceProvider extends ServiceProvider
 {
+    public function register()
+    {
+        // Register custom Markdown Blade compiler so we can automatically have MD views converted to HTML
+        $app = $this->app;
+        $app->view->getEngineResolver()
+            ->register('blademd', fn() => new BladeMarkdownEngine($app['blade.compiler']));
+        $app->view->addExtension('md.blade.php', 'blademd');
+    }
+
     /**
      * Bootstrap the application events.
      *

+ 31 - 0
src/Tools/BladeMarkdownEngine.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace Knuckles\Scribe\Tools;
+
+
+use Illuminate\Filesystem\Filesystem;
+use Illuminate\View\Compilers\CompilerInterface;
+use Illuminate\View\Engines\CompilerEngine;
+use Parsedown;
+
+class BladeMarkdownEngine extends CompilerEngine
+{
+    private Parsedown $markdown;
+
+    public function __construct(CompilerInterface $compiler, Filesystem $files = null)
+    {
+        parent::__construct($compiler, $files ?: new Filesystem);
+        $this->markdown = Parsedown::instance();
+    }
+
+    /**
+     * Get the evaluated contents of the view.
+     *
+     */
+    public function get($path, array $data = [])
+    {
+        $contents = parent::get($path, $data);
+
+        return $this->markdown->text($contents);
+    }
+}