Пример #1
0
 /**
  * @param $name
  * @param $visibility
  * @param $default
  * @param $type
  *
  * @return PropertyGenerator
  */
 public static function property($name, $visibility = 'public', $default = null, $type = 'mixed')
 {
     $property = (new PropertyGenerator($name, $default))->setVisibility($visibility);
     $property->setIndentation(Generator::$indentation);
     $docBlock = new DocBlockGenerator();
     $docBlock->setIndentation(Generator::$indentation);
     $tag = new Tag();
     $tag->setName('var');
     $tag->setContent($type);
     $tag->setIndentation(Generator::$indentation);
     $docBlock->setTag($tag);
     $property->setDocBlock($docBlock);
     return $property;
 }
Пример #2
0
 public function testParamProducesCorrectDocBlockTag()
 {
     $this->tag->setName('foo');
     $this->tag->setDescription('bar bar bar');
     $this->assertEquals('@foo bar bar bar', $this->tag->generate());
 }
Пример #3
0
 private function getServiceCode()
 {
     $code = new ClassGenerator($this->service->getName(), $this->namespace, null, '\\SoapClient');
     $doc = $this->service->getDoc();
     if ($doc) {
         $docBlock = new DocBlockGenerator($doc);
         $code->setDocBlock($docBlock);
     }
     foreach ($this->service->getFunctions() as $function) {
         $method = new MethodGenerator($function->getMethod());
         $docBlock = new DocBlockGenerator($function->getDoc());
         foreach ($function->getParams() as $param) {
             $methodParam = new ParameterGenerator($param->getName());
             if (false === $param->isPrimitive()) {
                 $methodParam->setType('\\' . $this->getFullNamespace($param->getType()));
             }
             $method->setParameter($methodParam);
             $tag = new Tag();
             $tag->setName('property');
             $type = $param->getType();
             if (false === $param->isPrimitive()) {
                 $type = '\\' . $this->getFullNamespace($param->getType());
             }
             $tag->setDescription(sprintf('%s $%s', $type, $param->getName()));
             $docBlock->setTag($tag);
         }
         $tag = new Tag();
         $tag->setName('returns');
         $tag->setDescription("\\" . $this->getFullNamespace($function->getReturns()));
         $docBlock->setTag($tag);
         $method->setBody(sprintf('return $this->__soapCall("%s", func_get_args());', $function->getName()));
         $method->setDocBlock($docBlock);
         $code->addMethodFromGenerator($method);
     }
     return $code;
 }
 protected function generateDocblock($requestTypeName, $requestType, $returnType)
 {
     $docblock = $this->getDocblockGenerator();
     $scalarTypes = $this->getScalarTypes();
     $isScalarReturn = false;
     if (isset($scalarTypes[$returnType])) {
         $returnType = $scalarTypes[$returnType];
         $isScalarReturn = true;
     }
     if ($requestNamespace = $this->getRequestNamespace()) {
         $requestType = Soap::REQUEST_NAMESPACE_ALIAS . '\\' . $requestType;
         if (!$isScalarReturn) {
             $returnType = Soap::RESPONSE_NAMESPACE_ALIAS . '\\' . $returnType;
         }
     }
     $apiTag = new CodeGenerator\DocBlock\Tag();
     $apiTag->setName('api');
     $docblock->setTag($apiTag);
     $parameterTag = new CodeGenerator\DocBlock\Tag\ParamTag();
     $parameterTag->setDataType($requestType);
     $parameterTag->setParamName(lcfirst($requestTypeName));
     $docblock->setTag($parameterTag);
     $returnTag = new CodeGenerator\DocBlock\Tag\ReturnTag();
     $returnTag->setDataType($returnType);
     $docblock->setTag($returnTag);
     return $docblock;
 }
 public function testNameGetterAndSetterPersistValue()
 {
     $this->_tag->setName('Foo');
     $this->assertEquals('Foo', $this->_tag->getName());
 }
