コード例 #1
0
ファイル: FileValidatorSpec.php プロジェクト: memio/validator
 function it_also_validates_object(Object $object, ObjectValidator $objectValidator, File $model)
 {
     $violationCollection = new ViolationCollection();
     $model->getStructure()->willReturn($object);
     $objectValidator->validate($object)->willReturn($violationCollection);
     $this->validate($model);
 }
コード例 #2
0
 function it_inserts_the_generated_method(CodeEditor $codeEditor, File $file, FileModel $fileModel, FullyQualifiedNameModel $fullyQualifiedNameModel, MethodModel $methodModel, ObjectModel $objectModel)
 {
     $insertUseStatements = Argument::type(InsertUseStatements::class);
     $insertMethod = Argument::type(InsertMethod::class);
     $generatedMethod = new GeneratedMethod($fileModel->getWrappedObject());
     $fileModel->allFullyQualifiedNames()->willReturn([$fullyQualifiedNameModel]);
     $fileModel->getFilename()->willReturn(self::FILE_NAME);
     $fileModel->getStructure()->willReturn($objectModel);
     $objectModel->allMethods()->willReturn([$methodModel]);
     $codeEditor->open(self::FILE_NAME)->willReturn($file);
     $codeEditor->handle($insertUseStatements)->shouldBeCalled();
     $codeEditor->handle($insertMethod)->shouldBeCalled();
     $codeEditor->save($file)->shouldBeCalled();
     $this->onGeneratedMethod($generatedMethod);
 }
コード例 #3
0
    protected function generateCodeForResource(ResourceInterface $resource, array $data)
    {
        /** @var Object $structure */
        $structure = Object::make($resource->getSpecClassname());
        $structure->extend(Object::make('PhpSpec\\ObjectBehavior'));
        $methodBody = <<<BODY
        \$this->shouldHaveType('{$resource->getSrcClassname()}');
BODY;
        $structure->addMethod(Method::make('it_is_initializable')->setBody($methodBody));
        foreach ($data['params'] as $param) {
            $specExample = sprintf('it_should_retrieve_%s_getter_value', $param);
            $specMethodBody = "";
            $specMethodBody .= "        throw new PendingException('pending implementation');" . "\n";
            $specMethodBody .= "        \$expectation = 'put value here';" . "\n";
            $specMethodBody .= "        \$this->{$param}()->shouldBeLike(\$expectation);";
            $specExampleMethod = Method::make($specExample)->setBody($specMethodBody);
            $structure->addMethod($specExampleMethod);
        }
        $file = File::make($resource->getSpecFilename());
        $file->addFullyQualifiedName(new FullyQualifiedName('PhpSpec\\ObjectBehavior'));
        $file->addFullyQualifiedName(new FullyQualifiedName('Prophecy\\Argument'));
        $file->addFullyQualifiedName(new FullyQualifiedName('PhpSpec\\Exception\\Example\\PendingException'));
        $file->setStructure($structure);
        $prettyPrinter = Build::prettyPrinter();
        return $prettyPrinter->generateCode($file);
    }
コード例 #4
0
 public function generate()
 {
     $repository = File::make($this->filename)->setLicensePhpdoc(new LicensePhpdoc(self::PROJECT_NAME, self::AUTHOR_NAME, self::AUTHOR_EMAIL))->addFullyQualifiedName(new FullyQualifiedName(BaseRepository::class))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Entities\\" . $this->entity . "Entity as Entity"))->setStructure(Object::make($this->namespace . $this->entity . $this->layer)->extend(new Object(BaseRepository::class))->addMethod(Method::make('__construct')->addArgument(new Argument('Entity', 'Entity'))->setBody('        parent::__construct($Entity);')));
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($repository);
     return $this->generateFile($generatedCode);
 }
コード例 #5
0
 public function generate()
 {
     $repository = File::make($this->filename)->setLicensePhpdoc(new LicensePhpdoc(self::PROJECT_NAME, self::AUTHOR_NAME, self::AUTHOR_EMAIL))->addFullyQualifiedName(new FullyQualifiedName(BaseValidator::class))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Entities\\" . $this->entity . "Entity as Entity"))->setStructure(Object::make($this->namespace . $this->entity . $this->layer)->extend(new Object(BaseValidator::class))->addProperty(Property::make('rules')->makeProtected()->setDefaultValue("[\n      'name' => 'required'\n    ]"))->addMethod(Method::make('__construct')->addArgument(new Argument('Entity', 'Entity'))->setBody('        parent::__construct($Entity);'))->addMethod(Method::make('getCreateRules')->setBody('        return parent::getCreateRules();'))->addMethod(Method::make('getUpdateRules')->setBody('        return parent::getUpdateRules();')));
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($repository);
     return $this->generateFile($generatedCode);
 }
