Example #1
0
 /**
  * Create array from object
  *
  * @param object $object
  *
  * @return mixed[]
  */
 private function setArray($object) : array
 {
     $data = [];
     $configurationObject = $this->configuration->getConfigurationObjectForClass(new ClassName(get_class($object)));
     $identifier = $configurationObject->getIdentifier();
     if ($identifier !== '') {
         $data[$this->configuration->getIdentifierAttribute()] = $identifier;
     }
     foreach ($configurationObject->getAttributes() as $attribute) {
         $type = $configurationObject->getTypeForAttribute($attribute);
         $data = $this->processSerializeForType($type, $object, $data, $attribute);
     }
     return $data;
 }
Example #2
0
 /**
  * @param Type\Collection\IdentifiedObject $objectType
  * @param object $object
  * @param array $values
  *
  * @return Deserialize
  */
 private function processDeserializeTypeCollectionIdentifiedObject(Type\Collection\IdentifiedObject $objectType, $object, array $values) : self
 {
     $identifierAttribute = $this->configuration->getIdentifierAttribute();
     $objects = [];
     foreach ($values as $key => $objectFromValue) {
         if (isset($objectFromValue[$identifierAttribute]) === false) {
             continue;
         }
         $configurationObject = $this->configuration->getConfigurationObjectForIdentifier($objectFromValue[$identifierAttribute]);
         if ($configurationObject instanceof Blackhole) {
             continue;
         }
         $objects[$key] = $this->setObjectForClass($configurationObject->getClassName(), $objectFromValue);
     }
     $object->{$objectType->setter()}($objects);
     return $this;
 }
Example #3
0
 public function testDeserializeForIdentifiedObjectShouldThrowExceptionWhenJsonDontHaveIdentifier()
 {
     $configuration = new Configuration();
     $configuration->identifierAttribute('type');
     $configurationObject = new Configuration\Object(new ClassName(City::class));
     $configurationObject->attributeUseMethod('name', 'setName', 'getName')->registerToConfigurationWithIdentifier($configuration, 'city');
     $this->given($this->newTestedInstance($configuration))->exception(function () {
         $this->testedInstance->deserialize('{"name": "Palaiseau"}');
     })->isInstanceOf(MissingIdentifierAttribute::class);
 }
Example #4
0
 public function testSerializeWithTypeCollectionIdentifiedObject()
 {
     $cityPalaiseau = new City();
     $cityPalaiseau->setName('Palaiseau');
     $cityParis = new City();
     $cityParis->setName('Paris');
     $country = new Country();
     $country->setName('France');
     $country->citiesAre([$cityPalaiseau, $cityParis]);
     $configuration = new Configuration();
     $configuration->identifierAttribute('type');
     $configurationObject = new Configuration\Object(new ClassName(Country::class));
     $configurationObject->attributeUseMethod('name', 'setName', 'getName')->attributeUseCollectionIdentifiedObject('cities', 'citiesAre', 'getCities')->registerToConfigurationWithIdentifier($configuration, 'country');
     $configurationObject = new Configuration\Object(new ClassName(City::class));
     $configurationObject->attributeUseMethod('name', 'setName', 'getName')->registerToConfigurationWithIdentifier($configuration, 'city');
     $this->given($this->newTestedInstance($configuration))->string($this->testedInstance->serialize($country))->isIdenticalTo('{"type":"country","name":"France","cities":[{"type":"city","name":"Palaiseau"},{"type":"city","name":"Paris"}]}');
 }
Example #5
0
 /**
  * @param Configuration $configuration
  * @param string $identifier
  *
  * @return ObjectInterface
  */
 public function registerToConfigurationWithIdentifier(Configuration $configuration, string $identifier) : ObjectInterface
 {
     $this->identifier($identifier);
     $configuration->addConfigurationObjectWithIdentifier($this->className, $this, $identifier);
     return $this;
 }