Skip to content

Commit 2689dfa

Browse files
author
Ni Nelli
committed
feat: add API resource fields generation
refs: #202
1 parent db58b8f commit 2689dfa

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

src/Generators/ResourceGenerator.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public function generateResource(): void
5353
'entity' => $this->model,
5454
'namespace' => $this->getNamespace('resources'),
5555
'model_namespace' => $this->getNamespace('models', $this->modelSubFolder),
56+
'fields' => $this->fields,
5657
]);
5758

5859
$this->saveClass('resources', "{$this->model}Resource", $resourceContent, $this->model);

stubs/resource.blade.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
*/
99
class {{ $entity }}Resource extends BaseResource
1010
{
11+
@if (empty($fields))
1112
//TODO implement custom serialization logic or remove method redefining
13+
@endif
1214
public function toArray($request): array
1315
{
14-
return parent::toArray($request);
15-
}
16+
@if (!empty($fields))
17+
return [
18+
@foreach($fields as $field)
19+
'{{ $field }}' => $this->resource->{{ $field }},
20+
@endforeach
21+
];
22+
@else
23+
return parent::toArray($request);
24+
@endif
25+
}
1626
}

tests/ResourceGeneratorTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,29 @@ public function testCreateResources()
6969
]);
7070
}
7171

72+
public function testCreateResourcesWithFields()
73+
{
74+
app(ResourceGenerator::class)
75+
->setModel('Post')
76+
->setFields([
77+
'id',
78+
'title',
79+
'description',
80+
'owner_id',
81+
])
82+
->generate();
83+
84+
$this->assertGeneratedFileEquals('post_resource_with_fields.php', 'app/Http/Resources/Post/PostResource.php');
85+
$this->assertGeneratedFileEquals('post_collection_resource.php', 'app/Http/Resources/Post/PostsCollectionResource.php');
86+
87+
$this->assertEventPushedChain([
88+
SuccessCreateMessage::class => [
89+
'Created a new Resource: PostResource',
90+
'Created a new CollectionResource: PostsCollectionResource',
91+
],
92+
]);
93+
}
94+
7295
public function testCreateResourcesResourceStubNotExist()
7396
{
7497
config(['entity-generator.stubs.resource' => 'incorrect_stub']);
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace App\Http\Resources\Post;
4+
5+
use RonasIT\Support\Http\BaseResource;
6+
use App\Models\Post;
7+
8+
/**
9+
* @property Post $resource
10+
*/
11+
class PostResource extends BaseResource
12+
{
13+
public function toArray($request): array
14+
{
15+
return [
16+
'id' => $this->resource->id,
17+
'title' => $this->resource->title,
18+
'description' => $this->resource->description,
19+
'owner_id' => $this->resource->owner_id,
20+
];
21+
}
22+
}

0 commit comments

Comments
 (0)