コード例 #6
0
 public function generate()
 {
     $repository = File::make($this->filename)->setLicensePhpdoc(new LicensePhpdoc(self::PROJECT_NAME, self::AUTHOR_NAME, self::AUTHOR_EMAIL))->addFullyQualifiedName(new FullyQualifiedName(BaseManager::class))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Entities\\" . $this->entity . "Entity as Entity"))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Validators\\" . $this->entity . "Validator as Validator"))->setStructure(Object::make($this->namespace . $this->entity . $this->layer)->extend(new Object(BaseManager::class))->addMethod(Method::make('__construct')->addArgument(new Argument('Entity', 'Entity'))->addArgument(new Argument('Validator', 'Validator'))->setBody('        return parent::__construct($Entity , $Validator);'))->addMethod(Method::make('save')->addArgument(new Argument('array', 'data'))->setBody('        return parent::save($data);'))->addMethod(Method::make('update')->addArgument(new Argument('array', 'data'))->setBody('        return parent::update($data);'))->addMethod(Method::make('delete')->setBody('        return parent::delete();'))->addMethod(Method::make('prepareData')->setBody('        return parent::prepareData();')));
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($repository);
     return $this->generateFile($generatedCode);
 }
コード例 #7
0
 public function generateCode($source, $target, $constructor = false)
 {
     $classAnalyzer = new ClassAnalyzer();
     $classAnalyzer->setFile($source);
     $parent = Object::make($classAnalyzer->getClassName());
     $targetClassName = $this->getClassName($target);
     $file = File::make($target);
     $object = Object::make($targetClassName);
     $object->extend($parent);
     $file->addFullyQualifiedName(new FullyQualifiedName($classAnalyzer->getFullClassName()));
     if ($constructor) {
         $constructor = $classAnalyzer->getConstructor();
         $method = Method::make('__construct');
         foreach ($constructor as $parameter) {
             $type = $parameter[0];
             if ($type === null) {
                 $type = 'null';
             }
             $method->addArgument(new Argument($type, $parameter[1]));
             $method->setBody('parent::__construct()');
         }
         $object->addMethod($method);
     }
     $file->setStructure($object);
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($file);
     return $generatedCode;
 }
コード例 #8
0
 public function generate()
 {
     $entity = File::make($this->filename)->setLicensePhpdoc(new LicensePhpdoc(self::PROJECT_NAME, self::AUTHOR_NAME, self::AUTHOR_EMAIL))->addFullyQualifiedName(new FullyQualifiedName(\Illuminate\Database\Eloquent\Collection::class))->addFullyQualifiedName(new FullyQualifiedName(BaseEntity::class))->setStructure(Object::make($this->namespace . $this->entity . $this->layer)->extend(new Object(BaseEntity::class))->addProperty(Property::make('table')->makeProtected()->setDefaultValue("'" . $this->table . "'"))->addProperty(Property::make('fillable')->makeProtected()->setDefaultValue("['id' , 'name']"))->addProperty(Property::make('hidden')->makeProtected()->setDefaultValue("[]"))->addProperty(Property::make('appends')->makeProtected()->setDefaultValue("[]")));
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($entity);
     return $this->generateFile($generatedCode);
 }
コード例 #9
0
    protected function generateCodeForResource(ResourceInterface $resource, array $data)
    {
        /** @var Object $structure */
        $structure = Object::make($resource->getSpecClassname());
        $handledClass = $data['handles'];
        $pieces = explode("\\", $handledClass);
        $handledClassShortName = end($pieces);
        $arguments = '$' . implode(', $', $data['params']);
        $structure->extend(Object::make('PhpSpec\\ObjectBehavior'));
        $methodBody = <<<BODY
        \$this->shouldHaveType('{$resource->getSrcClassname()}');
BODY;
        $structure->addMethod(Method::make('it_is_initializable')->setBody($methodBody));
        $methodBody = <<<BODY
        throw new PendingException('Pending implementation');
        \$command = new {$handledClassShortName}({$arguments});
        \$this->handle(\$command);
BODY;
        $structure->addMethod(Method::make('it_should_handle')->setBody($methodBody));
        $file = File::make($resource->getSpecFilename());
        $file->addFullyQualifiedName(new FullyQualifiedName('PhpSpec\\ObjectBehavior'));
        $file->addFullyQualifiedName(new FullyQualifiedName('Prophecy\\Argument'));
        $file->addFullyQualifiedName(new FullyQualifiedName('PhpSpec\\Exception\\Example\\PendingException'));
        $file->addFullyQualifiedName(new FullyQualifiedName($handledClass));
        $file->setStructure($structure);
        $prettyPrinter = Build::prettyPrinter();
        return $prettyPrinter->generateCode($file);
    }
