public function testExtractTwiceGivenSameEntityShouldProcessExtractionOnceAndReturnSameData() { $entity = new TestAsset\Entity('foo', 'Foo Bar'); $entityHydratorManager = $this->getMockBuilder('ZF\\JsonLD\\EntityHydratorManager')->disableOriginalConstructor()->getMock(); $entityHydratorManager->expects($this->once())->method('getHydratorForEntity')->with($entity)->will($this->returnValue(null)); $extractor = new EntityExtractor($entityHydratorManager); $data1 = $extractor->extract($entity); $data2 = $extractor->extract($entity); $this->assertSame($data1, $data2); }
/** * Create a entity and/or collection based on a metadata map * * @param object $object * @param Metadata $metadata * @param bool $renderEmbeddedEntities * @return Entity|Collection * @throws Exception\RuntimeException */ public function createEntityFromMetadata($object, Metadata $metadata, $renderEmbeddedEntities = true) { if ($metadata->isCollection()) { return $this->createCollectionFromMetadata($object, $metadata); } $data = $this->entityExtractor->extract($object); $entityIdentifierName = $metadata->getEntityIdentifierName(); if ($entityIdentifierName && !isset($data[$entityIdentifierName])) { throw new Exception\RuntimeException(sprintf('Unable to determine entity identifier for object of type "%s"; no fields matching "%s"', get_class($object), $entityIdentifierName)); } $id = $entityIdentifierName ? $data[$entityIdentifierName] : null; if (!$renderEmbeddedEntities) { $object = []; } $jsonLDEntity = new Entity($object, $id); $properties = $jsonLDEntity->getProperties(); $this->marshalMetadataProperties($metadata, $properties); $forceFullUriID = $metadata->getForceFullUriID(); if ($forceFullUriID && !$properties->has('id')) { $property = $this->marshalPropertyFromMetadata($metadata, $object, $id, $metadata->getRouteIdentifierName()); $properties->add($property); } return $jsonLDEntity; }