Passed
Branch improve-scrutinizer (747e36)
by Ayan
05:23
created

Config::generateUrl()   A

Complexity

Conditions 6
Paths 24

Size

Total Lines 32
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 18
nc 24
nop 3
dl 0
loc 32
rs 9.0444
c 0
b 0
f 0
1
<?php
2
3
namespace Phprest\Service\Hateoas;
4
5
use Phprest\Service\Configurable;
6
use Symfony\Component\HttpFoundation\Request;
7
8
class Config implements Configurable
9
{
10
    /**
11
     * @var bool
12
     */
13
    public $debug = false;
14
15
    /**
16
     * @var string
17
     */
18
    public $cacheDir;
19
20
    /**
21
     * @var string
22
     */
23
    public $metadataDir;
24
25
    /**
26
     * @var callable
27
     */
28
    public $urlGenerator;
29
30
    /**
31
     * @param bool $debug
32
     * @param string|null $cacheDir
33
     * @param string|null $metadataDir
34
     * @param callable|null $urlGenerator
35
     */
36
    public function __construct(
37
        $debug = false,
38
        $cacheDir = null,
39
        $metadataDir = null,
40
        $urlGenerator = null
41
    ) {
42
        $this->debug        = $debug;
43
        $this->cacheDir     = $cacheDir;
44
        $this->metadataDir  = $metadataDir;
45
        $this->urlGenerator = $urlGenerator;
46
47
        if (is_null($cacheDir)) {
48
            $this->cacheDir = sys_get_temp_dir() . '/hateoas';
49
        }
50
51
        if (is_null($metadataDir)) {
52
            $this->metadataDir = sys_get_temp_dir() . '/hateoas';
53
        }
54
55
        if (is_null($urlGenerator)) {
56
            $this->urlGenerator = function ($route, array $parameters, $absolute) {
57
                return $this->generateUrl($route, $parameters, $absolute);
58
            };
59
        }
60
    }
61
62
    /**
63
     * @param string $route
64
     * @param array $parameters
65
     * @param bool $absolute
66
     *
67
     * @return string
68
     */
69
    protected function generateUrl($route, array $parameters, $absolute)
70
    {
71
        $queryParams    = '';
72
        $resourceParams = [];
73
74
        foreach ($parameters as $paramName => $paramValue) {
75
            if (strpos(strtolower($paramName), 'id') !== false) {
76
                $resourceParams[$paramName] = $paramValue;
77
                continue;
78
            }
79
80
            $queryParams .= $paramName . '=' . $paramValue . '&';
81
        }
82
83
        if ($queryParams !== '') {
84
            $queryParams = '?' . substr($queryParams, 0, -1);
85
        }
86
87
        $resourceParams = implode('/', $resourceParams);
88
89
        if (! empty($resourceParams)) {
90
            $resourceParams = '/' . $resourceParams;
91
        }
92
93
        if ($absolute) {
94
            return Request::createFromGlobals()->getSchemeAndHttpHost() .
95
                $route .
96
                $resourceParams .
97
                $queryParams;
98
        }
99
100
        return $route . $resourceParams . $queryParams;
101
    }
102
103
    /**
104
     * @return string
105
     */
106
    public static function getServiceName()
107
    {
108
        return 'hateoas';
109
    }
110
}
111