Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -55,7 +55,7 @@
"extra": {
"laravel": {
"providers": [
"Swis\\JsonApi\\Client\\Providers"
"Swis\\JsonApi\\Client\\Providers\\ServiceProvider"
]
}
}
Expand Down
31 changes: 17 additions & 14 deletions src/JsonApi/Hydrator.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
*/
Expand All @@ -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
*/
Expand All @@ -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
*/
Expand All @@ -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)
Expand Down Expand Up @@ -106,19 +109,19 @@ 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) {
continue;
}

$item->setRelation($method, $includedItem);
} elseif ($data->isCollection()) {
} elseif ($data instanceof ResourceCollectionInterface || $data instanceof ResourceIdentifierCollectionInterface) {
$collection = $this->getIncludedItems($items, $data);

$item->setRelation($method, $collection);
Expand All @@ -129,7 +132,7 @@ function (JsonApItem $jsonApiItem) use ($items) {
}

/**
* @param \Art4\JsonApiClient\Resource\ItemInterface $jsonApiItem
* @param \Art4\JsonApiClient\ResourceItemInterface $jsonApiItem
*
* @return \Art4\JsonApiClient\Relationship[]
*/
Expand Down Expand Up @@ -167,8 +170,8 @@ protected function accessorBelongsToItem(AccessInterface $accessor, ItemInterfac
}

/**
* @param \Swis\JsonApi\Client\Collection $included
* @param \Art4\JsonApiClient\Resource\IdentifierCollection $collection
* @param \Swis\JsonApi\Client\Collection $included
* @param \Art4\JsonApiClient\ResourceIdentifierCollection $collection
*
* @return \Swis\JsonApi\Client\Collection
*/
Expand All @@ -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
Expand Down
32 changes: 16 additions & 16 deletions src/JsonApi/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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');
}

Expand All @@ -100,22 +101,22 @@ 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);

$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'));
Expand Down Expand Up @@ -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');
}

Expand All @@ -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');
Expand All @@ -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 [];
Expand All @@ -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();
Expand All @@ -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 [];
Expand Down
4 changes: 2 additions & 2 deletions tests/JsonApi/HydratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()
{
Expand Down