/** * 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; }
/** * Returns class definition as a string * * @return string */ public function asString() { $display = function ($lines, $length, $loop = 0) use(&$display) { $output = ''; foreach ($lines as $line) { $line = is_a($line, 'Deflection\\Element\\AbstractElement') ? $line->getElement() : $line; if (is_array($line)) { $output .= $display($line, $length, $loop + 1); } else { $size = mb_strlen($line) + $length * $loop; $output .= str_pad($line, $size, ' ', STR_PAD_LEFT) . "\n"; } } return $output; }; return !$this->class ?: "<?php\n" . $display($this->class->getElement(), $this->tab); }
/** * 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; }