Completed
Push — master ( 8bc2ca...1a19ee )
by Harry
03:41
created

CompressionFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 9.6666
cc 1
eloc 5
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Graze\DataFile\Modify\Compress;
4
5
use Graze\DataFile\Modify\Exception\InvalidCompressionTypeException;
6
7
class CompressionFactory
8
{
9
    const TYPE_NONE    = 'none';
10
    const TYPE_UNKNOWN = 'unknown';
11
12
    /**
13
     * @var CompressorInterface[]
14
     */
15
    private $compressors;
16
17
    /**
18
     * @var DeCompressorInterface[]
19
     */
20
    private $deCompressors;
21
22 14
    public function __construct()
23
    {
24
        // build known compression types
25 14
        $gzip = new Gzip();
26 14
        $zip = new Zip();
27
28 14
        $this->addCompressor($gzip);
29 14
        $this->addCompressor($zip);
30 14
    }
31
32
    /**
33
     * @param CompressionTypeInterface $type
34
     *
35
     * @return static
36
     */
37 14
    public function addCompressor(CompressionTypeInterface $type)
38
    {
39 14
        if ($type instanceof CompressorInterface) {
40 14
            $this->compressors[$type->getName()] = $type;
41 14
        }
42 14
        if ($type instanceof DeCompressorInterface) {
43 14
            $this->deCompressors[$type->getName()] = $type;
44 14
        }
45
46 14
        return $this;
47
    }
48
49
    /**
50
     * Check if the specified $compression is valid or not
51
     *
52
     * @param string $compression
53
     *
54
     * @return bool
55
     */
56 3
    public function isCompression($compression)
57
    {
58 3
        return isset($this->compressors[$compression]);
59
    }
60
61
    /**
62
     * @param string $compression
63
     *
64
     * @return CompressorInterface
65
     * @throws InvalidCompressionTypeException
66
     */
67 5
    public function getCompressor($compression)
68
    {
69 5
        if (isset($this->compressors[$compression])) {
70 2
            return $this->compressors[$compression];
71
        } else {
72 3
            throw new InvalidCompressionTypeException($compression);
73
        }
74
    }
75
76
    /**
77
     * @param string $compression
78
     *
79
     * @return DeCompressorInterface
80
     * @throws InvalidCompressionTypeException
81
     */
82 7
    public function getDeCompressor($compression)
83
    {
84 7
        if (isset($this->deCompressors[$compression])) {
85 4
            return $this->deCompressors[$compression];
86
        } else {
87 3
            throw new InvalidCompressionTypeException($compression);
88
        }
89
    }
90
}
91