Skip to content

Commit 21bff3e

Browse files
#106821 Fetch x-lg-resource-class-name from final object
1 parent e03fbfa commit 21bff3e

File tree

5 files changed

+48
-13
lines changed

5 files changed

+48
-13
lines changed

src/Generators/ResourcesGenerator.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,19 @@ protected function extractResources(SpecObjectInterface $specObject): array
6565
$responseKeyParts = explode('.', $responseKey);
6666
foreach ($responseKeyParts as $responseKeyPart) {
6767
$flag = false;
68-
do_with_all_of($responseData, function (stdClass $p) use (&$responseData, &$flag, $responseKeyPart) {
68+
do_with_all_of($responseData, function (stdClass $p) use (&$responseData, &$flag, $responseKeyPart, &$className) {
6969
if (std_object_has($p, 'properties')) {
7070
if (std_object_has($p->properties, $responseKeyPart)) {
7171
$responseData = $p->properties->$responseKeyPart;
7272
$flag = true;
73+
74+
if (std_object_has($p->properties->$responseKeyPart, 'x-lg-resource-class-name')) {
75+
$className = $p->properties->$responseKeyPart->{'x-lg-resource-class-name'};
76+
}
7377
}
7478
}
7579
});
80+
7681
if (!$flag) {
7782
$responseData = null;
7883

tests/GenerateServerTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757

5858
$this->makeFilePath('/app/Http/Resources/ResourcesResource.php'),
5959
$this->makeFilePath('/app/Http/Resources/ResourcesDataDataResource.php'),
60+
$this->makeFilePath('/app/Http/Resources/ResourcesDataWithNameResource.php'),
6061
$this->makeFilePath('/app/Http/Resources/ResourceRootResource.php'),
6162

6263
$this->makeFilePath('/app/Http/Controllers/PoliciesController.php'),

tests/ResourceGenerationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@
4343

4444
assertEqualsCanonicalizing(['foo', 'bar'], $resources['ResourcesResource.php']);
4545
assertEqualsCanonicalizing(['foo', 'bar'], $resources['ResourcesDataDataResource.php']);
46+
assertEqualsCanonicalizing(['foo', 'bar'], $resources['ResourcesDataWithNameResource.php']);
4647
assertEqualsCanonicalizing(['data'], $resources['ResourceRootResource.php']);
4748
});

tests/resources/index.yaml

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,30 @@ info:
44
version: 1.0.0
55
description: Тестовый конфиг
66
paths:
7+
/resources:test-empty-rename-request:
8+
post:
9+
operationId: testEmptyRenameRequest
10+
x-lg-handler: '\App\Http\Controllers\ResourcesController@testEmptyRenameRequest'
11+
x-lg-request-class-name: ''
12+
responses:
13+
"200":
14+
description: Успешный ответ c контекстом
15+
content:
16+
application/json:
17+
schema:
18+
$ref: './schemas/test_resource_generation.yaml#/ResourceDataDataResponse'
19+
/resources:test-rename-from-key-request:
20+
post:
21+
operationId: testRenameFromKeyRequest
22+
x-lg-handler: '\App\Http\Controllers\ResourcesController@testRenameFromKeyRequest'
23+
x-lg-request-class-name: ''
24+
responses:
25+
"200":
26+
description: Успешный ответ c контекстом
27+
content:
28+
application/json:
29+
schema:
30+
$ref: './schemas/test_resource_generation.yaml#/ResourceDataWithNameResponse'
731
/resources:test-full-generate/{id}:
832
post:
933
operationId: testFullGenerate
@@ -22,18 +46,6 @@ paths:
2246
$ref: './schemas/test_resource_generation.yaml#/ResourceForTestResourceGenerationResponse'
2347
"500":
2448
$ref: '#/components/responses/ServerError'
25-
/resources:test-empty-rename-request:
26-
post:
27-
operationId: testEmptyRenameRequest
28-
x-lg-handler: '\App\Http\Controllers\ResourcesController@testEmptyRenameRequest'
29-
x-lg-request-class-name: ''
30-
responses:
31-
"200":
32-
description: Успешный ответ c контекстом
33-
content:
34-
application/json:
35-
schema:
36-
$ref: './schemas/test_resource_generation.yaml#/ResourceDataDataResponse'
3749
/resources:test-rename-request:
3850
post:
3951
operationId: testRenameRequest

tests/resources/schemas/test_resource_generation.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ ResourceForTestResourceGeneration:
44
- $ref: '#/ResourceFillableProperties'
55
- $ref: '#/ResourceRequired'
66

7+
ResourceForTestResourceWithNameGeneration:
8+
x-lg-resource-class-name: ResourcesDataWithNameResource
9+
allOf:
10+
- $ref: '#/ResourceReadOnlyProperties'
11+
- $ref: '#/ResourceFillableProperties'
12+
- $ref: '#/ResourceRequired'
13+
714
ResourceReadOnlyProperties:
815
type: object
916
properties:
@@ -37,6 +44,15 @@ ResourceDataDataResponse:
3744
data:
3845
$ref: '#/ResourceForTestResourceGeneration'
3946

47+
ResourceDataWithNameResponse:
48+
type: object
49+
x-lg-resource-response-key: data.test
50+
properties:
51+
data:
52+
properties:
53+
test:
54+
$ref: '#/ResourceForTestResourceWithNameGeneration'
55+
4056
ResourceRootResponse:
4157
type: object
4258
x-lg-resource-response-key: false

0 commit comments

Comments
 (0)