forked from zircote/swagger-php
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAugmentParameters.php
More file actions
96 lines (84 loc) · 3.26 KB
/
AugmentParameters.php
File metadata and controls
96 lines (84 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php declare(strict_types=1);
/**
* @license Apache 2.0
*/
namespace OpenApi\Processors;
use OpenApi\Analysis;
use OpenApi\Annotations as OA;
use OpenApi\Generator;
use OpenApi\Processors\Concerns\DocblockTrait;
class AugmentParameters implements ProcessorInterface
{
use DocblockTrait;
protected $augmentOperationParameters;
public function __construct(bool $augmentOperationParameters = true)
{
$this->augmentOperationParameters = $augmentOperationParameters;
}
public function isAugmentOperationParameters(): bool
{
return $this->augmentOperationParameters;
}
/**
* If set to <code>true</code> try to find operation parameter descriptions in the operation docblock.
*
* @param bool $augmentOperationParameters
*/
public function setAugmentOperationParameters(bool $augmentOperationParameters): void
{
$this->augmentOperationParameters = $augmentOperationParameters;
}
public function __invoke(Analysis $analysis)
{
$this->augmentSharedParameters($analysis);
if ($this->augmentOperationParameters) {
$this->augmentOperationParameters($analysis);
}
}
/**
* Use the parameter->name as key field (parameter->parameter) when used as reusable component
* (openapi->components->parameters).
*/
protected function augmentSharedParameters(Analysis $analysis): void
{
if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) {
$keys = [];
$parametersWithoutKey = [];
foreach ($analysis->openapi->components->parameters as $parameter) {
if (!Generator::isDefault($parameter->parameter)) {
$keys[$parameter->parameter] = $parameter;
} else {
$parametersWithoutKey[] = $parameter;
}
}
foreach ($parametersWithoutKey as $parameter) {
if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) {
$parameter->parameter = $parameter->name;
$keys[$parameter->parameter] = $parameter;
}
}
}
}
protected function augmentOperationParameters(Analysis $analysis): void
{
/** @var OA\Operation[] $operations */
$operations = $analysis->getAnnotationsOfType(OA\Operation::class);
foreach ($operations as $operation) {
if (!Generator::isDefault($operation->parameters)) {
$tags = [];
$this->extractContent($operation->_context->comment, $tags);
if (array_key_exists('param', $tags)) {
foreach ($tags['param'] as $name => $details) {
foreach ($operation->parameters as $parameter) {
if ($parameter->name == $name) {
if (Generator::isDefault($parameter->description) && $details['description']) {
$parameter->description = $details['description'];
}
}
}
}
}
}
}
}
}