Passed
Push — master ( c3e4c9...e46620 )
by Aleksei
02:36 queued 45s
created

SmartStreamFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
dl 0
loc 34
ccs 17
cts 17
cp 1
rs 10
c 1
b 0
f 0
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A createStream() 0 18 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace roxblnfk\SmartStream;
6
7
use Psr\Http\Message\RequestInterface;
8
use Psr\Http\Message\StreamFactoryInterface;
9
use Psr\Http\Message\StreamInterface;
10
use roxblnfk\SmartStream\Data\DataBucket;
11
use roxblnfk\SmartStream\Stream\BucketStream;
12
use roxblnfk\SmartStream\Stream\GeneratorStream;
13
14
final class SmartStreamFactory
15
{
16
    private StreamFactoryInterface $defaultFactory;
17
    private ConverterMatcherInterface $converterMatcher;
18
    private string $defaultBucketClass;
19
20 7
    public function __construct(
21
        StreamFactoryInterface $defaultFactory,
22
        ConverterMatcherInterface $converterMatcher,
23
        string $defaultBucketClass = DataBucket::class
24
    ) {
25 7
        $this->defaultFactory = $defaultFactory;
26 7
        $this->converterMatcher = $converterMatcher;
27 7
        $this->defaultBucketClass = $defaultBucketClass;
28 7
    }
29
30 7
    public function createStream($data, ?RequestInterface $request = null): StreamInterface
31
    {
32 7
        if (is_string($data)) {
33 1
            return $this->defaultFactory->createStream($data);
34
        }
35 6
        if ($data instanceof \SplFileInfo) {
36 1
            return $this->defaultFactory->createStreamFromFile($data->getPathname());
37
        }
38 5
        if (is_resource($data)) {
39 1
            return $this->defaultFactory->createStreamFromResource($data);
40
        }
41 4
        if ($data instanceof \Generator) {
42 1
            return new GeneratorStream($data);
43
        }
44 3
        if ($data instanceof DataBucket) {
45 1
            return new BucketStream($this->converterMatcher->withRequest($request), $data);
46
        }
47 2
        return new BucketStream($this->converterMatcher->withRequest($request), new $this->defaultBucketClass($data));
48
    }
49
}
50