public function it_should_extract_metadata_from_method_collection(TypeResolver $typeResolver)
 {
     $typeResolver->extractTypeFromCollectionType(Argument::any())->willReturn(null);
     $typeResolver->resolvePropertyType(new \ReflectionProperty(DocRequest::class, 'someElem'))->willReturn(DocRequestElem::class);
     $typeResolver->resolvePropertyType(new \ReflectionProperty(DocRequestElem::class, 'prop'))->willReturn('string');
     $typeResolver->resolvePropertyType(new \ReflectionProperty(DocRequestElem::class, 'req'))->willReturn(DocRequest::class);
     $typeResolver->resolvePropertyType(new \ReflectionProperty(DocResponse::class, 'docResponseElem'))->willReturn(DocResponseElem::class);
     $typeResolver->resolvePropertyType(new \ReflectionProperty(DocResponseElem::class, 'prop'))->willReturn('string');
     $typeResolver->resolveFunctionReturnType(new \ReflectionMethod(DocService::class, 'wellDocumentedFunction'))->willReturn(DocResponse::class);
     $this->extract(new MethodCollection(['doc.service' => [new DocService(), 'wellDocumentedFunction']]))->shouldBeLike([['method' => 'doc.service', 'description' => 'Some desc of method.', 'parameters' => [['name' => 'someElem', 'description' => 'Some description of property.', 'type' => 'object', 'properties' => [['name' => 'prop', 'description' => '', 'type' => 'string'], ['name' => 'req', 'description' => '', 'type' => 'object', 'properties' => []]]]], 'returns' => [['name' => 'docResponseElem', 'description' => 'Some desc of response.', 'type' => 'object', 'properties' => [['name' => 'prop', 'description' => '', 'type' => 'string']]]]]]);
 }
예제 #2
0
 /**
  * @param string $class
  * @param array  $processed
  *
  * @return array
  */
 private function extractParameters($class, $processed = [])
 {
     if (isset($processed[$class])) {
         return [];
     }
     $processed[$class] = true;
     $reflectionClass = new \ReflectionClass($class);
     $parameters = [];
     foreach ($reflectionClass->getProperties() as $reflectionProperty) {
         $type = $this->determinePropertyType($reflectionProperty);
         $isCollection = false;
         if ($extractedType = $this->typeResolver->extractTypeFromCollectionType($type)) {
             $isCollection = true;
             $type = $extractedType;
         }
         $docBlock = new DocBlock($reflectionProperty);
         $parameter = ['name' => $reflectionProperty->getName(), 'description' => $docBlock->getShortDescription(), 'type' => $type . ($isCollection ? '[]' : '')];
         if (class_exists($type)) {
             $parameter = array_merge($parameter, ['type' => 'object' . ($isCollection ? '[]' : ''), 'properties' => $this->extractParameters($type, $processed)]);
         }
         $parameters[] = $parameter;
     }
     return $parameters;
 }