Exemple #1
0
 /**
  * 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;
 }
Exemple #2
0
 /**
  * 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);
 }
Exemple #3
0
 /**
  * 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;
 }