/**
* Convert resource object to array.
*
* @param ResourceObjectInterface $resource
* @param array $resourceLinks
* @param mixed $meta
* @param bool $isShowAttributes
*
* @return array
*/
private function convertResourceToArray(ResourceObjectInterface $resource, $resourceLinks, $meta, $isShowAttributes)
{
$representation = [Document::KEYWORD_TYPE => $resource->getType(), Document::KEYWORD_ID => $resource->getId()];
$attributes = $resource->getAttributes();
// "type" and "id" are reserved keywords and cannot be used as resource object attributes
$isOk = isset($attributes[Document::KEYWORD_TYPE]) === false;
$isOk ?: Exceptions::throwInvalidArgument('attributes', Document::KEYWORD_TYPE);
$isOk = isset($attributes[Document::KEYWORD_ID]) === false;
$isOk ?: Exceptions::throwInvalidArgument('attributes', Document::KEYWORD_ID);
if ($isShowAttributes === true && empty($attributes) === false) {
$representation[Document::KEYWORD_ATTRIBUTES] = $attributes;
}
// reserve placeholder for relationships, otherwise it would be added after
// links and meta which is not visually beautiful
$representation[Document::KEYWORD_RELATIONSHIPS] = null;
if (empty($resourceLinks) === false) {
foreach ($resourceLinks as $linkName => $link) {
/** @var LinkInterface $link */
$representation[Document::KEYWORD_LINKS][$linkName] = $this->getLinkRepresentation($this->document->getUrlPrefix(), $link);
}
}
if ($meta !== null) {
$representation[Document::KEYWORD_META] = $meta;
}
return $representation;
}