generate() публичный Метод

public generate ( )
 /**
  * @param $version
  * @param $api
  *
  * @return string
  */
 private function generateFileContent($version, $api)
 {
     $docBlock = new DocBlockGenerator('SellerCenter SDK Version Class', 'This file is auto generated, please do not edit it manually!!!');
     $properties = [new PropertyGenerator('VERSION_NUMBER', $version, PropertyGenerator::FLAG_CONSTANT), new PropertyGenerator('API', $api, PropertyGenerator::FLAG_CONSTANT)];
     $class = new ClassGenerator('Version', 'SellerCenter\\SDK', null, null, [], $properties, [], $docBlock);
     return $class->generate();
 }
Пример #2
0
 public function getClass()
 {
     $classGenerator = new ClassGenerator($this->collection, $this->namespace);
     $classGenerator->addUse('ArangoOdm\\Document', 'ArangoDoc');
     $classGenerator->setExtendedClass('ArangoDoc');
     $classGenerator->addMethods($this->getMethods());
     return '<?php' . "\n\n" . $classGenerator->generate();
 }
Пример #3
0
 private function generateAutoLoaderClass()
 {
     $class = new ClassGenerator();
     $class->setName('AutoLoader');
     $class->setFinal(true);
     $class->setExtendedClass('BaseAutoLoader');
     $class->addProperties([$this->generatePSR4MapProp(), $this->generatePSR0MapProp(), $this->generateClassMapProp(), $this->generateFileIncludesProp(), $this->generateProxiesMapProp()]);
     return $class->generate();
 }
Пример #4
0
 public function generate()
 {
     $gen = new ClassGenerator($this->name);
     $fnGetter = $this->fnGetter;
     foreach ($this->options["properties"] as $prop => $type) {
         $c = ucfirst($prop);
         $gen->addProperty($prop, null, PropertyGenerator::FLAG_PRIVATE);
         $gen->addMethod("get" . $c, [], MethodGenerator::FLAG_PUBLIC, $fnGetter($prop, $type), "???");
     }
     return $gen->generate();
 }
 /**
  * Write generated code to disk and return the class code
  *
  * {@inheritDoc}
  */
 public function generate(ClassGenerator $classGenerator)
 {
     $className = trim($classGenerator->getNamespaceName(), '\\') . '\\' . trim($classGenerator->getName(), '\\');
     $generatedCode = $classGenerator->generate();
     $fileName = $this->fileLocator->getProxyFileName($className);
     $tmpFileName = $fileName . '.' . uniqid('', true);
     // renaming files is necessary to avoid race conditions when the same file is written multiple times
     // in a short time period
     file_put_contents($tmpFileName, "<?php\n\n" . $generatedCode);
     rename($tmpFileName, $fileName);
     return $generatedCode;
 }
 /**
  * Write generated code to disk and return the class code
  *
  * {@inheritDoc}
  */
 public function generate(ClassGenerator $classGenerator)
 {
     $className = trim($classGenerator->getNamespaceName(), '\\') . '\\' . trim($classGenerator->getName(), '\\');
     $generatedCode = $classGenerator->generate();
     $fileName = $this->fileLocator->getProxyFileName($className);
     set_error_handler($this->emptyErrorHandler);
     try {
         $this->writeFile("<?php\n\n" . $generatedCode, $fileName);
     } catch (FileNotWritableException $fileNotWritable) {
         restore_error_handler();
         throw $fileNotWritable;
     }
     restore_error_handler();
     return $generatedCode;
 }
 /**
  * Evaluates the generated code before returning it
  *
  * {@inheritDoc}
  */
 public function generate(ClassGenerator $classGenerator)
 {
     $code = $classGenerator->generate();
     if (!$this->canEval) {
         // @codeCoverageIgnoreStart
         $fileName = sys_get_temp_dir() . '/EvaluatingGeneratorStrategy.php.tmp.' . uniqid('', true);
         file_put_contents($fileName, "<?php\n" . $code);
         require $fileName;
         unlink($fileName);
         return $code;
         // @codeCoverageIgnoreEnd
     }
     eval($code);
     return $code;
 }