コード例 #10
0
 public function handle(Command $command)
 {
     $method = new Method($command->methodName);
     $object = Object::make($command->fullyQualifiedName)->addMethod($method);
     $file = File::make($command->fileName)->setStructure($object);
     $arguments = $this->variableArgumentMarshaller->marshal($command->arguments);
     foreach ($arguments as $argument) {
         $argumentType = $argument->getType();
         $argumentName = $argument->getName();
         $fullyQualifiedName = new FullyQualifiedName($argumentType);
         if ($this->shouldAddUseStatement($file, $fullyQualifiedName)) {
             $file->addFullyQualifiedName($fullyQualifiedName);
         }
         $object->addProperty(new Property($argumentName));
         $method->addArgument($argument);
         $body = $method->getBody();
         if (!empty($body)) {
             $body .= "\n";
         }
         $body .= '        $this->' . $argumentName . ' = $' . $argumentName . ';';
         $method->setBody($body);
     }
     $generatedConstructor = new GeneratedConstructor($file);
     $this->eventDispatcher->dispatch(GeneratedConstructor::EVENT_NAME, $generatedConstructor);
 }
コード例 #11
0
 public function sample()
 {
     $file = File::make('Memio.php')->setStructure(Object::make('name\\space\\Sample')->addProperty(Property::make('string')->makePublic()->setPhpdoc(PropertyPhpdoc::make()->setVariableTag(VariableTag::make('string String'))))->addMethod(Method::make('get')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('Return string'))->setReturnTag(ReturnTag::make('string')))->setBody('return $this->string;'))->addMethod(Method::make('set')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('Set string'))->addParameterTag(ParameterTag::make('string', 'string', 'String'))->setReturnTag(ReturnTag::make('$this')))->addArgument(Argument::make('string', 'string'))->setBody('$this->string = $string;' . PHP_EOL . 'return $this;')));
     // Generate the code and display in the console
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($file);
     file_put_contents('tmp/origin/Memio.php', (string) $generatedCode);
 }
コード例 #12
0
    function it_logs_the_generated_method(File $file, ConsoleIO $io, Method $method, Object $object)
    {
        $generatedMethod = new GeneratedMethod($file->getWrappedObject());
        $file->getStructure()->willReturn($object);
        $object->getName()->willReturn(self::CLASS_NAME);
        $object->allMethods()->willReturn([$method]);
        $method->getName()->willReturn(self::METHOD_NAME);
        $className = self::CLASS_NAME;
        $methodName = self::METHOD_NAME;
        $io->write(<<<OUTPUT

  <info>Generated <value>{$className}#{$methodName}</value></info>

OUTPUT
)->shouldBeCalled();
        $this->onGeneratedMethod($generatedMethod);
    }
コード例 #13
0
    function it_logs_the_generated_constructor(File $file, ConsoleIO $io, Method $method, Object $object, Property $property)
    {
        $generatedConstructor = new GeneratedConstructor($file->getWrappedObject());
        $file->getStructure()->willReturn($object);
        $object->getName()->willReturn(self::CLASS_NAME);
        $object->allProperties()->willReturn([$property]);
        $object->allMethods()->willReturn([$method]);
        $method->getName()->willReturn(self::METHOD_NAME);
        $className = self::CLASS_NAME;
        $methodName = self::METHOD_NAME;
        $propertiesCount = self::PROPERTIES_COUNT;
        $io->write(<<<OUTPUT

  <info>Generated <value>{$propertiesCount}</value> property for <value>{$className}</value>, with its constructor</info>

OUTPUT
)->shouldBeCalled();
        $this->onGeneratedConstructor($generatedConstructor);
    }
