Passed
Push — master ( 69b17c...082853 )
by Terry
02:44
created

UriFactory::fromGlobal()   B

Complexity

Conditions 8
Paths 128

Size

Total Lines 60
Code Lines 36

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 38
CRAP Score 8

Importance

Changes 0
Metric Value
eloc 36
c 0
b 0
f 0
dl 0
loc 60
ccs 38
cts 38
cp 1
rs 7.9128
cc 8
nc 128
nop 0
crap 8

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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