Explorar o código

Support simple key-value for response headers

shalvah %!s(int64=4) %!d(string=hai) anos
pai
achega
69cc301388

+ 7 - 17
camel/Extraction/Response.php

@@ -8,23 +8,13 @@ use Knuckles\Camel\BaseDTO;
 
 class Response extends BaseDTO
 {
-    /** @var int */
-    public $status;
-
-    /**
-     * @var string|null
-     */
-    public $content;
-
-    /**
-     * @var array
-     */
-    public $headers = [];
-
-    /**
-     * @var string|null
-     */
-    public $description;
+    public int $status;
+
+    public ?string $content;
+
+    public array $headers = [];
+
+    public ?string $description;
 
     public function __construct(array $parameters = [])
     {

+ 6 - 7
resources/views/themes/default/endpoint.blade.php

@@ -2,7 +2,7 @@
     /** @var  Knuckles\Camel\Output\OutputEndpointData $endpoint */
 @endphp
 
-<h2 id="{!! Str::slug($group['name']) !!}-{!! $endpoint->endpointId() !!}">{{ $endpoint->metadata->title ?: $endpoint->uri}}</h2>
+<h2 id="{!! Str::slug($group['name']) !!}-{!! $endpoint->endpointId() !!}">{{ $endpoint->metadata->title ?: ($endpoint->httpMethods[0]." ".$endpoint->uri)}}</h2>
 
 <p>
 @component('scribe::components.badges.auth', ['authenticated' => $endpoint->metadata->authenticated])
@@ -30,8 +30,8 @@
                 <small onclick="textContent = parentElement.parentElement.open ? 'Show headers' : 'Hide headers'">Show headers</small>
             </summary>
             <pre>
-            <code class="language-http">@foreach($response->headers as $header => $values)
-{{ $header }}: {{ implode('; ', $values) }}
+            <code class="language-http">@foreach($response->headers as $header => $value)
+{{ $header }}: {{ is_array($value) ? implode('; ', $value) : $value }}
 @endforeach </code>
             </pre>
         </details> @endif
@@ -41,11 +41,10 @@
 [Binary data] - {{ htmlentities(str_replace("<<binary>>", "", $response->content)) }}
 @elseif($response->status == 204)
 [Empty response]
-@elseif(is_string($response->content) && json_decode($response->content) == null && $response->content !== null)
-{{-- If response is a non-JSON string, just print it --}}
-{!! htmlentities($response->content) !!}
 @else
-{!! htmlentities(json_encode(json_decode($response->content), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)) !!}
+@php($parsed = json_decode($response->content))
+{{-- If response is a JSON string, prettify it. Otherwise, just print it --}}
+{!! htmlentities($parsed != null ? json_encode($parsed, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) : $response->content) !!}
 @endif </code>
         </pre>
     @endforeach

+ 13 - 1
src/Extracting/Strategies/Responses/ResponseCalls.php

@@ -88,7 +88,7 @@ class ResponseCalls extends Strategy
                 [
                     'status' => $response->getStatusCode(),
                     'content' => $response->getContent(),
-                    'headers' => $response->headers->all(),
+                    'headers' => $this->getResponseHeaders($response),
                 ],
             ];
         } catch (Exception $e) {
@@ -344,4 +344,16 @@ class ResponseCalls extends Strategy
 
         return $server;
     }
+
+    protected function getResponseHeaders($response): array
+    {
+        $headers = $response->headers->all();
+        $formattedHeaders = [];
+
+        foreach ($headers as $header => $values) {
+            $formattedHeaders[$header] = implode('; ', $values);
+        }
+
+        return $formattedHeaders;
+    }
 }

+ 5 - 2
src/Writing/PostmanCollectionWriter.php

@@ -303,8 +303,11 @@ class PostmanCollectionWriter
     {
         return collect($endpoint->responses)->map(function (Response $response) {
             $headers = [];
-            foreach ($response->headers as $header => $values) {
-                $headers[] = ['key' => $header, 'value' => implode('; ', $values)];
+            foreach ($response->headers as $header => $value) {
+                $headers[] = [
+                    'key' => $header,
+                    'value' => is_array($value) ? implode('; ', $value) : $value
+                ];
             }
 
             return [