protected function transformEmbedded(array $data) { $resource = new Resource(); isset($data['attributes'][self::LINK_KEY_HREF]) && $resource->setURI($data['attributes'][self::LINK_KEY_HREF]); isset($data['attributes'][self::LINK_KEY_TITLE]) && $resource->setTitle($data['attributes'][self::LINK_KEY_TITLE]); $embeddeds = []; $links = []; $data2 = []; foreach ($data['values'] as &$node) { if ($this->nodeIsResource($node)) { $embeddeds[$node['attributes']['rel']][] = $this->transformEmbedded($node); } elseif ($this->nodeIsLink($node)) { $links[$node['attributes']['rel']][] = $this->transformLink($node); } else { if (is_array($node['values'])) { $toSave = []; foreach ($node['values'] as &$value) { $toSave[$value['name']][] = $value['values']; } } else { $toSave = $node['values']; } $data2[$node['name']][] = $toSave; } } $resource->setData($data2); foreach ($links as $rel => $link) { $resource->setLinks($rel, $link); } foreach ($embeddeds as $rel => $embedded) { $resource->addResources($rel, $embedded); } return $resource; }
protected function createResource($uri = null) { $resource = new Resource(); if ($uri) { $resource->setURI($uri); } return $resource; }
protected function transformSelfLink(Resource $resource, array $data) { isset($data[self::LINK_KEY_HREF]) && $resource->setURI($data[self::LINK_KEY_HREF]); isset($data[self::LINK_KEY_TITLE]) && $resource->setTitle($data[self::LINK_KEY_TITLE]); }
public function testExpandLinkedResourcesTreeThreeLevelLinked() { $linkedLevel1Resource = new Resource($this->repository); $linkedLevel1Resource->setURI('foo'); $linkedLevel2Resource = new Resource($this->repository); $linkedLevel2Resource->setURI('foo'); $linkedLevel2Resource->linkResource('bar', $linkedLevel1Resource); $linkedPhpHalResource = new Resource($this->repository); $linkedPhpHalResource->setURI('foo'); $linkedPhpHalResource->linkResource('qux', $linkedLevel2Resource); $this->resource->linkResource('foo', $linkedPhpHalResource); $this->assertCount(0, $linkedLevel2Resource->getAllResources()); $this->resource->expandLinkedResourcesTree(['foo', 'qux', 'bar']); $this->assertSame($linkedLevel1Resource, $linkedLevel2Resource->getResources('bar')); }