Пример #8
0
 /**
  * @param ClassGenerator $classGenerator
  * @return string
  * @throws FileNotWritableException
  */
 public function generate(ClassGenerator $classGenerator)
 {
     $className = trim($classGenerator->getNamespaceName(), '\\') . '\\' . trim($classGenerator->getName(), '\\');
     $generatedCode = $classGenerator->generate();
     $fileName = $this->file->getProxyFileName($className);
     set_error_handler(function () {
     });
     try {
         $this->write("<?php\n\n" . $generatedCode, $fileName);
     } catch (FileNotWritableException $exception) {
         throw $exception;
     } finally {
         restore_error_handler();
     }
     return $fileName;
 }
 /**
  * Dynamically scope an audit class
  */
 public function loadClass($auditClassName, $type)
 {
     $foundClassName = false;
     foreach ($this->getAuditEntities() as $className => $classOptions) {
         if ($this->getAuditObjectManager()->getRepository('ZF\\Doctrine\\Audit\\Entity\\AuditEntity')->generateClassName($className) == $auditClassName) {
             $foundClassName = true;
             break;
         }
     }
     if (!$foundClassName) {
         return false;
     }
     // Get fields from target entity
     $metadataFactory = $this->getObjectManager()->getMetadataFactory();
     $auditedClassMetadata = $metadataFactory->getMetadataFor($className);
     $fields = $auditedClassMetadata->getFieldNames();
     $identifiers = $auditedClassMetadata->getFieldNames();
     $auditClass = new ClassGenerator();
     $auditClass->setNamespaceName("ZF\\Doctrine\\Audit\\RevisionEntity");
     $auditClass->setName(str_replace('\\', '_', $className));
     $auditClass->setExtendedClass('AbstractAudit');
     // Add revision reference getter and setter
     $auditClass->addProperty('revisionEntity', null, PropertyGenerator::FLAG_PROTECTED);
     $auditClass->addMethod('getRevisionEntity', array(), MethodGenerator::FLAG_PUBLIC, " return \$this->revisionEntity;");
     $auditClass->addMethod('setRevisionEntity', array('value'), MethodGenerator::FLAG_PUBLIC, " \$this->revisionEntity = \$value;\n\nreturn \$this;\n            ");
     // Generate audit entity
     foreach ($fields as $field) {
         $auditClass->addProperty($field, null, PropertyGenerator::FLAG_PROTECTED);
     }
     foreach ($auditedClassMetadata->getAssociationNames() as $associationName) {
         $auditClass->addProperty($associationName, null, PropertyGenerator::FLAG_PROTECTED);
         $fields[] = $associationName;
     }
     $auditClass->addMethod('getAssociationMappings', array(), MethodGenerator::FLAG_PUBLIC, "return unserialize('" . serialize($auditedClassMetadata->getAssociationMappings()) . "');");
     // Add exchange array method
     $setters = array();
     foreach ($fields as $fieldName) {
         $setters[] = '$this->' . $fieldName . ' = (isset($data["' . $fieldName . '"])) ? $data["' . $fieldName . '"]: null;';
         $arrayCopy[] = "    \"{$fieldName}\"" . ' => $this->' . $fieldName;
     }
     $auditClass->addMethod('getArrayCopy', array(), MethodGenerator::FLAG_PUBLIC, "return array(\n" . implode(",\n", $arrayCopy) . "\n);");
     $auditClass->addMethod('exchangeArray', array('data'), MethodGenerator::FLAG_PUBLIC, implode("\n", $setters));
     // Add function to return the entity class this entity audits
     $auditClass->addMethod('getAuditedEntityClass', array(), MethodGenerator::FLAG_PUBLIC, " return '" . addslashes($className) . "';");
     eval($auditClass->generate());
     return true;
 }