Пример #6
0
 public function getDocBlockGenerator()
 {
     if (!$this->docBlockGenerator) {
         $generator = new CodeGenerator\DocBlockGenerator();
         $apiTag = new CodeGenerator\DocBlock\Tag();
         $apiTag->setName('api');
         $generator->setTag($apiTag);
         $this->docBlockGenerator = $generator;
     }
     return $this->docBlockGenerator;
 }
Пример #7
0
 protected function handleSetter(Generator\ClassGenerator $generator, PHPProperty $prop, PHPClass $class)
 {
     $name = "set" . Inflector::classify($prop->getName());
     $type = $this->getPropertyType($prop);
     $namespace = explode("\\", $type);
     $namespaceClass = array_pop($namespace);
     $namespace = implode("\\", $namespace);
     if ($namespace == $class->getNamespace() || $namespace == "\\" . $class->getNamespace()) {
         $type = $namespaceClass;
     }
     if (substr($type, -2) == "[]") {
         $type = "array";
     }
     $fullName = "method {$class->getName()} {$name}({$type} \${$prop->getName()})";
     $docblock = $generator->getDocBlock();
     $docblock->setWordWrap(false);
     $tag = new Generator\DocBlock\Tag();
     $tag->setName($fullName);
     $docblock->setTag($tag);
     return;
 }
Пример #8
0
 protected function handleSecondClassElements(CodeGenerator\ClassGenerator $classGenerator, array &$map, DOMNodeList $secondClassElements, DOMNode $element, DOMXPath $xpath)
 {
     foreach ($secondClassElements as $secondClassElement) {
         $maxOccursNode = $xpath->query('@maxOccurs', $secondClassElement)->item(0);
         $maxOccurs = $maxOccursNode ? $maxOccursNode->textContent : null;
         $unbounded = $maxOccurs == 'unbounded';
         $hydrationModifier = '#';
         $secondClassElementName = null;
         $secondClassElementNameNode = $xpath->query('@name', $secondClassElement)->item(0);
         if ($secondClassElementNameNode) {
             $secondClassElementName = $secondClassElementNameNode->textContent;
             $this->generateResource($secondClassElement);
         } else {
             $secondClassElementNameNode = $xpath->query('@ref', $secondClassElement)->item(0);
             if ($secondClassElementNameNode) {
                 if (substr($secondClassElementNameNode->textContent, 0, 4) == "tns:") {
                     $secondClassElementName = substr($secondClassElementNameNode->textContent, 4);
                 } elseif (substr($secondClassElementNameNode->textContent, 0, 5) == "data:") {
                     $secondClassElementName = substr($secondClassElementNameNode->textContent, 5);
                 }
             }
         }
         if (!$secondClassElementName) {
             continue;
         }
         $secondClassElementType = $secondClassElementName;
         if ($unbounded) {
             $secondClassElementType .= "[]";
         }
         $propertyName = lcfirst($secondClassElementName);
         if ($unbounded) {
             $propertyName .= 's';
         }
         $secondClassElementProperty = clone $this->getPropertyGenerator();
         $secondClassElementProperty->setName($propertyName);
         if ($unbounded) {
             $secondClassElementProperty->setDefaultValue(new CodeGenerator\PropertyValueGenerator(array()));
             $hydrationModifier .= '@';
             $mapKeyName = "{$secondClassElementName}s";
         } else {
             $mapKeyName = $secondClassElementName;
         }
         if ($secondClassElementType) {
             $secondClassElementPropertyDocblock = clone $this->getPropertyDocblockGenerator();
             $secondClassElementProperty->setDocBlock($secondClassElementPropertyDocblock);
             $typeTag = new CodeGenerator\DocBlock\Tag();
             $typeTag->setName('var');
             $typeTag->setDescription($secondClassElementType);
             $secondClassElementPropertyDocblock->setTag($typeTag);
         }
         $classGenerator->addPropertyFromGenerator($secondClassElementProperty);
         $getterGenerator = $this->generatePropertyGetter($propertyName);
         $setterGenerator = $this->generatePropertySetter($propertyName);
         $classGenerator->addMethods(array($getterGenerator, $setterGenerator));
         $map["{$hydrationModifier}{$mapKeyName}"] = "_:{$secondClassElementName}";
     }
 }