/** * Export an object recursivly, using associated metadata * * @param ClassMetadata $metadata * @param stdClass $object * @return array object */ public function exportObject(ClassMetadata $metadata, $object) { $fields = $metadata->getFields(); $properties = array(); foreach ($fields as $property => $field) { $key = $field->getIndexName(); $getter = 'get' . self::camelize($property); $value = $object->$getter(); if ($value && 'date' === $field->getType()) { $value = $value->format($field->getFormat()); } $properties[$key] = $value; } foreach ($metadata->getEmbeds() as $property => $embed) { $getter = 'get' . self::camelize($property); $value = $object->$getter(); if (false === empty($value)) { $properties[$property] = $this->exportObject($metadata->getEmbeddedMetadata($property), $value); } } return $properties; }
/** * @test * @cover ClassMetadata::getFieldMetadata */ public function testGetFieldMetadata() { $meta = new ClassMetadata('foo'); $field = $this->getMockBuilder('Ariadne\Mapping\Element\Field')->disableOriginalConstructor()->disableOriginalClone()->getMock(); $meta->addField('foo', $field); $this->assertEquals($field, $meta->getFieldMetadata('foo'), 'getFieldMetadata returns the proper element'); }
/** * Transforms given objects into a bulk delete operation * * @param ClassMetadata $metadata * @param array $objects * @return array bulk commands */ public function createBulk(ClassMetadata $metadata, array $objects) { $index = $metadata->getIndex(); $idGetter = 'get' . self::camelize($index->getIdProperty()); $map = array(); foreach ($objects as $object) { $map[] = array('delete' => array('_index' => $index->getName(), '_type' => $metadata->getClassName(), '_id' => $object->$idGetter())); } return $map; }
/** * Transform the raw http response into a Generic Result object * * @param Response $response * @param ClassMetadata $metadata * @return Result */ public function mapResult(Response $response, ClassMetadata $metadata) { $className = $metadata->getClassName(); $result = new Result(); $foreign = json_decode($response->getBody()); $result->setTotal($foreign->hits->total); foreach ($foreign->hits->hits as $foreignHit) { $hit = new Hit(); $hit->setScore($foreignHit->_score); $hit->setDocument($foreignHit->_source); $result->getHits()->add($hit); } return $result; }
/** * Extract and map properties for the metadata * * @param ClassMetadata $metadata */ protected function exportProperties(ClassMetadata $metadata) { $map = array(); foreach ($metadata->getFields() as $name => $field) { $ref = new \ReflectionObject($field); $class = $ref->getShortName(); $method = sprintf('exportField%s', $class); $map[$name] = $this->$method($field); } foreach ($metadata->getEmbeds() as $name => $embed) { $embedMetadata = $metadata->getEmbeddedMetadata($name); $map[$name]['type'] = 'object'; $map[$name]['properties'] = $this->exportProperties($embedMetadata); } return $map; }
/** * {@inheritDoc} */ public function loadClassMetadata(ClassMetadata $metadata) { $reflClass = $metadata->getReflectionClass(); $className = $reflClass->getName(); $loaded = false; foreach ($this->reader->getClassAnnotations($reflClass) as $index) { if ($index instanceof Index) { $metadata->setIndex($index); } $loaded = true; } foreach ($reflClass->getProperties() as $property) { if ($property->getDeclaringClass()->getName() == $className) { foreach ($this->reader->getPropertyAnnotations($property) as $type) { if ($type instanceof Field) { $violations = $this->validator->validate($type); if ($violations->count()) { throw new \InvalidArgumentException($violations); } $metadata->addField($property->getName(), $type); } if ($type instanceof Facet) { $metadata->addFacet($property->getName(), $type); } if ($type instanceof Embed) { $metadata->addEmbed($property->getName(), $type); } $loaded = true; } } } return $loaded; }
/** * Export an object recursivly, using associated metadata * * @param ClassMetadata $metadata * @param stdClass $object * @return array object */ protected function exportObject(ClassMetadata $metadata, $object) { $document = new Document(); $idGetter = 'get' . self::camelize($metadata->getIndex()->getIdProperty()); $document->addField(Field::unIndexed('_id', $object->$idGetter())); foreach ($metadata->getFields() as $property => $field) { $getter = 'get' . self::camelize($property); $value = $object->$getter(); if ($value && 'date' === $field->getType()) { $value = $value->format($field->getFormat()); } $type = $field->getType(); $encoding = mb_detect_encoding($value); $isStored = $field->getStore() === 'yes'; $isIndexed = $field->getIndex() != "no"; $isTokenized = $field->getIndex() == "analyzed"; $field = new Field($field->getIndexName(), $value, $encoding, $isStored, $isIndexed, $isTokenized); $document->addField($field); $doc[$property] = $value; } $document->addField(Field::unIndexed('_doc', json_encode($doc))); return $document; }
/** * Transforms given objects into a bulk add operation directive * * @param ClassMetadata $metadata * @param array $objects * @param array bulk commands */ public function run(ClassMetadata $metadata) { $indexName = $metadata->getIndex()->getName(); return $this->adapter->getClient()->dropIndex($indexName); }
/** * Transforms given objects into a bulk add operation directive * * @param ClassMetadata $metadata * @param array $objects * @param array bulk commands */ public function run(ClassMetadata $metadata) { $index = $metadata->getIndex()->getName(); @unlink("/tmp/index_$index"); }
/** * Transforms given objects into a bulk add operation directive * * @param ClassMetadata $metadata * @param array $objects * @param array bulk commands */ public function run(ClassMetadata $metadata) { $index = $metadata->getIndex()->getName(); Lucene::create("/tmp/index_$index"); }
/** * Transform the raw http response into a Generic Result object * * @param Response $response * @param ClassMetadata $metadata * @return Result */ public function mapResult(array $foreignResult, ClassMetadata $metadata, $query) { $className = $metadata->getClassName(); $result = new Result(); $result->setTotal(count($foreignResult)); $foreignResult = array_slice($foreignResult, $query->getOffset(), $query->getLimit()); foreach ($foreignResult as $foreignHit) { $hit = new Hit(); $hit->setScore($foreignHit->score); $hit->setDocument(json_decode($foreignHit->_doc)); $result->getHits()->add($hit); } return $result; }