Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
13 / 13
CRAP
100.00% covered (success)
100.00%
1 / 1
AbstractFactory
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
13 / 13
15
100.00% covered (success)
100.00%
1 / 1
 serverRequest
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
0
 request
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 response
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 stream
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFromFile
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFromResource
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 uploadedFile
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uri
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 responseFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 requestFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 serverRequestFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uploadedFileFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uriFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Celemas\Core\Factory;
6
7use Celemas\Core\Exception\ValueError;
8use Override;
9use Psr\Http\Message\RequestFactoryInterface as Requestfactory;
10use Psr\Http\Message\RequestInterface as Request;
11use Psr\Http\Message\ResponseFactoryInterface as ResponseFactory;
12use Psr\Http\Message\ResponseInterface as Response;
13use Psr\Http\Message\ServerRequestFactoryInterface as ServerRequestFactory;
14use Psr\Http\Message\ServerRequestInterface as ServerRequest;
15use Psr\Http\Message\StreamFactoryInterface as StreamFactory;
16use Psr\Http\Message\StreamInterface as Stream;
17use Psr\Http\Message\UploadedFileFactoryInterface as UploadedFileFactory;
18use Psr\Http\Message\UploadedFileInterface as UploadedFile;
19use Psr\Http\Message\UriFactoryInterface as UriFactory;
20use Psr\Http\Message\UriInterface as Uri;
21use Stringable;
22
23/** @api */
24abstract class AbstractFactory implements Factory
25{
26    protected RequestFactory $requestFactory;
27    protected ResponseFactory $responseFactory;
28    protected ServerRequestFactory $serverRequestFactory;
29    protected StreamFactory $streamFactory;
30    protected UploadedFileFactory $uploadedFileFactory;
31    protected UriFactory $uriFactory;
32
33    #[Override]
34    abstract public function serverRequest(): ServerRequest;
35
36    #[Override]
37    public function request(string $method, Uri|string $uri): Request
38    {
39        return $this->requestFactory->createRequest($method, $uri);
40    }
41
42    #[Override]
43    public function response(int $code = 200, string $reasonPhrase = ''): Response
44    {
45        if ($reasonPhrase === '') {
46            return $this->responseFactory->createResponse($code);
47        }
48
49        return $this->responseFactory->createResponse($code, $reasonPhrase);
50    }
51
52    #[Override]
53    public function stream(string|Stringable $content = ''): Stream
54    {
55        return $this->streamFactory->createStream((string) $content);
56    }
57
58    #[Override]
59    public function streamFromFile(string $filename, string $mode = 'r'): Stream
60    {
61        return $this->streamFactory->createStreamFromFile($filename, $mode);
62    }
63
64    #[Override]
65    public function streamFromResource(mixed $resource): Stream
66    {
67        if (is_resource($resource)) {
68            return $this->streamFactory->createStreamFromResource($resource);
69        }
70
71        throw new ValueError('Value must be a valid resource');
72    }
73
74    #[Override]
75    public function uploadedFile(
76        Stream $stream,
77        ?int $size = null,
78        int $error = \UPLOAD_ERR_OK,
79        ?string $clientFilename = null,
80        ?string $clientMediaType = null,
81    ): UploadedFile {
82        return $this->uploadedFileFactory->createUploadedFile(
83            $stream,
84            $size,
85            $error,
86            $clientFilename,
87            $clientMediaType,
88        );
89    }
90
91    #[Override]
92    public function uri(string $uri = ''): Uri
93    {
94        return $this->uriFactory->createUri($uri);
95    }
96
97    #[Override]
98    public function responseFactory(): ResponseFactory
99    {
100        return $this->responseFactory;
101    }
102
103    #[Override]
104    public function requestFactory(): RequestFactory
105    {
106        return $this->requestFactory;
107    }
108
109    #[Override]
110    public function streamFactory(): StreamFactory
111    {
112        return $this->streamFactory;
113    }
114
115    #[Override]
116    public function serverRequestFactory(): ServerRequestFactory
117    {
118        return $this->serverRequestFactory;
119    }
120
121    #[Override]
122    public function uploadedFileFactory(): UploadedFileFactory
123    {
124        return $this->uploadedFileFactory;
125    }
126
127    #[Override]
128    public function uriFactory(): UriFactory
129    {
130        return $this->uriFactory;
131    }
132}