Skip to content

Commit 7312d60

Browse files
committed
refacto: describer name retriever
1 parent d49c0f5 commit 7312d60

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/Descriptors/Describer.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,19 @@ abstract protected function resolveFor(Request $request, Model $model, string $f
124124
* @return string|Closure|null
125125
*/
126126
abstract public function retriever(): null|string|Closure;
127+
128+
/**
129+
* @param mixed $value
130+
* @param int|string $key
131+
*
132+
* @return int|string
133+
*/
134+
public static function retrieveName(mixed $value, int|string $key): int|string
135+
{
136+
if (is_int($key) && $value instanceof self && is_string($retriever = $value->retriever())) {
137+
return $retriever;
138+
}
139+
140+
return $key;
141+
}
127142
}

src/Descriptors/Resolver.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ protected function resolveValues(Request $request, ?iterable $values): ?array
2121

2222
return (new Collection($values))
2323
->reduce(function (Collection $fields, $value, int|string $key) use ($request) {
24-
if (is_int($key) && ($value instanceof Describer) && is_string($value->retriever())) {
25-
$key = $value->retriever();
26-
}
24+
$key = Describer::retrieveName($value, $key);
2725

2826
$fields[$key] = value(
2927
$value instanceof Describer

src/Resources/Concerns/Schema.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace Ark4ne\JsonApi\Resources\Concerns;
44

5+
use Ark4ne\JsonApi\Descriptors\Describer;
56
use Ark4ne\JsonApi\Descriptors\Relations\Relation;
67
use Ark4ne\JsonApi\Descriptors\Resolver;
7-
use Ark4ne\JsonApi\Descriptors\Values\Value;
88
use Ark4ne\JsonApi\Resources\Skeleton;
99
use Ark4ne\JsonApi\Support\FakeModel;
1010
use Illuminate\Http\Request;
@@ -35,18 +35,15 @@ public static function schema(Request $request = null): Skeleton
3535
$resource->toType($request)
3636
);
3737

38-
$schema->fields = (new Collection($resource->toAttributes($request)))->map(fn(
39-
$value,
40-
$key
41-
) => is_int($key) && ($value instanceof Value) && is_string($value->retriever())
42-
? $value->retriever()
43-
: $key
44-
)->values()->all();
38+
$schema->fields = (new Collection($resource->mergeValues($resource->toAttributes($request))))
39+
->map(fn($value, $key) => Describer::retrieveName($value, $key))
40+
->values()
41+
->all();
4542

4643
foreach ($resource->toRelationships($request) as $name => $relation) {
4744
if ($relation instanceof Relation) {
4845
$relationship = $relation->related();
49-
$name = is_int($name) && is_string($relation->retriever()) ? $relation->retriever() : $name;
46+
$name = Describer::retrieveName($relation, $name);
5047
} else {
5148
$relationship = $relation->getResource();
5249
}

0 commit comments

Comments
 (0)