/** * Add the methods that return the operations in the API. */ function addOperationGetter($methodName, OperationDefinition $operation, OperationGenerator $operationGenerator) { $operationName = $this->normalizeMethodName($methodName); $operationClassName = $this->normalizeClassName($methodName); $methodGenerator = new MethodGenerator($operationName); $apiParameters = $this->getAPIParameters(); $body = ''; //All required parameters must be passed in when the operation is created. $requiredParameters = $operation->getRequiredParams(); $paramsStrings = []; $requiredParamsStringsWithDollar = []; $tags = []; $requiredParamsStringsWithDollar[] = '$this'; foreach ($requiredParameters as $requiredParam) { $translatedParam = ucfirst($this->translateParameter($requiredParam->getName())); $normalizedParamName = normalizeParamName($requiredParam->getName()); if (array_key_exists($requiredParam->getName(), $apiParameters) == true) { $requiredParamsStringsWithDollar[] = sprintf('$this->get%s()', $translatedParam); } else { $paramsStrings[] = $normalizedParamName; $tags[] = new GenericTag('param', $requiredParam->getType() . ' $' . $requiredParam->getName() . ' ' . $requiredParam->getDescription()); //TODO - replace with array_map on $paramsStrings $requiredParamsStringsWithDollar[] = '$' . $normalizedParamName; } } $paramString = implode(', ', $requiredParamsStringsWithDollar); $methodGenerator->setParameters($paramsStrings); $tags[] = new GenericTag('return', '\\' . $operationGenerator->getFQCN() . ' The new operation '); $body .= "\$instance = new {$operationClassName}({$paramString});" . PHP_EOL; $body .= "return \$instance;" . PHP_EOL; $docBlockGenerator = new DocBlockGenerator($methodName); $docBlockGenerator->setLongDescription($operation->getSummary()); $docBlockGenerator->setTags($tags); $methodGenerator->setDocBlock($docBlockGenerator); $methodGenerator->setBody($body); $this->classGenerator->addMethodFromGenerator($methodGenerator); $this->interfaceGenerator->addMethodFromGenerator($methodGenerator); }