Skip to content

Commit

Permalink
Merge pull request #14 from TomHAnderson/feature/simplify-embedding
Browse files Browse the repository at this point in the history
Feature/simplify embedding
  • Loading branch information
TomHAnderson committed Jan 30, 2022
2 parents 62438d1 + 84b7f70 commit c087a9e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ final class UserHydrator extends Hydrator
// is used for arrays and `addEmbeddedResource` is used for classes
return $this->hydratorManager->resource($data)
->addLink('self', route('hal/user::fetch', $class->id))
->addEmbeddedResources('roles', $this->hydratorManager->extract($class->roles))
->addEmbeddedResources('roles', $class->roles)
;
}
}
Expand Down
8 changes: 6 additions & 2 deletions src/Resource.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,13 @@ public function addLink(string $reference, $definition): self
return $this;
}

public function addEmbeddedResource(string $ref, Resource |null $resource): self
public function addEmbeddedResource(string $ref, object |null $resource, ?string $hydrator = null): self
{
$this->embedded[$ref] = $resource;
if ($resource instanceof Resource || $resource === null) {
$this->embedded[$ref] = $resource;
} else {
$this->embedded[$ref] = $this->hydratorManager->extract($resource, $hydrator);
}

return $this;
}
Expand Down
15 changes: 15 additions & 0 deletions test/ResourceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,21 @@ public function testNullEmbeddedResource(): void
$this->assertNull($result['_embedded']['embedded']);
}

public function testObjectEmbeddedResource(): void
{
$user = new User();
$user->id = 1;
$user->name = 'Test';
$user->email = 'test@testing.net';

$hydratorManager = new HydratorManager();
$resource1 = $hydratorManager->resource();
$resource1->addEmbeddedResource('user', $user);
$result = $resource1->toArray();

$this->assertEquals(1, $result['_embedded']['user']['id']);
}

public function testEmbeddedResources(): void
{
$hydratorManager = new HydratorManager();
Expand Down

0 comments on commit c087a9e

Please sign in to comment.