From 94918f1ef80631194cc6b4a49cb7b56fbef0acf8 Mon Sep 17 00:00:00 2001 From: Krishan Koenig Date: Wed, 18 Dec 2024 12:20:23 +0100 Subject: [PATCH] wip --- phpstan-baseline.neon | 12 ++++++++++++ src/Http/Requests/ResourceHydratableRequest.php | 8 ++------ src/Resources/DecorateResource.php | 10 +++++++++- src/Resources/ResourceHydrator.php | 3 ++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 792c7ec6..b2a24ffa 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -372,6 +372,18 @@ parameters: count: 1 path: tests/Http/Middleware/GuardResponseTest.php + - + message: '#^Access to an undefined property Mollie\\Api\\Resources\\AnyResource\:\:\$customField\.$#' + identifier: property.notFound + count: 1 + path: tests/Resources/ResourceFactoryTest.php + + - + message: '#^Access to an undefined property Mollie\\Api\\Resources\\AnyResource\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: tests/Resources/ResourceFactoryTest.php + - message: '#^Property Tests\\Utils\\TestPropertiesClass\:\:\$privateProp is unused\.$#' identifier: property.unused diff --git a/src/Http/Requests/ResourceHydratableRequest.php b/src/Http/Requests/ResourceHydratableRequest.php index dd1d824b..701fc4b2 100644 --- a/src/Http/Requests/ResourceHydratableRequest.php +++ b/src/Http/Requests/ResourceHydratableRequest.php @@ -19,7 +19,7 @@ abstract class ResourceHydratableRequest extends Request * * @var string|null|DecorateResource */ - protected ?string $customHydratableResource = null; + protected $customHydratableResource = null; public function isHydratable(): bool { @@ -39,7 +39,7 @@ public function getHydratableResource() } /** - * @param string|DecorateResource $hydratableResource + * @param string|DecorateResource $hydratableResource */ public function setHydratableResource($hydratableResource): self { @@ -47,10 +47,6 @@ public function setHydratableResource($hydratableResource): self throw new \InvalidArgumentException("The resource class '{$hydratableResource}' does not exist."); } - if ($hydratableResource instanceof DecorateResource && ! $hydratableResource->getDecorator()) { - throw new \InvalidArgumentException('The decorator class is not set.'); - } - $this->customHydratableResource = $hydratableResource; return $this; diff --git a/src/Resources/DecorateResource.php b/src/Resources/DecorateResource.php index a8ec0da0..97125eca 100644 --- a/src/Resources/DecorateResource.php +++ b/src/Resources/DecorateResource.php @@ -10,9 +10,13 @@ class DecorateResource protected ?string $decorator = null; - public function __construct(string $decoratedResource) + public function __construct(string $decoratedResource, ?string $decorator = null) { $this->decoratedResource = $decoratedResource; + + if ($decorator) { + $this->with($decorator); + } } public function with(string $decorator): self @@ -33,6 +37,10 @@ public function getDecoratedResource(): string public function getDecorator(): ?string { + if (! $this->decorator) { + throw new \InvalidArgumentException('The decorator class is not set.'); + } + return $this->decorator; } } diff --git a/src/Resources/ResourceHydrator.php b/src/Resources/ResourceHydrator.php index bbe9e9ab..fa0851d8 100644 --- a/src/Resources/ResourceHydrator.php +++ b/src/Resources/ResourceHydrator.php @@ -3,6 +3,7 @@ namespace Mollie\Api\Resources; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\ResourceDecorator; use Mollie\Api\Http\Request; use Mollie\Api\Http\Requests\ResourceHydratableRequest; use Mollie\Api\Http\Response; @@ -12,7 +13,7 @@ class ResourceHydrator /** * Hydrate a response into a resource or collection * - * @return Response|BaseResource|BaseCollection|LazyCollection + * @return Response|BaseResource|BaseCollection|LazyCollection|ResourceDecorator */ public function hydrate(ResourceHydratableRequest $request, Response $response) {