Skip to content

Commit

Permalink
Check for nested fields properly when writing OAS
Browse files Browse the repository at this point in the history
  • Loading branch information
shalvah committed Oct 16, 2020
1 parent 96dbcf9 commit be69987
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/Extracting/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public function processRoute(Route $route, array $routeRules = [])
$parsedRoute['responseFields'] = $responseFields;


$parsedRoute['nestedBodyParameters'] = $this->nestArrayAndObjectFields($parsedRoute['bodyParameters']);
$parsedRoute['nestedBodyParameters'] = self::nestArrayAndObjectFields($parsedRoute['bodyParameters']);

self::$routeBeingProcessed = null;

Expand Down
30 changes: 16 additions & 14 deletions src/Writing/OpenAPISpecWriter.php
Original file line number Diff line number Diff line change
Expand Up @@ -452,24 +452,26 @@ public function generateFieldData(array $field): array
'description' => $field['description'] ?? '',
'example' => $field['value'] ?? null,
'items' => Utils::isArrayType($baseType)
? $this->generateFieldData(['name' => '', 'type' => $baseType, 'value' => ($field['value'] ?? [null])[0]])
: [
'type' => $baseType,
],
];
? $this->generateFieldData([
'name' => '',
'type' => $baseType,
'value' => ($field['value'] ?? [null])[0],
])
: ['type' => $baseType],
];

if ($baseType === 'object') {
foreach ($field['fields'] as $subfield) {
$fieldSimpleName = preg_replace("/^{$field['name']}\\[\]\\./", '', $subfield['name']);
$fieldData['items']['properties'][$fieldSimpleName] = $this->generateFieldData($subfield);
if ($subfield['required']) {
$fieldData['items']['required'][] = $fieldSimpleName;
if ($baseType === 'object' && !empty($field['fields'])) {
foreach ($field['fields'] as $subfield) {
$fieldSimpleName = preg_replace("/^{$field['name']}\\[\]\\./", '', $subfield['name']);
$fieldData['items']['properties'][$fieldSimpleName] = $this->generateFieldData($subfield);
if ($subfield['required']) {
$fieldData['items']['required'][] = $fieldSimpleName;
}
}
}
}

return $fieldData;
} else if ($field['type'] === 'object') {
return $fieldData;
} else if ($field['type'] === 'object') {
return [
'type' => 'object',
'description' => $field['description'] ?? '',
Expand Down

0 comments on commit be69987

Please sign in to comment.