Skip to content

Commit c087a9e

Browse files
authored
Merge pull request #14 from TomHAnderson/feature/simplify-embedding
Feature/simplify embedding
2 parents 62438d1 + 84b7f70 commit c087a9e

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ final class UserHydrator extends Hydrator
8484
// is used for arrays and `addEmbeddedResource` is used for classes
8585
return $this->hydratorManager->resource($data)
8686
->addLink('self', route('hal/user::fetch', $class->id))
87-
->addEmbeddedResources('roles', $this->hydratorManager->extract($class->roles))
87+
->addEmbeddedResources('roles', $class->roles)
8888
;
8989
}
9090
}

src/Resource.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,13 @@ public function addLink(string $reference, $definition): self
6363
return $this;
6464
}
6565

66-
public function addEmbeddedResource(string $ref, Resource |null $resource): self
66+
public function addEmbeddedResource(string $ref, object |null $resource, ?string $hydrator = null): self
6767
{
68-
$this->embedded[$ref] = $resource;
68+
if ($resource instanceof Resource || $resource === null) {
69+
$this->embedded[$ref] = $resource;
70+
} else {
71+
$this->embedded[$ref] = $this->hydratorManager->extract($resource, $hydrator);
72+
}
6973

7074
return $this;
7175
}

test/ResourceTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,21 @@ public function testNullEmbeddedResource(): void
5353
$this->assertNull($result['_embedded']['embedded']);
5454
}
5555

56+
public function testObjectEmbeddedResource(): void
57+
{
58+
$user = new User();
59+
$user->id = 1;
60+
$user->name = 'Test';
61+
$user->email = 'test@testing.net';
62+
63+
$hydratorManager = new HydratorManager();
64+
$resource1 = $hydratorManager->resource();
65+
$resource1->addEmbeddedResource('user', $user);
66+
$result = $resource1->toArray();
67+
68+
$this->assertEquals(1, $result['_embedded']['user']['id']);
69+
}
70+
5671
public function testEmbeddedResources(): void
5772
{
5873
$hydratorManager = new HydratorManager();

0 commit comments

Comments
 (0)