Пример #10
0
 /**
  * Generates a dynamic class implementing specified interfaces (and ServiceAwareInterface).
  * @return string class name
  */
 public function build()
 {
     $generator = new ClassGenerator(uniqid('Proxy_'), 'SoPhp\\Rpc\\Proxy');
     $generator->setImplementedInterfaces($this->getImplements());
     $generator->setExtendedClass('\\SoPhp\\Rpc\\Proxy\\ProxyAbstract');
     $source = $generator->generate();
     $className = $generator->getNamespaceName() . '\\' . $generator->getName();
     try {
         eval($source);
     } catch (\Exception $e) {
         throw new BuildFailed("Could not evaluate source code for proxy. " . $source, 0, $e);
     }
     if (!class_exists($className, false)) {
         throw new BuildFailed("Proxy class `{$className}` does not exist");
     }
     return $className;
 }
    /**
     * @group ZF2-151
     */
    public function testAddUses()
    {
        $classGenerator = new ClassGenerator();
        $classGenerator->setName('My\Class');
        $classGenerator->addUse('My\First\Use\Class');
        $classGenerator->addUse('My\Second\Use\Class', 'MyAlias');
        $generated = $classGenerator->generate();

        $this->assertContains('use My\First\Use\Class;', $generated);
        $this->assertContains('use My\Second\Use\Class as MyAlias;', $generated);
    }
Пример #12
0
 /**
  * @group namespace
  */
 public function testPassingANamespacedClassnameShouldGenerateAClassnameWithoutItsNamespace()
 {
     $classGeneratorClass = new ClassGenerator();
     $classGeneratorClass->setName('My\Namespaced\FunClass');
     $received = $classGeneratorClass->generate();
     $this->assertContains('class FunClass', $received, $received);
 }
 /**
  * Dynamically scope an audit class
  *
  * @param  string $className
  * @return false|string
  */
 public function loadClass($className, $type)
 {
     $moduleOptions = \ZF\Doctrine\Audit\Module::getModuleOptions();
     if (!$moduleOptions) {
         return;
     }
     $entityManager = $moduleOptions->getEntityManager();
     $auditClass = new ClassGenerator();
     //  Build a discovered many to many join class
     $joinClasses = $moduleOptions->getJoinClasses();
     if (in_array($className, array_keys($joinClasses))) {
         $auditClass->setNamespaceName("ZF\\Doctrine\\Audit\\Entity");
         $auditClass->setName($className);
         $auditClass->setExtendedClass('AbstractAudit');
         $auditClass->addProperty('id', null, PropertyGenerator::FLAG_PROTECTED);
         $auditClass->addProperty('targetRevisionEntity', null, PropertyGenerator::FLAG_PROTECTED);
         $auditClass->addProperty('sourceRevisionEntity', null, PropertyGenerator::FLAG_PROTECTED);
         $auditClass->addMethod('getTargetRevisionEntity', array(), MethodGenerator::FLAG_PUBLIC, 'return $this->targetRevisionEntity;');
         $auditClass->addMethod('getSourceRevisionEntity', array(), MethodGenerator::FLAG_PUBLIC, 'return $this->sourceRevisionEntity;');
         $auditClass->addMethod('getId', array(), MethodGenerator::FLAG_PUBLIC, 'return $this->id;');
         $auditClass->addMethod('setTargetRevisionEntity', array(ParameterGenerator::fromArray(array('name' => 'value', 'type' => '\\ZF\\Doctrine\\Audit\\Entity\\RevisionEntity'))), MethodGenerator::FLAG_PUBLIC, '$this->targetRevisionEntity = $value;' . "\n" . 'return $this;');
         $auditClass->addMethod('setSourceRevisionEntity', array(ParameterGenerator::fromArray(array('name' => 'value', 'type' => '\\ZF\\Doctrine\\Audit\\Entity\\RevisionEntity'))), MethodGenerator::FLAG_PUBLIC, '$this->sourceRevisionEntity = $value;' . "\n" . 'return $this;');
         #            print_r($auditClass->generate());
         #            die();
         eval($auditClass->generate());
         return;
     }
     // Add revision reference getter and setter
     $auditClass->addProperty($moduleOptions->getRevisionEntityFieldName(), null, PropertyGenerator::FLAG_PROTECTED);
     $auditClass->addMethod('get' . $moduleOptions->getRevisionEntityFieldName(), array(), MethodGenerator::FLAG_PUBLIC, " return \$this->" . $moduleOptions->getRevisionEntityFieldName() . ";");
     $auditClass->addMethod('set' . $moduleOptions->getRevisionEntityFieldName(), array('value'), MethodGenerator::FLAG_PUBLIC, " \$this->" . $moduleOptions->getRevisionEntityFieldName() . " = \$value;\nreturn \$this;\r\n            ");
     // Verify this autoloader is used for target class
     #FIXME:  why is this sent work outside the set namespace?
     foreach ($moduleOptions->getAuditedClassNames() as $targetClass => $targetClassOptions) {
         $auditClassName = 'ZF\\Doctrine\\Audit\\Entity\\' . str_replace('\\', '_', $targetClass);
         if ($auditClassName == $className) {
             $currentClass = $targetClass;
         }
         $autoloadClasses[] = $auditClassName;
     }
     if (!in_array($className, $autoloadClasses)) {
         return;
     }
     // Get fields from target entity
     $metadataFactory = $entityManager->getMetadataFactory();
     $auditedClassMetadata = $metadataFactory->getMetadataFor($currentClass);
     $fields = $auditedClassMetadata->getFieldNames();
     $identifiers = $auditedClassMetadata->getFieldNames();
     $service = \ZF\Doctrine\Audit\Module::getModuleOptions()->getAuditService();
     // Generate audit entity
     foreach ($fields as $field) {
         $auditClass->addProperty($field, null, PropertyGenerator::FLAG_PROTECTED);
     }
     foreach ($auditedClassMetadata->getAssociationNames() as $associationName) {
         $auditClass->addProperty($associationName, null, PropertyGenerator::FLAG_PROTECTED);
         $fields[] = $associationName;
     }
     $auditClass->addMethod('getAssociationMappings', array(), MethodGenerator::FLAG_PUBLIC, "return unserialize('" . serialize($auditedClassMetadata->getAssociationMappings()) . "');");
     // Add exchange array method
     $setters = array();
     foreach ($fields as $fieldName) {
         $setters[] = '$this->' . $fieldName . ' = (isset($data["' . $fieldName . '"])) ? $data["' . $fieldName . '"]: null;';
         $arrayCopy[] = "    \"{$fieldName}\"" . ' => $this->' . $fieldName;
     }
     $auditClass->addMethod('getArrayCopy', array(), MethodGenerator::FLAG_PUBLIC, "return array(\n" . implode(",\n", $arrayCopy) . "\n);");
     $auditClass->addMethod('exchangeArray', array('data'), MethodGenerator::FLAG_PUBLIC, implode("\n", $setters));
     // Add function to return the entity class this entity audits
     $auditClass->addMethod('getAuditedEntityClass', array(), MethodGenerator::FLAG_PUBLIC, " return '" . addslashes($currentClass) . "';");
     $auditClass->setNamespaceName("ZF\\Doctrine\\Audit\\Entity");
     $auditClass->setName(str_replace('\\', '_', $currentClass));
     $auditClass->setExtendedClass('AbstractAudit');
     #    $auditedClassMetadata = $metadataFactory->getMetadataFor($currentClass);
     $auditedClassMetadata = $metadataFactory->getMetadataFor($currentClass);
     foreach ($auditedClassMetadata->getAssociationMappings() as $mapping) {
         if (isset($mapping['joinTable']['name'])) {
             $auditJoinTableClassName = "ZF\\Doctrine\\Audit\\Entity\\" . str_replace('\\', '_', $mapping['joinTable']['name']);
             $auditEntities[] = $auditJoinTableClassName;
             $moduleOptions->addJoinClass($auditJoinTableClassName, $mapping);
         }
     }
     #        if ($auditClass->getName() == 'AppleConnect_Entity_UserAuthenticationLog') {
     #            echo '<pre>';
     #            echo($auditClass->generate());
     #            die();
     #        }
     eval($auditClass->generate());
     #            die();
     return true;
 }