コード例 #14
0
ファイル: HandlerGenerator.php プロジェクト: ulabox/bus-spec
 protected function generateCodeForResource(ResourceInterface $resource, array $data)
 {
     $structure = Object::make($resource->getSrcClassname());
     $structure->makeFinal();
     $handle = Method::make('handle');
     $handle->addArgument(Argument::make($data['handles'], 'command'));
     $handle->setBody("        // TODO write your own implementation");
     $structure->addMethod($handle);
     $file = File::make($resource->getSrcFilename())->setStructure($structure);
     $prettyPrinter = Build::prettyPrinter();
     return $prettyPrinter->generateCode($file);
 }
コード例 #15
0
 public function handle(Command $command)
 {
     $method = new Method($command->methodName);
     $file = File::make($command->fileName)->setStructure(Object::make($command->fullyQualifiedName)->addMethod($method));
     $arguments = $this->variableArgumentMarshaller->marshal($command->arguments);
     foreach ($arguments as $argument) {
         $fullyQualifiedName = new FullyQualifiedName($argument->getType());
         if ($this->shouldAddUseStatement($file, $fullyQualifiedName)) {
             $file->addFullyQualifiedName($fullyQualifiedName);
         }
         $method->addArgument($argument);
     }
     $generatedMethod = new GeneratedMethod($file);
     $this->eventDispatcher->dispatch(GeneratedMethod::EVENT_NAME, $generatedMethod);
 }
コード例 #16
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $file = $input->getArgument('file');
     $entity = $input->getArgument('entity');
     $entityDir = $input->getArgument('entity-dir');
     if (!file_exists($file)) {
         throw new \InvalidArgumentException("{$file} does not exist");
     }
     if (!is_dir($entityDir)) {
         throw new \InvalidArgumentException("{$entityDir} is not a valid directory");
     }
     $item = json_decode(file_get_contents($file))[0];
     $file = File::make($entityDir . '/' . $entity . '.php');
     $object = Object::make('Dandomain\\Api\\Entity\\' . $entity);
     $arrayProperties = [];
     foreach ($item as $key => $val) {
         if (gettype($val) == 'array') {
             $arrayProperties[] = $key;
         }
     }
     if (count($arrayProperties)) {
         $body = [];
         foreach ($arrayProperties as $arrayProperty) {
             $body[] = '        $this->' . $arrayProperty . ' = new ArrayCollection();';
         }
         $object->addMethod(Method::make('__construct')->setBody(join("\n", $body)));
         $file->addFullyQualifiedName(new FullyQualifiedName('Doctrine\\Common\\Collections\\ArrayCollection'));
     }
     foreach ($item as $key => $val) {
         $type = gettype($val);
         if ($type == 'array') {
             $type = 'ArrayCollection';
         }
         $property = Property::make($key)->makeProtected()->setPhpdoc(PropertyPhpdoc::make()->setVariableTag(new VariableTag($type)));
         $object->addProperty($property);
         $object->addMethod(Method::make('get' . ucfirst($key))->setPhpdoc(MethodPhpdoc::make()->setReturnTag(new ReturnTag($type)))->setBody('        return $this->' . $key . ';'));
         $object->addMethod(Method::make('set' . ucfirst($key))->setPhpdoc(MethodPhpdoc::make()->addParameterTag(new ParameterTag($type, $key))->setReturnTag(new ReturnTag($entity)))->addArgument(Argument::make('string', $key))->setBody('        $this->' . $key . ' = $' . $key . ';'));
     }
     $file->setStructure($object);
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($file);
     file_put_contents($file->getFilename(), $generatedCode);
 }
