• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tempestphp / tempest-framework / 14049246919

24 Mar 2025 09:42PM UTC coverage: 79.353% (-0.04%) from 79.391%
14049246919

push

github

web-flow
feat(support): support array parameters in string manipulations (#1073)

48 of 48 new or added lines in 2 files covered. (100.0%)

735 existing lines in 126 files now uncovered.

10492 of 13222 relevant lines covered (79.35%)

90.78 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

65.71
/src/Tempest/Router/src/GenericResponseSender.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Tempest\Router;
6

7
use Generator;
8
use Tempest\Router\Responses\Download;
9
use Tempest\Router\Responses\File;
10
use Tempest\View\View;
11
use Tempest\View\ViewRenderer;
12

13
final readonly class GenericResponseSender implements ResponseSender
14
{
15
    public function __construct(
6✔
16
        private ViewRenderer $viewRenderer,
17
    ) {}
6✔
18

19
    public function send(Response $response): Response
5✔
20
    {
21
        ob_start();
5✔
22

23
        $this->sendHeaders($response);
5✔
24
        ob_flush();
5✔
25

26
        $this->sendContent($response);
5✔
27
        ob_end_flush();
5✔
28

29
        if (function_exists('fastcgi_finish_request')) {
5✔
UNCOV
30
            fastcgi_finish_request();
×
31
        }
32

33
        return $response;
5✔
34
    }
35

36
    private function sendHeaders(Response $response): void
5✔
37
    {
38
        // TODO: Handle SAPI/FastCGI
39
        if (headers_sent()) {
5✔
40
            return;
5✔
41
        }
42

UNCOV
43
        foreach ($this->resolveHeaders($response) as $header) {
×
44
            header($header);
×
45
        }
46

UNCOV
47
        http_response_code($response->status->value);
×
48
    }
49

UNCOV
50
    private function resolveHeaders(Response $response): Generator
×
51
    {
UNCOV
52
        $headers = $response->headers;
×
53

UNCOV
54
        if (is_array($response->body)) {
×
55
            $headers[ContentType::HEADER] ??= new Header(ContentType::HEADER);
×
56
            $headers[ContentType::HEADER]->add(ContentType::JSON->value);
×
57
        }
58

UNCOV
59
        foreach ($headers as $key => $header) {
×
60
            foreach ($header->values as $value) {
×
61
                yield "{$key}: {$value}";
×
62
            }
63
        }
64
    }
65

66
    private function sendContent(Response $response): void
5✔
67
    {
68
        $body = $response->body;
5✔
69

70
        if ($response instanceof File || $response instanceof Download) {
5✔
71
            readfile($body);
2✔
72
        } elseif (is_array($body)) {
3✔
73
            echo json_encode($body);
1✔
74
        } elseif ($body instanceof View) {
2✔
75
            echo $this->viewRenderer->render($body);
1✔
76
        } else {
77
            echo $body;
1✔
78
        }
79

80
        ob_flush();
5✔
81
    }
82
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc