UriFactory   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
eloc 39
c 0
b 0
f 0
dl 0
loc 91
ccs 42
cts 42
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A fromNew() 0 3 1
B fromGlobal() 0 60 8
A createUri() 0 3 1
1
<?php
2
/**
3
 * This file is part of the Shieldon package.
4
 *
5
 * (c) Terry L. <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
declare(strict_types=1);
12
13
namespace Shieldon\Psr17;
14
15
use Psr\Http\Message\UriFactoryInterface;
16
use Psr\Http\Message\UriInterface;
17
use Shieldon\Psr7\Uri;
18
19
/**
20
 * PSR-17 Uri Factory
21
 */
22
class UriFactory implements UriFactoryInterface
23
{
24
    /**
25
     * {@inheritdoc}
26
     */
27 3
    public function createUri(string $uri = '') : UriInterface
28
    {
29 3
        return new Uri($uri);
30
    }
31
32
    /*
33
    |--------------------------------------------------------------------------
34
    | Non PSR-7 Methods.
35
    |--------------------------------------------------------------------------
36
    */
37
38
    /**
39
     * Create a UriInterface instance from global variable.
40
     *
41
     * @return UriInterface
42
     */
43 5
    public static function fromGlobal(): UriInterface
44
    {
45 5
        $server = $_SERVER ?? [];
46
47 5
        $uri = '';
48 5
        $user = '';
49 5
        $host = '';
50 5
        $pass = '';
51 5
        $path = '';
52 5
        $port = '';
53 5
        $query = '';
54 5
        $scheme = '';
55
56 5
        $uriComponents = [
57 5
            'user' => 'PHP_AUTH_USER',
58 5
            'host' => 'HTTP_HOST',
59 5
            'pass' => 'PHP_AUTH_PW',
60 5
            'path' => 'REQUEST_URI',
61 5
            'port' => 'SERVER_PORT',
62 5
            'query' => 'QUERY_STRING',
63 5
            'scheme' => 'REQUEST_SCHEME',
64 5
        ];
65
66 5
        foreach ($uriComponents as $key => $value) {
67 5
            ${$key} = $server[$value] ?? '';
68
        }
69
70 5
        $userInfo = $user;
71
72 5
        if ($pass) {
73 2
            $userInfo .= ':' . $pass;
74
        }
75
76 5
        $authority = '';
77
78 5
        if ($userInfo) {
79 2
            $authority .= $userInfo . '@';
80
        }
81
82 5
        $authority .= $host;
83
84 5
        if ($port) {
85 5
            $authority .= ':' . $port;
86
        }
87
88 5
        if ($scheme) {
89 5
            $uri .= $scheme . ':';
90
        }
91
92 5
        if ($authority) {
93 5
            $uri .= '//' . $authority;
94
        }
95
96 5
        $uri .= '/' . ltrim($path, '/');
97
98 5
        if ($query) {
99 2
            $uri .= '?' . $query;
100
        }
101
102 5
        return new Uri($uri);
103
    }
104
105
    /**
106
     * Create a new URI.
107
     *
108
     * @return UriInterface
109
     */
110 1
    public static function fromNew(): UriInterface
111
    {
112 1
        return new Uri();
113
    }
114
}
115