From 163983147ad4426a028ae7802b4d744b516908c9 Mon Sep 17 00:00:00 2001 From: bjorn Date: Wed, 25 Apr 2018 15:57:52 +0200 Subject: [PATCH 1/3] Update art4/json-api-client to 0.9.1, has some breaking changes. --- composer.json | 2 +- src/JsonApi/Hydrator.php | 29 ++++++++++++++++------------- src/JsonApi/Parser.php | 32 ++++++++++++++++---------------- tests/JsonApi/HydratorTest.php | 4 ++-- 4 files changed, 35 insertions(+), 32 deletions(-) diff --git a/composer.json b/composer.json index 55c7f9d..d57d7b5 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "A PHP package for mapping remote {json:api} resources to Eloquent like models and collections.", "require": { "php": ">=7.0", - "art4/json-api-client": "^0.6.3", + "art4/json-api-client": "^0.9.1", "illuminate/support": "5.3.*|5.4.*|5.5.*", "jenssegers/model": "^1.1", "php-http/client-implementation": "^1.0", diff --git a/src/JsonApi/Hydrator.php b/src/JsonApi/Hydrator.php index 55aece2..a857397 100644 --- a/src/JsonApi/Hydrator.php +++ b/src/JsonApi/Hydrator.php @@ -3,9 +3,12 @@ namespace Swis\JsonApi\Client\JsonApi; use Art4\JsonApiClient\AccessInterface; -use Art4\JsonApiClient\Resource\CollectionInterface as JsonApiCollection; -use Art4\JsonApiClient\Resource\IdentifierCollection; -use Art4\JsonApiClient\Resource\ItemInterface as JsonApItem; +use Art4\JsonApiClient\ResourceCollectionInterface; +use Art4\JsonApiClient\ResourceCollectionInterface as JsonApiCollection; +use Art4\JsonApiClient\ResourceIdentifierCollection as IdentifierCollection; +use Art4\JsonApiClient\ResourceIdentifierCollectionInterface; +use Art4\JsonApiClient\ResourceIdentifierInterface; +use Art4\JsonApiClient\ResourceItemInterface as JsonApItem; use Swis\JsonApi\Client\Collection; use Swis\JsonApi\Client\Interfaces\ItemInterface; use Swis\JsonApi\Client\Interfaces\TypeMapperInterface; @@ -28,7 +31,7 @@ public function __construct(TypeMapperInterface $typeMapper) } /** - * @param \Art4\JsonApiClient\Resource\CollectionInterface $jsonApiCollection + * @param \Art4\JsonApiClient\ResourceCollectionInterface $jsonApiCollection * * @return \Swis\JsonApi\Client\Collection */ @@ -43,7 +46,7 @@ public function hydrateCollection(JsonApiCollection $jsonApiCollection) } /** - * @param \Art4\JsonApiClient\Resource\ItemInterface $jsonApiItem + * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem * * @return \Swis\JsonApi\Client\Interfaces\ItemInterface */ @@ -60,7 +63,7 @@ public function hydrateItem(JsonApItem $jsonApiItem) } /** - * @param \Art4\JsonApiClient\Resource\ItemInterface $jsonApiItem + * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem * * @return \Swis\JsonApi\Client\Interfaces\ItemInterface */ @@ -75,7 +78,7 @@ protected function getItemClass(JsonApItem $jsonApiItem): ItemInterface } /** - * @param \Art4\JsonApiClient\Resource\ItemInterface $jsonApiItem + * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem * @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item */ protected function hydrateAttributes(JsonApItem $jsonApiItem, ItemInterface $item) @@ -106,11 +109,11 @@ function (JsonApItem $jsonApiItem) use ($items) { $relationships = $this->getJsonApiDocumentRelationships($jsonApiItem); foreach ($relationships as $name => $relationship) { - /** @var \Art4\JsonApiClient\Resource\ResourceInterface $data */ + /** @var \Art4\JsonApiClient\ResourceItemInterface $data */ $data = $relationship->get('data'); $method = camel_case($name); - if ($data->isIdentifier()) { + if ($data instanceof ResourceIdentifierInterface) { $includedItem = $this->getIncludedItem($items, $data); if ($includedItem instanceof NullItem) { @@ -118,7 +121,7 @@ function (JsonApItem $jsonApiItem) use ($items) { } $item->setRelation($method, $includedItem); - } elseif ($data->isCollection()) { + } elseif ($data instanceof ResourceCollectionInterface || $data instanceof ResourceIdentifierCollectionInterface) { $collection = $this->getIncludedItems($items, $data); $item->setRelation($method, $collection); @@ -129,7 +132,7 @@ function (JsonApItem $jsonApiItem) use ($items) { } /** - * @param \Art4\JsonApiClient\Resource\ItemInterface $jsonApiItem + * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem * * @return \Art4\JsonApiClient\Relationship[] */ @@ -168,7 +171,7 @@ protected function accessorBelongsToItem(AccessInterface $accessor, ItemInterfac /** * @param \Swis\JsonApi\Client\Collection $included - * @param \Art4\JsonApiClient\Resource\IdentifierCollection $collection + * @param \Art4\JsonApiClient\ResourceIdentifierCollection $collection * * @return \Swis\JsonApi\Client\Collection */ @@ -182,7 +185,7 @@ function (ItemInterface $item) use ($collection) { } /** - * @param \Art4\JsonApiClient\Resource\Identifier[] $relatedIdentifiers + * @param \Art4\JsonApiClient\ResourceIdentifier[] $relatedIdentifiers * @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item * * @return bool diff --git a/src/JsonApi/Parser.php b/src/JsonApi/Parser.php index 9a5cfcd..d06f6c6 100644 --- a/src/JsonApi/Parser.php +++ b/src/JsonApi/Parser.php @@ -2,8 +2,9 @@ namespace Swis\JsonApi\Client\JsonApi; -use Art4\JsonApiClient\DocumentInterface as JsonApiDocumentInterface; -use Art4\JsonApiClient\Resource\ResourceInterface as JsonApiResourceInterface; +use Art4\JsonApiClient\DocumentInterface as Art4JsonApiDocumentInterface; +use Art4\JsonApiClient\ResourceCollectionInterface; +use Art4\JsonApiClient\ResourceItemInterface; use Art4\JsonApiClient\Utils\Manager as Art4JsonApiClientManager; use Swis\JsonApi\Client\Collection; use Swis\JsonApi\Client\CollectionDocument; @@ -81,12 +82,12 @@ public function deserialize(string $json): DocumentInterface * * @return \Art4\JsonApiClient\DocumentInterface */ - private function getJsonApiDocument(string $json): JsonApiDocumentInterface + private function getJsonApiDocument(string $json): Art4JsonApiDocumentInterface { /** @var \Art4\JsonApiClient\DocumentInterface $jsonApiDocument */ $jsonApiDocument = $this->manager->parse($json); - if (!$jsonApiDocument instanceof JsonApiDocumentInterface) { + if (!$jsonApiDocument instanceof Art4JsonApiDocumentInterface) { throw new \DomainException('Result is not a JSON API Document'); } @@ -100,7 +101,7 @@ private function getJsonApiDocument(string $json): JsonApiDocumentInterface * * @return \Swis\JsonApi\Client\Interfaces\DocumentInterface */ - protected function buildDataDocument(JsonApiDocumentInterface $jsonApiDocument): DocumentInterface + protected function buildDataDocument(Art4JsonApiDocumentInterface $jsonApiDocument): DocumentInterface { $data = $this->getJsonApiDocumentData($jsonApiDocument); $includedInDocument = $this->getJsonApiDocumentIncluded($jsonApiDocument); @@ -108,14 +109,14 @@ protected function buildDataDocument(JsonApiDocumentInterface $jsonApiDocument): $allHydratedItems = new Collection(); $allJsonApiItems = new Collection(); - if ($data->isCollection()) { + if ($data instanceof ResourceCollectionInterface) { $collection = $this->hydrator->hydrateCollection($jsonApiDocument->get('data')); $allHydratedItems = $allHydratedItems->concat($collection); $allJsonApiItems = $allJsonApiItems->concat($jsonApiDocument->get('data')->asArray()); $document = new CollectionDocument(); $document->setData($collection); - } elseif ($data->isItem()) { + } elseif ($data instanceof ResourceItemInterface) { $item = $this->hydrator->hydrateItem($jsonApiDocument->get('data')); $allHydratedItems->push($item); $allJsonApiItems->push($jsonApiDocument->get('data')); @@ -147,14 +148,13 @@ protected function buildDataDocument(JsonApiDocumentInterface $jsonApiDocument): * * @throws \DomainException * - * @return \Art4\JsonApiClient\Resource\ResourceInterface + * @return \Art4\JsonApiClient\ResourceItemInterface|\Art4\JsonApiClient\ResourceCollectionInterface */ - private function getJsonApiDocumentData(JsonApiDocumentInterface $document): JsonApiResourceInterface + private function getJsonApiDocumentData(Art4JsonApiDocumentInterface $document) { - /** @var \Art4\JsonApiClient\Resource\ResourceInterface $resource */ $resource = $document->get('data'); - if (!$resource instanceof JsonApiResourceInterface) { + if (!$resource instanceof ResourceItemInterface && !$resource instanceof ResourceCollectionInterface) { throw new \DomainException('Result is not a Json API Resource'); } @@ -164,9 +164,9 @@ private function getJsonApiDocumentData(JsonApiDocumentInterface $document): Jso /** * @param \Art4\JsonApiClient\DocumentInterface $document * - * @return \Art4\JsonApiClient\Resource\Collection|null + * @return \Art4\JsonApiClient\ResourceCollection|null */ - private function getJsonApiDocumentIncluded(JsonApiDocumentInterface $document) + private function getJsonApiDocumentIncluded(Art4JsonApiDocumentInterface $document) { if ($document->has('included')) { return $document->get('included'); @@ -180,7 +180,7 @@ private function getJsonApiDocumentIncluded(JsonApiDocumentInterface $document) * * @return array */ - private function parseLinks(JsonApiDocumentInterface $document): array + private function parseLinks(Art4JsonApiDocumentInterface $document): array { if (!$document->has('links')) { return []; @@ -194,7 +194,7 @@ private function parseLinks(JsonApiDocumentInterface $document): array * * @return \Swis\JsonApi\Client\Errors\ErrorCollection */ - private function parseErrors(JsonApiDocumentInterface $document): ErrorCollection + private function parseErrors(Art4JsonApiDocumentInterface $document): ErrorCollection { if (!$document->has('errors')) { return new ErrorCollection(); @@ -208,7 +208,7 @@ private function parseErrors(JsonApiDocumentInterface $document): ErrorCollectio * * @return array */ - private function parseMeta(JsonApiDocumentInterface $document): array + private function parseMeta(Art4JsonApiDocumentInterface $document): array { if (!$document->has('meta')) { return []; diff --git a/tests/JsonApi/HydratorTest.php b/tests/JsonApi/HydratorTest.php index 20f34ae..1a8f0a5 100644 --- a/tests/JsonApi/HydratorTest.php +++ b/tests/JsonApi/HydratorTest.php @@ -2,7 +2,7 @@ namespace Swis\JsonApi\Client\Tests\JsonApi; -use Art4\JsonApiClient\Resource\CollectionInterface; +use Art4\JsonApiClient\ResourceCollectionInterface as CollectionInterface; use Art4\JsonApiClient\Utils\Manager; use Swis\JsonApi\Client\Collection; use Swis\JsonApi\Client\Items\JenssegersItem; @@ -233,7 +233,7 @@ public function it_hydrates_relationships() } /** - * @return \PHPUnit_Framework_MockObject_MockObject|\Art4\JsonApiClient\Resource\CollectionInterface + * @return \PHPUnit_Framework_MockObject_MockObject|\Art4\JsonApiClient\ResourceCollectionInterface */ protected function getJsonApiItemCollectionMock() { From 45a317d9b2255366cc45dd37bec7567450c25bf3 Mon Sep 17 00:00:00 2001 From: bjorn Date: Wed, 25 Apr 2018 16:14:42 +0200 Subject: [PATCH 2/3] Fix autodiscovery --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d57d7b5..fbc46fc 100644 --- a/composer.json +++ b/composer.json @@ -55,7 +55,7 @@ "extra": { "laravel": { "providers": [ - "Swis\\JsonApi\\Client\\Providers" + "Swis\\JsonApi\\Client\\Providers\\ServiceProvider" ] } } From 64d31e7214cb55061a921b952b451438f2b9fd0c Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 26 Apr 2018 11:14:19 +0200 Subject: [PATCH 3/3] Stylefix Hydrator --- src/JsonApi/Hydrator.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/JsonApi/Hydrator.php b/src/JsonApi/Hydrator.php index a857397..54956bd 100644 --- a/src/JsonApi/Hydrator.php +++ b/src/JsonApi/Hydrator.php @@ -78,7 +78,7 @@ protected function getItemClass(JsonApItem $jsonApiItem): ItemInterface } /** - * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem + * @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem * @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item */ protected function hydrateAttributes(JsonApItem $jsonApiItem, ItemInterface $item) @@ -170,7 +170,7 @@ protected function accessorBelongsToItem(AccessInterface $accessor, ItemInterfac } /** - * @param \Swis\JsonApi\Client\Collection $included + * @param \Swis\JsonApi\Client\Collection $included * @param \Art4\JsonApiClient\ResourceIdentifierCollection $collection * * @return \Swis\JsonApi\Client\Collection @@ -185,7 +185,7 @@ function (ItemInterface $item) use ($collection) { } /** - * @param \Art4\JsonApiClient\ResourceIdentifier[] $relatedIdentifiers + * @param \Art4\JsonApiClient\ResourceIdentifier[] $relatedIdentifiers * @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item * * @return bool