Пример #14
0
    public function testGenerateClassAndAddMethod()
    {
        $classGenerator = new ClassGenerator();
        $classGenerator->setName('MyClass');
        $classGenerator->addMethod('methodOne');
        $expected = <<<CODE
class MyClass
{

    public function methodOne()
    {
    }


}

CODE;
        $output = $classGenerator->generate();
        $this->assertEquals($expected, $output);
    }
Пример #15
0
 /**
  * Função geradora das entidades dos schemas e tabelas do banco de dados
  * 
  * @return \Cityware\Generator\Adapter\ModelAdapter
  */
 private function generatorClassEntity()
 {
     /* Lista os schemas do banco de dados */
     foreach ($this->oMetadata->getSchemas() as $valueSchema) {
         $tableNames = $this->oMetadata->getTableNames($valueSchema);
         $namespaceSchema = 'Orm\\' . $this->toCamelCase($valueSchema) . '\\Entities';
         /* Lista as tabelas do banco de dados */
         foreach ($tableNames as $tableName) {
             $multiPk = $primaryKey = $bodyExchangeArray = null;
             $class = new ClassGenerator();
             $class->setNamespaceName($namespaceSchema);
             $docBlockClass = DocBlockGenerator::fromArray(array('shortDescription' => 'Classe tipo model da tabela ' . $tableName . ' dentro do schema ' . $valueSchema, 'longDescription' => null));
             $class->setDocBlock($docBlockClass);
             $class->setName($this->toCamelCase($tableName));
             $class->addProperty('DBSCHEMA', $valueSchema, PropertyGenerator::FLAG_STATIC);
             $class->addProperty('DBTABLE', $tableName, PropertyGenerator::FLAG_STATIC);
             foreach ($this->oMetadata->getConstraints($tableName, $valueSchema) as $constraint) {
                 if (!$constraint->hasColumns()) {
                     continue;
                 }
                 if ($constraint->isPrimaryKey()) {
                     $columns = $constraint->getColumns();
                     if (count($columns) > 1) {
                         $multiPk = true;
                         $primaryKey = implode(', ', $columns);
                     } else {
                         $multiPk = false;
                         $primaryKey = $columns[0];
                     }
                     $class->addProperty('MULTIPK', $multiPk, PropertyGenerator::FLAG_STATIC);
                     $class->addProperty('PKCOLUMN', $primaryKey, PropertyGenerator::FLAG_STATIC);
                 }
             }
             /* Cria os metodos setter/getter e as variáveis das colunas da tabela */
             $table = $this->oMetadata->getTable($tableName, $valueSchema);
             /* Lista as colunas da tabela do banco de dados */
             foreach ($table->getColumns() as $column) {
                 $varName = $this->camelCase($column->getName());
                 $class->addProperty($varName, null, PropertyGenerator::FLAG_PRIVATE);
                 $methodGet = 'get' . $this->toCamelCase($column->getName());
                 $methodSet = 'set' . $this->toCamelCase($column->getName());
                 $docBlockSet = DocBlockGenerator::fromArray(array('shortDescription' => 'Setter da coluna ' . $column->getName(), 'longDescription' => null, 'tags' => array(new Tag\ParamTag($varName, $this->prepareSqlTypeDocBlock($column->getDataType())))));
                 $docBlockGet = DocBlockGenerator::fromArray(array('shortDescription' => 'Getter da coluna ' . $column->getName(), 'longDescription' => null, 'tags' => array(new Tag\ReturnTag(array('datatype' => $this->prepareSqlTypeDocBlock($column->getDataType()))))));
                 $bodyGet = 'return $this->' . $varName . ';';
                 $bodySet = '$this->' . $varName . ' = $' . $this->camelCase($column->getName()) . ';';
                 $class->addMethod($methodSet, array($this->camelCase($column->getName())), MethodGenerator::FLAG_PUBLIC, $bodySet, $docBlockSet);
                 $class->addMethod($methodGet, array(), MethodGenerator::FLAG_PUBLIC, $bodyGet, $docBlockGet);
                 $bodyExchangeArray .= '$this->' . $varName . ' = (isset($data["' . $column->getName() . '"])) ? $data["' . $column->getName() . '"] : null;' . "\n\n";
             }
             $docBlockExchangeArray = DocBlockGenerator::fromArray(array('shortDescription' => 'Função para settar todos os objetos por meio de array', 'longDescription' => null, 'tags' => array(new Tag\ParamTag('data', 'array'))));
             $class->addMethod('exchangeArray', array('data'), MethodGenerator::FLAG_PUBLIC, $bodyExchangeArray, $docBlockExchangeArray);
             $docBlockGetArrayCopy = DocBlockGenerator::fromArray(array('shortDescription' => 'Função para retornar os valores por meio de array dos objetos da classe', 'longDescription' => null, 'tags' => array(new Tag\ReturnTag(array('datatype' => 'mixed')))));
             $class->addMethod('getArrayCopy', array(), MethodGenerator::FLAG_PUBLIC, 'return get_object_vars($this);', $docBlockGetArrayCopy);
             $classCode = "<?php" . PHP_EOL;
             $classCode .= $class->generate();
             /*
              $idxConstraint = 0;
              foreach ($this->oMetadata->getConstraints($tableName, $valueSchema) as $constraint) {
             
              $typeConstraint = ($constraint->isPrimaryKey()) ? 'pk' : (($constraint->isForeignKey()) ? 'fk' : null);
              if (!empty($typeConstraint)) {
             
              $consName = $constraint->getName();
              $contraintObj = $this->oMetadata->getConstraint($consName, $tableName, $valueSchema);
             
              $constraintColumns = $contraintObj->getColumns();
              if (count($constraintColumns) > 1) {
              foreach ($constraintColumns as $valueConsColumns) {
              $this->aDatabase[$valueSchema][$tableName][$valueConsColumns]['constraints']['type'] = $typeConstraint;
              if ($typeConstraint === 'fk') {
              $this->aDatabase[$valueSchema][$tableName][$valueConsColumns]['constraints']['schemaRef'] = $contraintObj->getReferencedTableSchema();
              $this->aDatabase[$valueSchema][$tableName][$valueConsColumns]['constraints']['tableRef'] = $contraintObj->getReferencedTableName();
              $this->aDatabase[$valueSchema][$tableName][$valueConsColumns]['constraints']['columnsRef'] = $contraintObj->getReferencedColumns();
              }
              }
              } else {
              $this->aDatabase[$valueSchema][$tableName][$constraintColumns[0]]['constraints']['type'] = $typeConstraint;
              if ($typeConstraint === 'fk') {
              $this->aDatabase[$valueSchema][$tableName][$constraintColumns[0]]['constraints']['schemaRef'] = $contraintObj->getReferencedTableSchema();
              $this->aDatabase[$valueSchema][$tableName][$constraintColumns[0]]['constraints']['tableRef'] = $contraintObj->getReferencedTableName();
              $this->aDatabase[$valueSchema][$tableName][$constraintColumns[0]]['constraints']['columnsRef'] = $contraintObj->getReferencedColumns();
              }
              }
              }
             
              $idxConstraint++;
              }
             * 
             */
             file_put_contents($this->ormFolder . $this->toCamelCase($valueSchema) . DS . 'Entities' . DS . $this->toCamelCase($tableName) . '.php', $classCode);
             chmod($this->ormFolder . $this->toCamelCase($valueSchema) . DS . 'Entities' . DS . $this->toCamelCase($tableName) . '.php', 0644);
             $this->generatorClassEntityTable($valueSchema, $tableName);
         }
         //gera arquivo por tabela
     }
     return $this;
 }