コード例 #17
0
    /**
     * {@inheritdoc}
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $model = $input->getArgument('model');
        $outputFile = sprintf('%s.php', $this->joinPaths($input->getOption('output'), str_replace('\\', DIRECTORY_SEPARATOR, $model)));
        $classObject = Object::make($model);
        $file = File::make($outputFile)->setStructure($classObject);
        $file->addFullyQualifiedName(FullyQualifiedName::make('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations as ODM'));
        $file->addFullyQualifiedName(FullyQualifiedName::make('Hive\\Annotations as H'));
        $fields = array_merge(['id:id'], $input->getArgument('fields'));
        foreach ($fields as $field) {
            if (!preg_match('/(\\w+)(?::(string|boolean|id|reference[s]?)(?:\\[([\\w\\\\]+),(\\w+)\\])?)?(?::(\\w+))?/i', $field, $matches)) {
                continue;
            }
            @(list($all, $name, $type, $referenceType, $linkProperty, $fake) = $matches);
            /** @var Property $property */
            $property = Property::make($name);
            $property->makePublic();
            $property->setPhpdoc(new ODMPropertyPhpdoc($name, $type, $referenceType, $linkProperty, $fake));
            $classObject->addProperty($property);
        }
        $classObject->setPhpdoc(StructurePhpdoc::make()->setDescription(Description::make(<<<'EOF'
This class is generated with the hive console.

@ODM\Document @ODM\HasLifecycleCallbacks
EOF
)));
        $classObject->addMethod(Method::make('validate')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make(<<<'EOF'
The validate method can be used to validate properties.

@ODM\PrePersist @ODM\PreUpdate
EOF
))));
        // Generate the code
        $prettyPrinter = Build::prettyPrinter();
        $prettyPrinter->addTemplatePath(realpath($this->joinPaths(dirname(__FILE__), '../../../templates/memio/')));
        $generatedCode = $prettyPrinter->generateCode($file);
        @mkdir(dirname($outputFile), 0755, true);
        file_put_contents($outputFile, html_entity_decode(html_entity_decode($generatedCode)));
        $io = new SymfonyStyle($input, $output);
        $io->success(["Model {$model} created in {$outputFile}"]);
    }
コード例 #18
0
ファイル: CommandGenerator.php プロジェクト: ulabox/bus-spec
    protected function generateCodeForResource(ResourceInterface $resource, array $data)
    {
        $structure = Object::make($resource->getSrcClassname());
        $structure->makeFinal();
        $construct = Method::make('__construct');
        $structure->addMethod($construct);
        $constructBody = [];
        foreach ($data['params'] as $param) {
            $structure->addProperty(Property::make($param));
            $body = <<<METHOD
        return \$this->{$param};
METHOD;
            $construct->addArgument(Argument::make('mixed', $param));
            $constructBody[] = "        \$this->{$param} = \${$param};";
            $method = Method::make($param)->setBody($body);
            $structure->addMethod($method);
        }
        $construct->setBody(implode("\n", $constructBody));
        $file = File::make($resource->getSrcFilename())->setStructure($structure);
        $prettyPrinter = Build::prettyPrinter();
        return $prettyPrinter->generateCode($file);
    }
コード例 #19
0
ファイル: Codegenerator.php プロジェクト: dandisy/dynamicCMS
 public function generate($class, $param = NULL)
 {
     // Describe the code you want to generate using "Models"
     $this->_class = Object::make(ucfirst($class));
     if ($param['property'] !== NULL) {
         if (is_array($param['property'])) {
             foreach ($param['property'] as $property) {
                 $this->_class->addProperty(Property::make($property));
             }
         } elseif (is_string($param['property'])) {
             $this->_class->addProperty(Property::make($param['property']));
         }
     }
     if ($param['method'] !== NULL) {
         if (is_array($param['method'])) {
             foreach ($param['method'] as $method) {
                 if (is_array($method)) {
                     foreach ($method as $name => $arguments) {
                         $this->_method = Method::make($name);
                         foreach ($arguments as $kind => $argument) {
                             $this->_method->addArgument(Argument::make($kind, $argument));
                         }
                     }
                     $this->_class->addMethod($this->_method);
                 } elseif (is_string($method)) {
                     $this->_class->addMethod(Method::make($method));
                 }
             }
         } elseif (is_string($param['method'])) {
             $this->_class->addMethod(Method::make($param['method']));
         }
     }
     $file = File::make(ucfirst($class) . 'php')->setStructure($this->_class);
     // Generate the code and display in the console
     $prettyPrinter = Build::prettyPrinter();
     echo '<pre>' . htmlspecialchars($prettyPrinter->generateCode($file)) . '</pre>';
 }
