StreamFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 2
dl 0
loc 30
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createStream() 0 4 1
A createStreamFromResource() 0 4 1
A createStreamFromFile() 0 13 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Furious\Psr7\Factory;
6
7
use Furious\Psr7\Exception\InvalidArgumentException;
8
use Furious\Psr7\Exception\RuntimeException;
9
use Furious\Psr7\Stream;
10
use Psr\Http\Message\StreamFactoryInterface;
11
use Psr\Http\Message\StreamInterface;
12
use function fopen;
13
use function in_array;
14
15
final class StreamFactory implements StreamFactoryInterface
16
{
17
    private const MODES = [
18
        'r', 'w', 'a', 'x', 'c'
19
    ];
20
21
    public function createStream(string $content = ''): StreamInterface
22
    {
23
        return Stream::new($content);
24
    }
25
26
    public function createStreamFromResource($resource): StreamInterface
27
    {
28
        return Stream::new($resource);
29
    }
30
31
    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface
32
    {
33
        $resource = @fopen($filename, $mode);
34
        if (false === $resource) {
35
            if ('' === $mode or false === in_array($mode[0], self::MODES)) {
36
                throw new InvalidArgumentException('The mode ' . $mode . ' is invalid.');
37
            }
38
39
            throw new RuntimeException('The file ' . $filename . ' cannot be opened.');
40
        }
41
42
        return Stream::new($resource);
43
    }
44
}