Пример #16
0
 private function writeParamFile()
 {
     $file = $this->path . DIRECTORY_SEPARATOR . 'Params.php';
     if (file_exists($file) && class_exists($this->namespace . '\\Params')) {
         $class = new ClassReflection($this->namespace . '\\Params');
         $paramsClass = ClassGenerator::fromReflection($class);
     } else {
         $paramsClass = new ClassGenerator('Params', $this->namespace, null, 'OpenStack\\Common\\Api\\AbstractParams');
     }
     foreach ($this->operations as $operation) {
         $params = $operation['params'];
         if (empty($params)) {
             continue;
         }
         foreach ($params as $paramName => $paramVal) {
             $name = $paramName . ucfirst($paramVal['location']);
             if ($paramsClass->hasMethod($name)) {
                 continue;
             }
             $body = sprintf("return %s;", $this->arrayEncoder->encode($paramVal, ['array.align' => true]));
             $body = str_replace("'\$", '$', $body);
             $body = str_replace("()'", '()', $body);
             $docblock = new DocBlockGenerator(sprintf("Returns information about %s parameter", $paramName), null, [new ReturnTag(['array'])]);
             $paramsClass->addMethod($name, [], MethodGenerator::FLAG_PUBLIC, $body, $docblock);
         }
     }
     $output = sprintf("<?php\n\n%s", $paramsClass->generate());
     file_put_contents($file, $output);
 }
 /**
  * {@inheritDoc}
  */
 public function generate(ClassGenerator $classGenerator)
 {
     return $classGenerator->generate();
 }
Пример #18
0
 /**
  * Generate mock class
  *
  * @return string
  */
 public function generate()
 {
     $this->generateTraitMethods();
     return parent::generate();
 }