Skip to content

Commit

Permalink
Fix Relationship::toArray() when the data member is missing
Browse files Browse the repository at this point in the history
  • Loading branch information
kocsismate committed Nov 17, 2017
1 parent c53bf21 commit 7005686
Show file tree
Hide file tree
Showing 3 changed files with 245 additions and 24 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ REMOVED:

FIXED:

## 1.3.1 - unreleased

FIXED:

- [#8](https://github.com/woohoolabs/yang/pulls/8): Fix for unexpected behaviour when To-One relationship data is null

## 1.3.0 - 2017-10-17

CHANGED:
Expand Down
25 changes: 18 additions & 7 deletions src/JsonApi/Schema/Relationship.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,22 @@ public static function createFromArray(string $name, array $array, ResourceObjec
$meta = self::isArrayKey($array, "meta") ? $array["meta"] : [];
$links = Links::createFromArray(self::isArrayKey($array, "links") ? $array["links"] : []);

if (self::isArrayKey($array, "data") === false) {
$isToOneRelationship = array_key_exists("data", $array) && $array["data"] === null;
return self::createEmptyFromArray($name, $meta, $links, $resources, $isToOneRelationship);
// Data member is missing
if (array_key_exists("data", $array) === false) {
return self::createEmptyFromArray($name, $meta, $links, $resources, null);
}

// Relationship is empty To-One
if ($array["data"] === null) {
return self::createEmptyFromArray($name, $meta, $links, $resources, true);
}

// Relationship is To-One
if (self::isAssociativeArray($array["data"])) {
return self::createToOneFromArray($name, $meta, $links, $array["data"], $resources);
}

// Relationship is To-Many
return self::createToManyFromArray($name, $meta, $links, $array["data"], $resources);
}

Expand All @@ -57,7 +64,7 @@ private static function createEmptyFromArray(
array $meta,
Links $links,
ResourceObjects $resources,
$isToOneRelationship = null
$isToOneRelationship
): Relationship {
return new Relationship($name, $meta, $links, [], $resources, $isToOneRelationship);
}
Expand Down Expand Up @@ -141,10 +148,14 @@ public function toArray(): array
$result["links"] = $this->links->toArray();
}

if (empty($this->resourceMap) === false) {
$result["data"] = $this->isToOneRelationship ? reset($this->resourceMap) : $this->resourceMap;
} else {
if ($this->isToOneRelationship === null) {
return $result;
}

if (empty($this->resourceMap)) {
$result["data"] = $this->isToOneRelationship ? null : [];
} else {
$result["data"] = $this->isToOneRelationship ? reset($this->resourceMap) : $this->resourceMap;
}

return $result;
Expand Down
Loading

0 comments on commit 7005686

Please sign in to comment.