1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- namespace Mpociot\ApiDoc\Postman;
- use Ramsey\Uuid\Uuid;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\URL;
- class CollectionWriter
- {
- /**
- * @var Collection
- */
- private $routeGroups;
- /**
- * @var string
- */
- private $baseUrl;
- /**
- * CollectionWriter constructor.
- *
- * @param Collection $routeGroups
- */
- public function __construct(Collection $routeGroups, $baseUrl)
- {
- $this->routeGroups = $routeGroups;
- $this->baseUrl = $baseUrl;
- }
- public function getCollection()
- {
- try {
- URL::forceRootUrl($this->baseUrl);
- } catch (\Error $e) {
- echo "Warning: Couldn't force base url as your version of Lumen doesn't have the forceRootUrl method.\n";
- echo "You should probably double check URLs in your generated Postman collection.\n";
- }
- $collection = [
- 'variables' => [],
- 'info' => [
- 'name' => config('apidoc.postman.name') ?: config('app.name').' API',
- '_postman_id' => Uuid::uuid4()->toString(),
- 'description' => config('apidoc.postman.description') ?: '',
- 'schema' => 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json',
- ],
- 'item' => $this->routeGroups->map(function ($routes, $groupName) {
- return [
- 'name' => $groupName,
- 'description' => '',
- 'item' => $routes->map(function ($route) {
- $mode = $route['methods'][0] === 'PUT' ? 'urlencoded' : 'formdata';
- return [
- 'name' => $route['title'] != '' ? $route['title'] : url($route['uri']),
- 'request' => [
- 'url' => url($route['uri']),
- 'method' => $route['methods'][0],
- 'body' => [
- 'mode' => $mode,
- $mode => collect($route['bodyParameters'])->map(function ($parameter, $key) {
- return [
- 'key' => $key,
- 'value' => isset($parameter['value']) ? $parameter['value'] : '',
- 'type' => 'text',
- 'enabled' => true,
- ];
- })->values()->toArray(),
- ],
- 'description' => $route['description'],
- 'response' => [],
- ],
- ];
- })->toArray(),
- ];
- })->values()->toArray(),
- ];
- return json_encode($collection);
- }
- }
|