Skip to content

Commit ef23f0a

Browse files
committed
support for enums
1 parent 63453a1 commit ef23f0a

File tree

5 files changed

+67
-3
lines changed

5 files changed

+67
-3
lines changed

src/Parameters/BodyParameterGenerator.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@ public function getParameters()
2020

2121
foreach ($this->rules as $param => $rule) {
2222
$paramRules = $this->splitRules($rule);
23+
$enums = $this->getEnumValues($paramRules);
2324

2425
if ($this->isParamRequired($paramRules)) {
2526
$required[] = $param;
2627
}
2728

28-
$properties[$param] = [
29+
$propObj = [
2930
'type' => $this->getParamType($paramRules)
3031
];
32+
33+
if (!empty($enums)) {
34+
$propObj['enum'] = $enums;
35+
}
36+
37+
$properties[$param] = $propObj;
3138
}
3239

3340
if (!empty($required)) {

src/Parameters/ParameterGenerator.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,28 @@ protected function splitRules($rules)
5050
return $rules;
5151
}
5252
}
53+
54+
protected function getEnumValues(array $paramRules)
55+
{
56+
$in = $this->getInParameter($paramRules);
57+
58+
if (!$in) {
59+
return [];
60+
}
61+
62+
list($param, $vals) = explode(':', $in);
63+
64+
return explode(',', $vals);
65+
}
66+
67+
private function getInParameter(array $paramRules)
68+
{
69+
foreach ($paramRules as $rule) {
70+
if (starts_with($rule, 'in:')) {
71+
return $rule;
72+
}
73+
}
74+
75+
return false;
76+
}
5377
}

src/Parameters/QueryParameterGenerator.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ public function getParameters()
1010

1111
foreach ($this->rules as $param => $rule) {
1212
$paramRules = $this->splitRules($rule);
13+
$enums = $this->getEnumValues($paramRules);
1314

14-
$params[] = [
15+
$paramObj = [
1516
'in' => $this->getParamLocation(),
1617
'name' => $param,
1718
'type' => $this->getParamType($paramRules),
1819
'required' => $this->isParamRequired($paramRules),
1920
'description' => '',
2021
];
22+
23+
if (!empty($enums)) {
24+
$paramObj['enum'] = $enums;
25+
}
26+
27+
$params[] = $paramObj;
2128
}
2229

2330
return $params;

tests/Parameters/BodyParameterGeneratorTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ public function testNoRequiredParameters()
6262
$this->assertArrayNotHasKey('required', $bodyParameters['schema']);
6363
}
6464

65+
public function testEnumInBody()
66+
{
67+
$bodyParameters = $this->getBodyParameters([
68+
'account_type' => 'integer|in:1,2|in_array:foo',
69+
]);
70+
71+
$this->assertEquals([
72+
'account_type' => [
73+
'type' => 'integer',
74+
'enum' => [1,2],
75+
]
76+
], $bodyParameters['schema']['properties']);
77+
}
78+
6579
private function getBodyParameters(array $rules)
6680
{
6781
$bodyParameters = (new BodyParameterGenerator('post', '/', $rules))->getParameters();

tests/Parameters/QueryParameterGeneratorTest.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
class QueryParameterGeneratorTest extends TestCase
99
{
10-
1110
public function testRequiredParameter()
1211
{
1312
$queryParameters = $this->getQueryParameters([
@@ -49,6 +48,19 @@ public function testOptionalParameter()
4948
], $queryParameters[0]);
5049
}
5150

51+
public function testEnumInQuery()
52+
{
53+
$queryParameters = $this->getQueryParameters([
54+
'account_type' => 'integer|in:1,2|in_array:foo',
55+
]);
56+
57+
$this->assertArraySubset([
58+
'name' => 'account_type',
59+
'type' => 'integer',
60+
'enum' => [1,2],
61+
], $queryParameters[0]);
62+
}
63+
5264
private function getQueryParameters(array $rules)
5365
{
5466
return (new QueryParameterGenerator('get', '/', $rules))->getParameters();

0 commit comments

Comments
 (0)