Skip to content

Commit c83b72c

Browse files
author
Cari Spruiell
committed
Merge remote-tracking branch 'api/MAGETWO-53008-swagger-format' into pull-request
2 parents c201d36 + ab6d2bf commit c83b72c

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Magento\Framework\Exception\NoSuchEntityException;
2020
use Magento\Framework\Phrase;
2121
use Magento\Framework\App\ProductMetadataInterface;
22+
use \Magento\Framework\Api\SimpleDataObjectConverter;
2223

2324
/**
2425
* REST Swagger schema generator.
@@ -541,10 +542,52 @@ protected function getDefinitions()
541542
],
542543
],
543544
],
544-
$this->definitions
545+
$this->snakeCaseDefinitions($this->definitions)
545546
);
546547
}
547548

549+
/**
550+
* Converts definitions' properties array to snake_case.
551+
*
552+
* @param array $definitions
553+
* @return array
554+
*/
555+
private function snakeCaseDefinitions($definitions)
556+
{
557+
foreach ($definitions as $name => $vals) {
558+
if (!empty($vals['properties'])) {
559+
$definitions[$name]['properties'] = $this->convertArrayToSnakeCase($vals['properties']);
560+
}
561+
if (!empty($vals['required'])) {
562+
$snakeCaseRequired = [];
563+
foreach ($vals['required'] as $requiredProperty) {
564+
$snakeCaseRequired[] = SimpleDataObjectConverter::camelCaseToSnakeCase($requiredProperty);
565+
}
566+
$definitions[$name]['required'] = $snakeCaseRequired;
567+
}
568+
}
569+
return $definitions;
570+
}
571+
572+
/**
573+
* Converts associative array's key names from camelCase to snake_case, recursively.
574+
*
575+
* @param array $properties
576+
* @return array
577+
*/
578+
private function convertArrayToSnakeCase($properties)
579+
{
580+
foreach ($properties as $name => $value) {
581+
$snakeCaseName = SimpleDataObjectConverter::camelCaseToSnakeCase($name);
582+
if (is_array($value)) {
583+
$value = $this->convertArrayToSnakeCase($value);
584+
}
585+
unset($properties[$name]);
586+
$properties[$snakeCaseName] = $value;
587+
}
588+
return $properties;
589+
}
590+
548591
/**
549592
* Get definition reference
550593
*

dev/tests/api-functional/testsuite/Magento/Webapi/JsonGenerationFromDataObjectTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public function getExpectedMultiServiceData()
240240
'type' => 'object',
241241
'description' => 'Interface for custom attribute value.',
242242
'properties' => [
243-
'attributeCode' => [
243+
'attribute_code' => [
244244
'type' => 'string',
245245
'description' => 'Attribute code',
246246
],
@@ -250,15 +250,15 @@ public function getExpectedMultiServiceData()
250250
],
251251
],
252252
'required' => [
253-
'attributeCode',
253+
'attribute_code',
254254
'value',
255255
],
256256
],
257257
'test-module5-v1-entity-all-soap-and-rest' => [
258258
'type' => 'object',
259259
'description' => 'Some Data Object short description. Data Object long multi line description.',
260260
'properties' => [
261-
'entityId' => [
261+
'entity_id' => [
262262
'type' => 'integer',
263263
'description' => 'Item ID',
264264
],
@@ -274,7 +274,7 @@ public function getExpectedMultiServiceData()
274274
'type' => 'boolean',
275275
'description' => 'If current entity has a property defined',
276276
],
277-
'customAttributes' => [
277+
'custom_attributes' => [
278278
'type' => 'array',
279279
'description' => 'Custom attributes values.',
280280
'items' => [
@@ -283,7 +283,7 @@ public function getExpectedMultiServiceData()
283283
],
284284
],
285285
'required' => [
286-
'entityId',
286+
'entity_id',
287287
'enabled',
288288
'orders',
289289
],

0 commit comments

Comments
 (0)