コード例 #20
0
 public function generate()
 {
     /*GENERATE BASE CONTROLLER FOR NAMESPACE */
     if (!FileSystem::exists($this->path . $this->pathname . '/BaseController.php')) {
         $baseDistPath = realpath(__DIR__ . '/../Controllers/BaseController.php.dist');
         $basePath = realpath(__DIR__ . '/../Controllers/') . '/BaseController.php';
         $copy = FileSystem::copy($baseDistPath, $basePath);
         $base = realpath(__DIR__ . '/../Controllers/BaseController.php');
         $find = 'use App\\Http\\Controllers\\Controller;';
         $replace = 'use ' . $this->getAppNamespace() . 'Http\\Controllers\\Controller;';
         $find2 = 'namespace AppNamespace\\Http\\Controllers\\API;';
         $replace2 = 'namespace ' . $this->getAppNamespace() . 'Http\\Controllers\\' . $this->pathname . ';';
         FileSystem::put($base, str_replace($find2, $replace2, str_replace($find, $replace, file_get_contents($base))));
         if (!FileSystem::isDirectory($this->path . $this->pathname)) {
             FileSystem::makeDirectory($this->path . $this->pathname);
         }
         FileSystem::move($base, $this->path . $this->pathname . '/BaseController.php');
     }
     $prefix = $this->prefix ? $this->prefix . '/' : '';
     $repository = File::make($this->filename)->setLicensePhpdoc(new LicensePhpdoc(self::PROJECT_NAME, self::AUTHOR_NAME, self::AUTHOR_EMAIL))->addFullyQualifiedName(new FullyQualifiedName(\Illuminate\Http\Request::class))->addFullyQualifiedName(new FullyQualifiedName($this->namespace . "BaseController"))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Repositories\\" . $this->entity . "Repository as Repository"))->addFullyQualifiedName(new FullyQualifiedName($this->appNamespace . "Managers\\" . $this->entity . "Manager as Manager"))->setStructure(Object::make($this->namespace . $this->entity . $this->layer)->extend(new Object(BaseController::class))->addMethod(Method::make('__construct')->addArgument(new Argument('Repository', 'Repository'))->addArgument(new Argument('Manager', 'Manager'))->setBody('        return parent::__construct($Repository , $Manager);'))->addMethod(Method::make('index')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('@api {get} /' . $prefix . snake_case(str_plural($this->entity)) . ' 1 Request all ' . snake_case(str_plural($this->entity)))->addLine('@apiVersion 1.0.0')->addLine('@apiName All' . str_plural($this->entity))->addLine('@apiGroup ' . str_plural($this->entity))->addEmptyLine()->addLine('@apiSuccess {Object[]}  0 ' . $this->entity . ' Object.')->addLine('@apiSuccess {Number} 0.id Id.')->addLine('@apiSuccess {DateTime} 0.created_at  Created date.')->addLine('@apiSuccess {DateTime} 0.updated_at  Last modification date.')->addEmptyLine()->addLine("@apiSuccessExample Success 200 Example")->addLine(" HTTP/1.1 200 OK")->addLine("[")->addLine("    {")->addLine('        id: 1,')->addLine('        created_at: ' . date('Y-m-d h:i:s') . ',')->addLine('        updated_at: ' . date('Y-m-d h:i:s'))->addLine("    },")->addLine("    {")->addLine('        id: 2,')->addLine('        created_at: ' . date('Y-m-d h:i:s') . ',')->addLine('        updated_at: ' . date('Y-m-d h:i:s'))->addLine("    }")->addLine("]")->addEmptyLine()->addLine("@apiError (ServerError 500) {string} error Server error.")->addEmptyLine()->addLine("@apiErrorExample {json} ServerError 500 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Server error. Try again.')->addLine("}")))->addArgument(new Argument('Request', 'Request'))->setBody('        return parent::index($Request);'))->addMethod(Method::make('show')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('@api {get} /' . $prefix . snake_case(str_plural($this->entity)) . '/:id 2 Request a specific ' . snake_case($this->entity))->addLine('@apiVersion 1.0.0')->addLine('@apiName Get' . $this->entity)->addLine('@apiGroup ' . str_plural($this->entity))->addEmptyLine()->addLine('@apiParam (Url params) {Number} id ' . $this->entity . ' unique id.')->addEmptyLine()->addLine('@apiSuccess {Number} id Id.')->addLine('@apiSuccess {DateTime} created_at  Created date.')->addLine('@apiSuccess {DateTime} updated_at  Last modification date.')->addEmptyLine()->addLine("@apiSuccessExample {json} Success 200 Example")->addLine(" HTTP/1.1 200 OK")->addLine("{")->addLine('    id: 1,')->addLine('    created_at: ' . date('Y-m-d h:i:s') . ',')->addLine('    updated_at: ' . date('Y-m-d h:i:s'))->addLine("}")->addEmptyLine()->addLine("@apiError (EntityNotFound 404) {string} error The id of the " . snake_case($this->entity) . " was not found.")->addEmptyLine()->addLine("@apiErrorExample {json} EntityNotFound 404 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Entity not found')->addLine("}")->addEmptyLine()->addLine("@apiError (ServerError 500) {string} error Server error.")->addEmptyLine()->addLine("@apiErrorExample {json} ServerError 500 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Server error. Try again.')->addLine("}")))->addArgument(new Argument('Request', 'Request'))->addArgument(new Argument('integer', 'id'))->setBody('        return parent::show($Request , $id);'))->addMethod(Method::make('store')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('@api {post} /' . $prefix . snake_case(str_plural($this->entity)) . ' 3 Store a  ' . snake_case($this->entity))->addLine('@apiVersion 1.0.0')->addLine('@apiName Store' . $this->entity)->addLine('@apiGroup ' . str_plural($this->entity))->addEmptyLine()->addLine('@apiParam (FormData) {String} name ' . $this->entity . ' name.')->addEmptyLine()->addLine('@apiSuccess (Success 201) {Number} id Id.')->addLine('@apiSuccess (Success 201)  {DateTime} created_at  Created date.')->addLine('@apiSuccess (Success 201)  {DateTime} updated_at  Last modification date.')->addEmptyLine()->addLine("@apiSuccessExample {json} Success 201 Example")->addLine(" HTTP/1.1 201 OK")->addLine("{")->addLine('    id: 1,')->addLine('    created_at: ' . date('Y-m-d h:i:s') . ',')->addLine('    updated_at: ' . date('Y-m-d h:i:s'))->addLine("}")->addEmptyLine()->addLine("@apiError (ValidationErrors 400)  {array[]} name  List of errors for name field.")->addLine("@apiError (ValidationErrors 400)  {string} name.0  First error for name.")->addLine("@apiError (ValidationErrors 400)  {string} name.1  Second error for name.")->addEmptyLine()->addLine("@apiErrorExample {json} ValidationErrors 400 Example")->addLine("  HTTP/1.1 400 Bad Request")->addLine("{")->addLine('    name: [')->addLine('         The name field is required')->addLine("    ]")->addLine("}")->addEmptyLine()->addLine("@apiError (ServerError 500) {string} error Server error.")->addEmptyLine()->addLine("@apiErrorExample {json} ServerError 500 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Server error. Try again.')->addLine("}")))->addArgument(new Argument('Request', 'Request'))->setBody('        return parent::store($Request);'))->addMethod(Method::make('update')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('@api {put} /' . $prefix . snake_case(str_plural($this->entity)) . '/:id 4 Update a specific  ' . snake_case($this->entity))->addLine('@apiVersion 1.0.0')->addLine('@apiName Update' . $this->entity)->addLine('@apiGroup ' . str_plural($this->entity))->addEmptyLine()->addLine('@apiParam (Url params)  {Number} id ' . $this->entity . ' unique id.')->addLine('@apiParam (FormData) {String} name ' . $this->entity . ' name.')->addEmptyLine()->addLine('@apiSuccess {Number} id Id.')->addLine('@apiSuccess {DateTime} created_at  Created date.')->addLine('@apiSuccess {DateTime} updated_at  Last modification date.')->addEmptyLine()->addLine("@apiSuccessExample {json} Success 200 Example")->addLine(" HTTP/1.1 200 OK")->addLine("{")->addLine('    id: 1,')->addLine('    created_at: ' . date('Y-m-d h:i:s') . ',')->addLine('    updated_at: ' . date('Y-m-d h:i:s'))->addLine("}")->addEmptyLine()->addLine("@apiError (EntityNotFound 404) {string} error The id of the " . snake_case($this->entity) . " was not found.")->addEmptyLine()->addLine("@apiErrorExample {json} EntityNotFound 404 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Entity not found')->addLine("}")->addEmptyLine()->addLine("@apiError (ValidationErrors 400)  {array[]} name  List of errors for name field.")->addLine("@apiError (ValidationErrors 400)  {string} name.0  First error for name.")->addLine("@apiError (ValidationErrors 400)  {string} name.1  Second error for name.")->addEmptyLine()->addLine("@apiErrorExample {json} ValidationErrors 400 Example")->addLine("  HTTP/1.1 400 Bad Request")->addLine("{")->addLine('    name: [')->addLine('         The name field is required')->addLine("    ]")->addLine("}")->addEmptyLine()->addLine("@apiError (ServerError 500) {string} error Server error.")->addEmptyLine()->addLine("@apiErrorExample {json} ServerError 500 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Server error. Try again.')->addLine("}")))->addArgument(new Argument('Request', 'Request'))->addArgument(new Argument('integer', 'id'))->setBody('        return parent::update($Request , $id);'))->addMethod(Method::make('destroy')->setPhpdoc(MethodPhpdoc::make()->setDescription(Description::make('@api {delete} /' . $prefix . snake_case(str_plural($this->entity)) . '/:id 5 Delete a specific  ' . snake_case($this->entity))->addLine('@apiVersion 1.0.0')->addLine('@apiName Delete' . $this->entity)->addLine('@apiGroup ' . str_plural($this->entity))->addEmptyLine()->addLine('@apiParam (Url params)  {Number} id ' . $this->entity . ' unique id.')->addEmptyLine()->addLine("@apiSuccessExample Success 204 Example")->addLine(" HTTP/1.1 204 OK")->addEmptyLine()->addLine("@apiError (EntityNotFound 404) {string} error The id of the " . snake_case($this->entity) . " was not found.")->addEmptyLine()->addLine("@apiErrorExample {json} EntityNotFound 404 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Entity not found')->addLine("}")->addEmptyLine()->addLine("@apiError (ServerError 500) {string} error Server error.")->addEmptyLine()->addLine("@apiErrorExample {json} ServerError 500 Example")->addLine("  HTTP/1.1 404 Not Found")->addLine("{")->addLine('    error: Server error. Try again.')->addLine("}")))->addArgument(new Argument('Request', 'Request'))->addArgument(new Argument('integer', 'id'))->setBody('        return parent::destroy($Request , $id);')));
     $prettyPrinter = Build::prettyPrinter();
     $generatedCode = $prettyPrinter->generateCode($repository);
     return $this->generateFile($generatedCode);
 }
