CliResponder   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 1 Features 0
Metric Value
wmc 6
eloc 12
c 3
b 1
f 0
dl 0
loc 40
rs 10
ccs 12
cts 12
cp 1

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 21 3
A getOutput() 0 5 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Provide\Transfer;
6
7
use BEAR\Resource\Code;
8
use BEAR\Resource\ResourceObject;
9
use BEAR\Sunday\Extension\Transfer\TransferInterface;
10
use BEAR\Sunday\Provide\Transfer\ConditionalResponseInterface;
11
use BEAR\Sunday\Provide\Transfer\HeaderInterface;
12
use BEAR\Sunday\Provide\Transfer\Output;
13
14
use const PHP_EOL;
15
16 1
final class CliResponder implements TransferInterface
17
{
18 1
    public function __construct(
19 1
        private HeaderInterface $header,
20 1
        private ConditionalResponseInterface $condResponse,
21
    ) {
22
    }
23 1
24 1
    /**
25
     * {@inheritDoc}
26 1
     */
27 1
    public function __invoke(ResourceObject $ro, array $server): void
28
    {
29
        /** @var array{HTTP_IF_NONE_MATCH?: string} $server */
30 1
        $isModified = $this->condResponse->isModified($ro, $server);
31
        $output = $isModified ? $this->getOutput($ro, $server) : $this->condResponse->getOutput($ro->headers);
32 1
33 1
        $statusText = (new Code())->statusText[$ro->code] ?? '';
34 1
        $ob = $output->code . ' ' . $statusText . PHP_EOL;
35
36
        // header
37
        foreach ($output->headers as $label => $value) {
38
            $ob .= "{$label}: {$value}" . PHP_EOL;
39
        }
40
41
        // empty line
42
        $ob .= PHP_EOL;
43
44
        // body
45
        $ob .= (string) $output->view;
46
47
        echo $ob;
48
    }
49
50
    /** @param array<string, string> $server */
51
    private function getOutput(ResourceObject $ro, array $server): Output
52
    {
53
        $ro->toString(); // set headers as well
54
55
        return new Output($ro->code, ($this->header)($ro, $server), (string) $ro->view ?: $ro->toString());
56
    }
57
}
58