ApiRequestFactory   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
eloc 18
dl 0
loc 44
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getPreferredMethod() 0 13 5
A __construct() 0 4 1
A createHttpRequest() 0 9 1
1
<?php
2
3
namespace kalanis\Restful\Http;
4
5
6
use Nette\Http\IRequest;
7
use Nette\Http\Request;
8
use Nette\Http\RequestFactory;
9
10
11
/**
12
 * Api request factory
13
 */
14
class ApiRequestFactory
15
{
16
17
    public const OVERRIDE_HEADER = 'X-HTTP-Method-Override';
18
    public const OVERRIDE_PARAM = '__method';
19
20 1
    public function __construct(
21
        private readonly RequestFactory $factory,
22
    )
23
    {
24 1
    }
25
26
    /**
27
     * Create API HTTP request
28
     * @return IRequest
29
     */
30
    public function createHttpRequest(): IRequest
31
    {
32 1
        $request = $this->factory->fromGlobals();
33 1
        $url = $request->getUrl()->withQuery($request->getQuery());
34
35 1
        return new Request(
36 1
            $url, (array) $request->getPost(), $request->getFiles(), $request->getCookies(), $request->getHeaders(),
37 1
            $this->getPreferredMethod($request), $request->getRemoteAddress(), null,
38 1
            fn(): ?string => $request->getRawBody()
39 1
        );
40
    }
41
42
    /**
43
     * Get preferred method
44
     */
45
    protected function getPreferredMethod(IRequest $request): string
46
    {
47 1
        $method = $request->getMethod();
48 1
        $isPost = IRequest::Post === $method;
49 1
        $header = $request->getHeader(self::OVERRIDE_HEADER);
50 1
        $param = $request->getQuery(self::OVERRIDE_PARAM);
51 1
        if ($header && $isPost) {
52 1
            return $header;
53
        }
54 1
        if ($param && $isPost) {
55 1
            return strval($param);
56
        }
57 1
        return $request->getMethod();
58
    }
59
}
60