コード例 #21
0
ファイル: Model.php プロジェクト: sergeycherepanov/m2gen
 /**
  * @param Object $object
  * @param $filePath
  * @param array $fqns
  * @return $this
  */
 protected function dumpObject(Object $object, $filePath, array $fqns = [])
 {
     $fileDir = dirname($filePath);
     $file = File::make($filePath);
     if ($object->hasParent()) {
         $fqns[] = $object->getParent()->getFullyQualifiedName();
     }
     foreach ($object->allContracts() as $contract) {
         $fqns[] = $contract->getFullyQualifiedName();
     }
     sort($fqns);
     foreach ($fqns as $name) {
         if (is_array($name)) {
             $keys = array_keys($name);
             $fqn = new FullyQualifiedName($name[$keys[0]]);
             $fqn->setAlias($keys[0]);
             $file->addFullyQualifiedName($fqn);
         } else {
             $file->addFullyQualifiedName(new FullyQualifiedName($name));
         }
     }
     $file->setStructure($object);
     $this->filesystem->mkdir($fileDir, 0755);
     $this->filesystem->dumpFile($filePath, Build::prettyPrinter()->generateCode($file), 0755);
     return $this;
 }
コード例 #22
0
ファイル: FileTest.php プロジェクト: abhimanyusharma003/memio
 public function testFull()
 {
     $file = File::make(self::FILENAME)->addFullyQualifiedName(new FullyQualifiedName('DateTime'))->setStructure(Object::make(self::FULLY_QUALIFIED_NAME)->addConstant(new Constant('FIRST_CONSTANT', '0'))->addConstant(new Constant('SECOND_CONSTANT', "'meh'"))->addProperty(new Property('firstProperty'))->addProperty(new Property('secondProperty'))->addMethod(Method::make('firstMethod')->addArgument(new Argument('DateTime', 'firstArgument'))->addArgument(new Argument('array', 'secondArgument'))->addArgument(new Argument('string', 'thirdArgument')))->addMethod(new Method('secondMethod')));
     $generatedCode = $this->prettyPrinter->generateCode($file);
     $this->assertExpectedCode($generatedCode);
 }
コード例 #23
0
 function it_needs_line_after_fully_qualified_names_if_file_has_fully_qualified_names(File $file)
 {
     $file->allFullyQualifiedNames()->willReturn(array(1));
     $this->needsLineAfter($file, self::IMPORT_BLOCK)->shouldBe(true);
 }