/**
  * @return void
  */
 private function refreshUsersAttributes()
 {
     $expectedAttributes = [self::ATTRIBUTE_NAME, self::ATTRIBUTE_AGE];
     $actualAttributes = $this->getAttributesNames($this->client->getUsersAttributes());
     foreach ($actualAttributes as $attribute) {
         if (!in_array($attribute, $expectedAttributes)) {
             $this->client->deleteUsersAttribute($attribute);
         }
     }
     if (!in_array(self::ATTRIBUTE_NAME, $actualAttributes)) {
         $this->client->addUsersAttribute(self::ATTRIBUTE_NAME, DataType::TEXT, 'en', MetaType::TITLE);
     }
     if (!in_array(self::ATTRIBUTE_AGE, $actualAttributes)) {
         $this->client->addUsersAttribute(self::ATTRIBUTE_AGE, DataType::INTEGER);
     }
 }
 /**
  * set all attributes in recommender by manifest file
  *
  * TODO: do not set existing attributes
  * TODO: set metatypes
  *
  */
 public function setAttributes(DataApi\Client $client)
 {
     if (!is_null($this->manifest)) {
         $usersAttributes = $client->getUsersAttributes();
         $usersAttributesNames = array_map(function ($attr) {
             return $attr['name'];
         }, $usersAttributes['attributes']);
         foreach ($this->manifest->getColumns() as $attribute) {
             $pk = $this->manifest->getPrimaryKey()[0];
             if ($attribute != $pk && !in_array($attribute, $usersAttributesNames)) {
                 $client->addUsersAttribute($attribute, DataApi\DataType::TEXT);
             }
         }
     }
     return $this;
 }