/** * @param object $object * @param Metadata $metadata * @return array */ public function toArray($object, Metadata $metadata) { $reflClass = new \ReflectionClass(get_class($object)); $data = array(); foreach ($reflClass->getProperties() as $property) { $mapping = $metadata->getPropertyMapping($property->getName()); if (null == $mapping) { continue; } $property->setAccessible(true); if ($mapping['type'] == DataTypes::COLLECTION || DataTypes::HASH == $mapping['type']) { foreach ((array) $property->getValue($object) as $key => $value) { $data[$mapping['name'] . ':' . $key] = $value; } } else { $data[$mapping['name']] = $this->reverseTransformValue($mapping['type'], $property->getValue($object)); } } return $data; }
public function testSetState() { $data = array('id' => 1, 'prefix' => 'some_', 'indexes' => array('index1', 'index2'), 'sortedIndexes' => array('sortedIndex1', 'sortedIndex2'), 'propertyMappings' => array(array('name' => 'property', 'type' => 'string'))); $metadata = Metadata::__set_state($data); assertInstanceOf('Tystr\\RedisOrm\\Metadata\\Metadata', $metadata); assertEquals($data['id'], $metadata->getId()); assertEquals($data['prefix'], $metadata->getPrefix()); assertEquals($data['indexes'], $metadata->getIndexes()); assertEquals($data['sortedIndexes'], $metadata->getSortedIndexes()); assertEquals($data['propertyMappings'], $metadata->getPropertyMappings()); }
/** * @param ReflectionClass $reflClass * @param Metadata $metadata * * @return string|int */ protected function getIdForClass($object, Metadata $metadata) { $getter = 'get' . ucfirst(strtolower($metadata->getId())); if (!method_exists($object, $getter)) { throw new \RuntimeException(sprintf('The class "%s" must have a "%s" method for accessing the property mapped as the id field (%s)', get_class($object), $getter, $metadata->getId())); } return $object->{$getter}(); }
/** * @param Metadata $metadata * @return array */ protected function validateMetadata(Metadata $metadata) { $errors = array(); if (null == $metadata->getId()) { $errors[] = 'Id cannot be null.'; } if (null == $metadata->getPrefix()) { $errors[] = 'Prefix cannot be null.'; } return $errors; }