Completed
Pull Request — master (#590)
by
unknown
01:22
created

GetFromRequestClass   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 17
lcom 0
cbo 2
dl 0
loc 69
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 18 4
A getBodyParametersFromRequestClass() 0 16 3
B explodeParams() 0 26 10
1
<?php
2
3
namespace Mpociot\ApiDoc\Strategies\BodyParameters;
4
5
6
use Throwable;
7
use ReflectionClass;
8
use ReflectionMethod;
9
use Illuminate\Routing\Route;
10
use Mpociot\ApiDoc\Strategies\Strategy;
11
use Mpociot\ApiDoc\Tools\Traits\DocBlockParamHelpers;
12
13
class GetFromRequestClass extends Strategy{
14
    
15
    use DocBlockParamHelpers;
16
    
17
    public function __invoke(Route $route, ReflectionClass $controller, ReflectionMethod $method, array $routeRules, array $context = [])
18
    {
19
        $parameters = [];
20
        foreach ($method->getParameters() as $param) {
21
            $paramType = $param->getType();
22
            if ($paramType === null) {
23
                continue;
24
            }
25
26
            $parameterClassName = version_compare(phpversion(), '7.1.0', '<')
27
                ? $paramType->__toString()
28
                : $paramType->getName();
29
30
            $parameters = array_merge($parameters , $this->getBodyParametersFromRequestClass($parameterClassName));
31
        }
32
33
        return $parameters;
34
    }
35
36
    private function getBodyParametersFromRequestClass($requestClass)
37
    {
38
        $arrayParams = [];
39
        try {
40
            $r = new ReflectionClass($requestClass);
41
            $instance = $r->newInstanceWithoutConstructor();
42
            $parameters = $instance->rules();
43
                foreach ($parameters as $key => $value) {
44
                    $arrayParams  = array_merge($arrayParams,$this->explodeParams($key , $value));
45
                }
46
        } catch (Throwable $e) {
47
            echo $e->getMessage();
48
        }
49
50
        return $arrayParams;
51
    }
52
53
    public function explodeParams($field , $paramsValue){
54
        $params = explode('|', $paramsValue);
55
        $required = false;
56
        $description = [];
57
        $type = '';
58
        foreach($params as $param){
59
            if($param === 'required'){
60
                $required = true;
61
            }
62
            elseif($param === 'string' || $param === 'integer' ||$param === 'array' ||$param === 'boolean' ||$param === 'float' ||$param === 'number'|| $param === 'object'){
63
                $type = $param;
64
            }
65
            else{
66
                $description [] = $param;
67
            }
68
        }
69
70
        return [
71
            $field=> [
72
                'type'=> $type,
73
                'description'=> implode(" ",$description),
74
                'required'=>$required,
75
                'value'=>$this->generateDummyValue($type)
76
            ]
77
        ];
78
    }
79
80
    
81
}