/** * Transform an array to a class element object * * @param array $definition Class definitoion * * @return Deflection\Element\Classes */ public function arrayToClassElement($definition) { $class = new Classes(); if (isset($definition['docblock'])) { $docblock = $this->arrayToDocblockElement($definition['docblock']); $class->setDocbloc($docblock); } if (isset($definition['namespace'])) { $class->setNamespace($definition['namespace']); } if (isset($definition['name'])) { $class->setName($definition['name']); } if (isset($definition['extends'])) { $class->setExtends($definition['extends']); } if (isset($definition['implements'])) { foreach ($definition['implements'] as $interface) { $class->addImplements($interface); } } if (isset($definition['uses'])) { foreach ($definition['uses'] as $alias => $use) { $alias = is_string($alias) ? $alias : null; $class->addUse($use, $alias); } } if (isset($definition['functions'])) { foreach ($definition['functions'] as $definition) { $function = $this->arrayToFunctionElement($definition); $class->addFunction($function); } } return $class; }
/** * Add getter and setter for each param * * @param Deflection\Element\Classes $class Current class * @param array $definition Param definition * * @return \Raoul\Generator */ protected function addMethodsFromDefinition(Classes $class, $definition) { if (!isset($definition['all'])) { return $this; } foreach ($definition['all'] as $name => $infos) { foreach (array('get', 'set') as $type) { $method = $type . ucfirst($name); $description = ucfirst($type) . ' ' . $name; $docblock = new Docblock(); $function = new Functions(); $function->setDocblock($docblock); $function->isPublic(true); $function->setName($method); if ($type == 'set') { $method = $infos['collection'] === true ? 'add' . ucfirst($name) : $method; $description = $infos['collection'] === true ? 'Add element on ' . $name . ' collection' : $description; $docblock->setDescription($description); $docblock->addParam('return', '\\' . $class->getNamespace() . '\\' . $class->getName()); $docblock->addVar('value', $this->getType($infos['type'], $class->getNamespace()), $name); $function->addParam('value' . ($infos['nullable'] === true ? ' = null' : ''), $this->getArgType($infos['type'], $class->getNamespace())); $function->setContent(array('$this->' . $name . ($infos['collection'] === true ? '[]' : '') . ' = $value;', 'return $this;')); } else { $docblock->setDescription($description); $docblock->addParam('return', $this->getType($infos['type'], $class->getNamespace())); $function->setContent(array('return $this->' . $name . ';')); } $class->addFunction($function); } } return $this; }