Browse Source

Handle arrays of files (fixes #128)

shalvah 4 years ago
parent
commit
b57eae26d0

+ 5 - 3
resources/views/partials/example-requests/bash.blade.php

@@ -8,12 +8,14 @@ curl -X {{$route['methods'][0]}} \
 @endif
 @if(count($route['fileParameters']))
 @foreach($route['cleanBodyParameters'] as $parameter => $value)
-@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter,$value) as $key => $actualValue)
+@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)
     -F "{!! "$key=".$actualValue !!}" \
 @endforeach
 @endforeach
-@foreach($route['fileParameters'] as $parameter => $file)
-    -F "{!! "$parameter=@".$file->path() !!}" @if(! ($loop->last))\@endif
+@foreach($route['fileParameters'] as $parameter => $value)
+@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)
+    -F "{!! "$key=@".$file->path() !!}" @if(! ($loop->last))\@endif
+@endforeach
 @endforeach
 @elseif(count($route['cleanBodyParameters']))
     -d '{!! json_encode($route['cleanBodyParameters']) !!}'

+ 5 - 3
resources/views/partials/example-requests/javascript.blade.php

@@ -23,12 +23,14 @@ let headers = {
 @if(count($route['fileParameters']))
 const body = new FormData();
 @foreach($route['cleanBodyParameters'] as $parameter => $value)
-@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter,$value) as $key => $actualValue)
+@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)
 body.append('{!! $key !!}', '{!! $actualValue !!}');
 @endforeach
 @endforeach
-@foreach($route['fileParameters'] as $parameter => $file)
-body.append('{!! $parameter !!}', document.querySelector('input[name="{!! $parameter !!}"]').files[0]);
+@foreach($route['fileParameters'] as $parameter => $value)
+@foreach( \Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)
+body.append('{!! $key !!}', document.querySelector('input[name="{!! $key !!}"]').files[0]);
+@endforeach
 @endforeach
 @elseif(count($route['cleanBodyParameters']))
 let body = {!! json_encode($route['cleanBodyParameters'], JSON_PRETTY_PRINT) !!}

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

@@ -14,18 +14,20 @@ $response = $client->{{ strtolower($route['methods'][0]) }}(
 @if(count($route['fileParameters']))
         'multipart' => [
 @foreach($route['cleanBodyParameters'] as $parameter => $value)
-@foreach(\Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter,$value) as $key => $actualValue)
+@foreach(\Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)
             [
                 'name' => '{!! $key !!}',
                 'contents' => '{!! $actualValue !!}'
             ],
 @endforeach
 @endforeach
-@foreach($route['fileParameters'] as $parameter => $file)
+@foreach($route['fileParameters'] as $parameter => $value)
+@foreach(\Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)
             [
-                'name' => '{!!  $parameter !!}',
+                'name' => '{!!  $key !!}',
                 'contents' => fopen('{!! $file->path() !!}', 'r')
             ],
+@endforeach
 @endforeach
         ],
 @elseif(!empty($route['cleanBodyParameters']))

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

@@ -5,10 +5,12 @@ import json
 url = '{{ rtrim($baseUrl, '/') }}/{{ $route['boundUri'] }}'
 @if(count($route['fileParameters']))
 files = {
-@foreach($route['fileParameters'] as $name => $file)
-  '{!! $name !!}': open('{!! $file->path() !!}', 'rb')@if(!($loop->last)),
+@foreach($route['fileParameters'] as $parameter => $value)
+@foreach(\Knuckles\Scribe\Tools\WritingUtils::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)
+  '{!! $key !!}': open('{!! $file->path() !!}', 'rb')@if(!($loop->last)),
 @endif
 @endforeach
+@endforeach
 
 }
 @endif

+ 2 - 1
src/Extracting/Generator.php

@@ -115,7 +115,8 @@ class Generator
             $parsedRoute['headers']['Content-Type'] = 'application/json';
         }
         [$files, $regularParameters] = collect($parsedRoute['cleanBodyParameters'])->partition(function ($example) {
-            return $example instanceof UploadedFile;
+            return $example instanceof UploadedFile
+                || (is_array($example) && !empty($example) && $example[0] instanceof UploadedFile);
         });
         if (count($files)) {
             $parsedRoute['headers']['Content-Type'] = 'multipart/form-data';

+ 4 - 0
src/Writing/PostmanCollectionWriter.php

@@ -143,6 +143,10 @@ class PostmanCollectionWriter
                     $body[$inputMode][] = $params;
                 }
                 foreach ($endpoint['fileParameters'] as $key => $value) {
+                    while (is_array($value)) { // For arrays of files, just send the first one
+                        $key .= '[]';
+                        $value = $value[0];
+                    }
                     $params = [
                         'key' => $key,
                         'src' => [],