Skip to content

Commit 32e7a0c

Browse files
committed
wip
1 parent a7fc989 commit 32e7a0c

File tree

4 files changed

+19
-30
lines changed

4 files changed

+19
-30
lines changed

src/Concerns/Implementation.php

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,11 @@
55
namespace TiMacDonald\JsonApi\Concerns;
66

77
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\App;
89
use TiMacDonald\JsonApi\ServerImplementation;
910

1011
trait Implementation
1112
{
12-
/**
13-
* @internal
14-
*
15-
* @var (callable(): JsonApiServerImplementation)|null
16-
*/
17-
private static $serverImplementationResolver;
18-
1913
/**
2014
* @api
2115
*
@@ -24,26 +18,18 @@ trait Implementation
2418
*/
2519
public static function resolveServerImplementationUsing(callable $callback)
2620
{
27-
self::$serverImplementationResolver = $callback;
28-
}
29-
30-
/**
31-
* @internal
32-
*
33-
* @return void
34-
*/
35-
public static function resolveServerImplementationNormally()
36-
{
37-
self::$serverImplementationResolver = null;
21+
App::instance(self::class.':$serverImplementationResolver', $callback);
3822
}
3923

4024
/**
4125
* @internal
4226
*
43-
* @return (callable(Request): JsonApiServerImplementation)
27+
* @return (callable(Request): (JsonApiServerImplementation|null))
4428
*/
4529
public static function serverImplementationResolver()
4630
{
47-
return self::$serverImplementationResolver ??= fn (Request $request): ServerImplementation => new ServerImplementation('1.0');
31+
return App::bound(self::class.':$serverImplementationResolver')
32+
? App::make(self::class.':$serverImplementationResolver')
33+
: fn () => null;
4834
}
4935
}

src/JsonApiResource.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ public function toResourceIdentifier(Request $request)
9898
return new ResourceIdentifier($this->resolveType($request), $this->resolveId($request));
9999
}
100100

101+
/**
102+
* @return JsonApiServerImplementation|null
103+
*/
104+
public static function toServerImplementation(Request $request)
105+
{
106+
return self::serverImplementationResolver()($request);
107+
}
108+
101109
/**
102110
* @return array{id: string, type: string, attributes?: stdClass, relationships?: stdClass, meta?: stdClass, links?: stdClass}
103111
*/
@@ -125,7 +133,8 @@ public function with(Request $request)
125133
->uniqueStrict(fn (JsonApiResource $resource): array => $resource->uniqueKey($request))
126134
->values()
127135
->all()) ? ['included' => $included] : [],
128-
'jsonapi' => self::serverImplementationResolver()($request),
136+
...($implementation = self::toServerImplementation($request))
137+
? ['jsonapi' => $implementation] : [],
129138
];
130139
}
131140

src/JsonApiResourceCollection.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private function resolveResourceIdentifiers(Request $request)
4242
}
4343

4444
/**
45-
* @return array{included?: array<int, JsonApiResource>, jsonapi: JsonApiServerImplementation}
45+
* @return array{included?: array<int, JsonApiResource>, jsonapi?: JsonApiServerImplementation}
4646
*/
4747
public function with(Request $request)
4848
{
@@ -53,7 +53,8 @@ public function with(Request $request)
5353
->uniqueStrict(fn (JsonApiResource $resource): array => $resource->uniqueKey($request))
5454
->values()
5555
->all()) ? ['included' => $included] : [],
56-
'jsonapi' => JsonApiResource::serverImplementationResolver()($request),
56+
...($implementation = $this->collects::toServerImplementation($request))
57+
? ['jsonapi' => $implementation] : [],
5758
];
5859
}
5960

tests/TestCase.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,6 @@ public function setUp(): void
2424
$this->withoutExceptionHandling();
2525
}
2626

27-
protected function tearDown(): void
28-
{
29-
parent::tearDown();
30-
31-
JsonApiResource::resolveServerImplementationNormally();
32-
}
33-
3427
protected function assertValidJsonApi(TestResponse|string|array $data): void
3528
{
3629
if ($data instanceof TestResponse) {

0 commit comments

Comments
 (0)