Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 7e03009

Browse files
added DepthAwareMetadataInterface
1 parent bc29831 commit 7e03009

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Zend\Expressive\Hal\Metadata;
5+
6+
interface DepthAwareMetadataInterface
7+
{
8+
/**
9+
* Returns configured max depth
10+
*
11+
* @return int
12+
*/
13+
public function getMaxDepth(): int;
14+
15+
/**
16+
* Determines whenever the current depth level exceeds the allowed max depth
17+
*
18+
* @param int $currentDepth
19+
*
20+
* @return bool
21+
*/
22+
public function hasReachedMaxDepth(int $currentDepth): bool;
23+
}

src/Metadata/RouteBasedResourceMetadata.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Zend\Expressive\Hal\Metadata;
99

10-
class RouteBasedResourceMetadata extends AbstractResourceMetadata
10+
class RouteBasedResourceMetadata extends AbstractResourceMetadata implements DepthAwareMetadataInterface
1111
{
1212
/** @var string */
1313
private $resourceIdentifier;
@@ -71,4 +71,9 @@ public function getMaxDepth(): int
7171
{
7272
return $this->maxDepth;
7373
}
74+
75+
public function hasReachedMaxDepth(int $currentDepth): bool
76+
{
77+
return $currentDepth > $this->maxDepth;
78+
}
7479
}

src/ResourceGenerator/ExtractInstanceTrait.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Psr\Http\Message\ServerRequestInterface;
1111
use Zend\Expressive\Hal\Metadata\AbstractCollectionMetadata;
1212
use Zend\Expressive\Hal\Metadata\AbstractMetadata;
13+
use Zend\Expressive\Hal\Metadata\DepthAwareMetadataInterface;
1314
use Zend\Expressive\Hal\Metadata\RouteBasedResourceMetadata;
1415
use Zend\Expressive\Hal\ResourceGenerator;
1516
use Zend\Hydrator\ExtractionInterface;
@@ -39,14 +40,8 @@ private function extractInstance(
3940

4041
$array = $extractor->extract($instance);
4142

42-
if ($metadata instanceof RouteBasedResourceMetadata) {
43-
$maxDepth = $metadata->getMaxDepth();
44-
if ($depth > $maxDepth) {
45-
$resourceIdentifier = $metadata->getResourceIdentifier();
46-
return [
47-
$resourceIdentifier => $array[$resourceIdentifier]
48-
];
49-
}
43+
if ($metadata instanceof DepthAwareMetadataInterface && $metadata->hasReachedMaxDepth($depth)) {
44+
return $array;
5045
}
5146

5247
// Extract nested resources if present in metadata map

src/ResourceGenerator/RouteBasedResourceStrategy.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ public function createResource(
4747
$routeParams[$routeIdentifier] = $data[$resourceIdentifier];
4848
}
4949

50-
$maxDepth = $metadata->getMaxDepth();
51-
if ($depth > $maxDepth) {
50+
if ($metadata instanceof Metadata\DepthAwareMetadataInterface && $metadata->hasReachedMaxDepth($depth)) {
5251
$data = [];
5352
}
5453

0 commit comments

Comments
 (0)