Skip to content

Commit 573a57a

Browse files
committed
formatting
1 parent 215b9ba commit 573a57a

File tree

3 files changed

+88
-110
lines changed

3 files changed

+88
-110
lines changed

src/Illuminate/Http/Resources/JsonApi/AnonymousResourceCollection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function with($request)
1818
{
1919
return array_filter([
2020
'included' => $this->collection
21-
->map(fn ($resource) => $resource->resolveResourceIncluded($request))
21+
->map(fn ($resource) => $resource->resolveIncludedResources($request))
2222
->flatten(depth: 1)
2323
->uniqueStrict(fn ($relation): array => [$relation['id'], $relation['type']])
2424
->all(),

src/Illuminate/Http/Resources/JsonApi/Concerns/ResolvesJsonApiSpecifications.php

Lines changed: 86 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,65 @@ trait ResolvesJsonApiSpecifications
2020
*
2121
* @var \WeakMap|null
2222
*/
23-
protected $cachedLoadedRelationshipsMap;
23+
protected $loadedRelationshipsMap;
2424

2525
/**
2626
* Cached loaded relationships identifers.
27-
*
28-
* @var array
2927
*/
30-
protected array $cachedLoadedRelationshipsIdentifier = [];
28+
protected array $loadedRelationshipIdentifiers = [];
29+
30+
/**
31+
* Resolves `data` for the resource.
32+
*/
33+
public function resolveResourceData(Request $request): array
34+
{
35+
return [
36+
'id' => $this->resolveResourceIdentifier($request),
37+
'type' => $this->resolveResourceType($request),
38+
...(new Collection([
39+
'attributes' => $this->resolveResourceAttributes($request),
40+
'relationships' => $this->resolveResourceRelationshipIdentifiers($request),
41+
'links' => $this->resolveResourceLinks($request),
42+
'meta' => $this->resolveResourceMetaInformation($request),
43+
]))->filter()->map(fn ($value) => (object) $value),
44+
];
45+
}
3146

3247
/**
33-
* Resolves `attributes` for the resource's data object.
48+
* Resolve the resource's identifier.
3449
*
35-
* @param \Illuminate\Http\Request $request
3650
* @return string|int
3751
*
52+
* @throws ResourceIdentificationException
53+
*/
54+
protected function resolveResourceIdentifier(Request $request): string
55+
{
56+
if (! $this->resource instanceof Model) {
57+
throw ResourceIdentificationException::attemptingToDetermineIdFor($this);
58+
}
59+
60+
return static::resourceIdFromModel($this->resource);
61+
}
62+
63+
/**
64+
* Resolve the resource's type.
65+
*
66+
*
67+
* @throws ResourceIdentificationException
68+
*/
69+
protected function resolveResourceType(Request $request): string
70+
{
71+
if (! $this->resource instanceof Model) {
72+
throw ResourceIdentificationException::attemptingToDetermineTypeFor($this);
73+
}
74+
75+
return static::resourceTypeFromModel($this->resource);
76+
}
77+
78+
/**
79+
* Resolve the resource's attributes.
80+
*
81+
*
3882
* @throws \RuntimeException
3983
*/
4084
protected function resolveResourceAttributes(Request $request): array
@@ -57,12 +101,11 @@ protected function resolveResourceAttributes(Request $request): array
57101
/**
58102
* Resolves `relationships` for the resource's data object.
59103
*
60-
* @param \Illuminate\Http\Request $request
61104
* @return string|int
62105
*
63106
* @throws \RuntimeException
64107
*/
65-
protected function resolveResourceRelationshipsIdentifiers(Request $request): array
108+
protected function resolveResourceRelationshipIdentifiers(Request $request): array
66109
{
67110
if (! $this->resource instanceof Model) {
68111
return [];
@@ -71,91 +114,43 @@ protected function resolveResourceRelationshipsIdentifiers(Request $request): ar
71114
$this->compileResourceRelationships($request);
72115

73116
return [
74-
...$this->cachedLoadedRelationshipsIdentifier,
117+
...$this->loadedRelationshipIdentifiers,
75118
];
76119
}
77120

78-
/**
79-
* Resolves `data` for the resource.
80-
*
81-
* @param \Illuminate\Http\Request $request
82-
* @return array
83-
*/
84-
public function resolveResourceData(Request $request): array
85-
{
86-
return [
87-
'id' => $this->resolveResourceIdentifier($request),
88-
'type' => $this->resolveResourceType($request),
89-
...(new Collection([
90-
'attributes' => $this->resolveResourceAttributes($request),
91-
'relationships' => $this->resolveResourceRelationshipsIdentifiers($request),
92-
'links' => $this->resolveResourceLinks($request),
93-
'meta' => $this->resolveMetaInformations($request),
94-
]))->filter()->map(fn ($value) => (object) $value),
95-
];
96-
}
97-
98-
/**
99-
* Resolves `included` for the resource.
100-
*
101-
* @param \Illuminate\Http\Request $request
102-
* @return array
103-
*/
104-
public function resolveResourceIncluded(Request $request): array
105-
{
106-
$this->compileResourceRelationships($request);
107-
108-
$relations = new Collection();
109-
110-
foreach ($this->cachedLoadedRelationshipsMap as $relation => $uniqueKey) {
111-
$resource = rescue(fn () => $relation->toResource(), new JsonApiResource($relation), false);
112-
113-
$relations->push([
114-
'id' => $uniqueKey[1],
115-
'type' => $uniqueKey[0],
116-
'attributes' => $resource->toArray($request),
117-
]);
118-
}
119-
120-
return $relations->uniqueStrict(fn ($relation): array => [$relation['id'], $relation['type']])->all();
121-
}
122-
123121
/**
124122
* Compile resource relationships.
125-
*
126-
* @param \Illuminate\Http\Request $request
127-
* @return void
128123
*/
129124
protected function compileResourceRelationships(Request $request): void
130125
{
131-
if ($this->cachedLoadedRelationshipsMap instanceof WeakMap) {
126+
if ($this->loadedRelationshipsMap instanceof WeakMap) {
132127
return;
133128
}
134129

135-
$this->cachedLoadedRelationshipsMap = new WeakMap;
130+
$this->loadedRelationshipsMap = new WeakMap;
136131

137-
$this->cachedLoadedRelationshipsIdentifier = (new Collection($this->resource->getRelations()))
132+
$this->loadedRelationshipIdentifiers = (new Collection($this->resource->getRelations()))
138133
->mapWithKeys(function ($relations, $key) {
139134
if ($relations instanceof Collection) {
140135
if ($relations->isEmpty()) {
141136
return [$key => ['data' => $relations]];
142137
}
143138

144-
$key = static::getResourceTypeFromEloquent($relations->first());
139+
$key = static::resourceTypeFromModel($relations->first());
145140

146141
return [$key => ['data' => $relations->map(function ($relation) use ($key) {
147-
return transform([$key, static::getResourceIdFromEloquent($relation)], function ($uniqueKey) use ($relation) {
148-
$this->cachedLoadedRelationshipsMap[$relation] = $uniqueKey;
142+
return transform([$key, static::resourceIdFromModel($relation)], function ($uniqueKey) use ($relation) {
143+
$this->loadedRelationshipsMap[$relation] = $uniqueKey;
149144

150145
return ['id' => $uniqueKey[1], 'type' => $uniqueKey[0]];
151146
});
152147
})]];
153148
}
154149

155150
return [$key => ['data' => transform(
156-
[static::getResourceTypeFromEloquent($relations), static::getResourceIdFromEloquent($relations)],
151+
[static::resourceTypeFromModel($relations), static::resourceIdFromModel($relations)],
157152
function ($uniqueKey) use ($relations) {
158-
$this->cachedLoadedRelationshipsMap[$relations] = $uniqueKey;
153+
$this->loadedRelationshipsMap[$relations] = $uniqueKey;
159154

160155
return ['id' => $uniqueKey[1], 'type' => $uniqueKey[0]];
161156
}
@@ -164,43 +159,32 @@ function ($uniqueKey) use ($relations) {
164159
}
165160

166161
/**
167-
* Resolves `id` for the resource.
168-
*
169-
* @param \Illuminate\Http\Request $request
170-
* @return string|int
171-
*
172-
* @throws \RuntimeException
162+
* Resolves `included` for the resource.
173163
*/
174-
protected function resolveResourceIdentifier(Request $request): string
164+
public function resolveIncludedResources(Request $request): array
175165
{
176-
if ($this->resource instanceof Model) {
177-
return static::getResourceIdFromEloquent($this->resource);
178-
}
166+
$this->compileResourceRelationships($request);
179167

180-
throw ResourceIdentificationException::attemptingToDetermineIdFor($this);
181-
}
168+
$relations = new Collection;
182169

183-
/**
184-
* Resolves `type` for the resource.
185-
*
186-
* @param \Illuminate\Http\Request $request
187-
* @return string
188-
*
189-
* @throws \RuntimeException
190-
*/
191-
protected function resolveResourceType(Request $request): string
192-
{
193-
if ($this->resource instanceof Model) {
194-
return static::getResourceTypeFromEloquent($this->resource);
170+
foreach ($this->loadedRelationshipsMap as $relation => $uniqueKey) {
171+
$resource = rescue(fn () => $relation->toResource(), new JsonApiResource($relation), false);
172+
173+
$relations->push([
174+
'id' => $uniqueKey[1],
175+
'type' => $uniqueKey[0],
176+
'attributes' => $resource->toArray($request),
177+
]);
195178
}
196179

197-
throw ResourceIdentificationException::attemptingToDetermineTypeFor($this);
180+
return $relations->uniqueStrict(
181+
fn ($relation): array => [$relation['id'], $relation['type']]
182+
)->all();
198183
}
199184

200185
/**
201-
* Resolves `links` object for the resource.
186+
* Resolve the links for the resource.
202187
*
203-
* @param \Illuminate\Http\Request $request
204188
* @return array<string, mixed>
205189
*/
206190
protected function resolveResourceLinks(Request $request): array
@@ -209,40 +193,34 @@ protected function resolveResourceLinks(Request $request): array
209193
}
210194

211195
/**
212-
* Resolves `meta` object for the resource.
196+
* Resolve the meta information for the resource.
213197
*
214-
* @param \Illuminate\Http\Request $request
215198
* @return array<string, mixed>
216199
*/
217-
protected function resolveMetaInformations(Request $request): array
200+
protected function resolveResourceMetaInformation(Request $request): array
218201
{
219202
return $this->meta($request);
220203
}
221204

222205
/**
223-
* Get expected resource ID from eloquent model.
224-
*
225-
* @param \Illuminate\Database\Eloquent\Model $model
226-
* @return string
206+
* Get the resource ID from the given Eloquent model.
227207
*/
228-
protected static function getResourceIdFromEloquent(Model $model): string
208+
protected static function resourceIdFromModel(Model $model): string
229209
{
230210
return $model->getKey();
231211
}
232212

233213
/**
234-
* Get expected resource type from eloquent model.
235-
*
236-
* @param \Illuminate\Database\Eloquent\Model $model
237-
* @return string
214+
* Get the resource type from the given Eloquent model.
238215
*/
239-
protected static function getResourceTypeFromEloquent(Model $model): string
216+
protected static function resourceTypeFromModel(Model $model): string
240217
{
241218
$modelClassName = $model::class;
242-
$morphMap = Relation::getMorphAlias($modelClassName);
243219

244-
$modelBaseName = $morphMap !== $modelClassName ? $morphMap : class_basename($modelClassName);
220+
$morphMap = Relation::getMorphAlias($modelClassName);
245221

246-
return Str::of($modelBaseName)->snake()->pluralStudly();
222+
return Str::of(
223+
$morphMap !== $modelClassName ? $morphMap : class_basename($modelClassName)
224+
)->snake()->pluralStudly();
247225
}
248226
}

src/Illuminate/Http/Resources/JsonApi/JsonApiResource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public function meta(Request $request)
110110
public function with($request)
111111
{
112112
return array_filter([
113-
'included' => $this->resolveResourceIncluded($request),
113+
'included' => $this->resolveIncludedResources($request),
114114
...($implementation = static::$jsonApiInformation)
115115
? ['jsonapi' => $implementation]
116116
: [],

0 commit comments

Comments
 (0)