Example #1
0
 /**
  * Write to retrofit cache
  *
  * @param GeneratedClassMetaDataProvider $generatedClassMetaDataProvider
  * @param string $contents
  */
 public function write(GeneratedClassMetaDataProvider $generatedClassMetaDataProvider, $contents)
 {
     $contents = "<?php\n" . $contents;
     $path = $this->cacheDir . $generatedClassMetaDataProvider->getFilePath();
     $filename = $path . DIRECTORY_SEPARATOR . $generatedClassMetaDataProvider->getFilenameShort();
     $this->filesystem->mkdir($path);
     $this->filesystem->dumpFile($filename, $contents);
 }
 /**
  * Generate a REST client based on an interface
  *
  * @param ClassMetaDataProvider $classMetaDataProvider
  * @param GeneratedClassMetaDataProvider $generatedClassMetaDataProvider
  * @return string
  */
 public function generate(ClassMetaDataProvider $classMetaDataProvider, GeneratedClassMetaDataProvider $generatedClassMetaDataProvider)
 {
     // get interface methods
     $parsedMethods = $classMetaDataProvider->getInterfaceMethods();
     // loop through class annotations
     $class = new ClassModel();
     foreach ($classMetaDataProvider->getClassAnnotations() as $classAnnotation) {
         if ($classAnnotation instanceof Headers) {
             $class->addHeaders($classAnnotation->getHeaders());
         }
     }
     // loop over class methods
     foreach ($classMetaDataProvider->getReflectionMethods() as $index => $classMethod) {
         $parsedMethod = array_shift($parsedMethods);
         $parameters = $classMethod->getParameters();
         $method = new Method();
         $method->setName($classMetaDataProvider->getMethodName($parsedMethod));
         $method->setDeclaration($classMetaDataProvider->getMethodDeclaration($parsedMethod));
         // loop through method annotations
         foreach ($classMetaDataProvider->getMethodAnnotations($classMethod) as $methodAnnotation) {
             if ($methodAnnotation instanceof HttpRequest) {
                 foreach ($methodAnnotation->getParameters() as $parameter) {
                     $this->assertParameter($parameters, $parameter);
                 }
             }
             if ($methodAnnotation instanceof AnnotationToVariableMap) {
                 $this->assertParameter($parameters, $methodAnnotation->getName());
             }
             $handler = $this->annotationHandlerFactory->make($methodAnnotation);
             $handler->handle($method, $methodAnnotation);
         }
         $methodOptions = $method->getOptions();
         $methodParts = $method->getParts();
         Tebru\assert(null !== $method->getType(), new GenerationException('During Generation, the http method annotation was not found.'));
         Tebru\assert(empty($methodOptions['body']) || empty($methodParts), new GenerationException(sprintf('During Generation, both a @Body and @Part annotation were found on method "%s"', $method->getName())));
         $class->addMethod($method);
     }
     // render class as string
     $template = $this->twig->loadTemplate('service.php.twig');
     return $template->render(['uses' => $classMetaDataProvider->getUseStatements(), 'namespace' => $generatedClassMetaDataProvider->getNamespaceFull(), 'className' => $classMetaDataProvider->getInterfaceNameShort(), 'interfaceName' => $classMetaDataProvider->getInterfaceNameFull(), 'methods' => $class->getMethods()]);
 }