BinaryResolver::getSystem()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
rs 10
cc 2
nc 2
nop 0
1
<?php
2
namespace Peridot\WebDriverManager\Binary;
3
4
use Peridot\WebDriverManager\Binary\Decompression\BinaryDecompressorInterface;
5
use Peridot\WebDriverManager\Binary\Decompression\ZipDecompressor;
6
use Peridot\WebDriverManager\Binary\Request\BinaryRequestInterface;
7
use Peridot\WebDriverManager\Binary\Request\StandardBinaryRequest;
8
use Peridot\WebDriverManager\Event\EventEmitterTrait;
9
use Peridot\WebDriverManager\OS\System;
10
use Peridot\WebDriverManager\OS\SystemInterface;
11
12
/**
13
 * BinaryResolver is responsible for all steps of resoling a binary - that is fetching, decompressing, and
14
 * determining OS requirements.
15
 *
16
 * @package Peridot\WebDriverManager\Binary
17
 */
18
class BinaryResolver implements
19
    BinaryRequestInterface,
20
    BinaryDecompressorInterface,
21
    BinaryResolverInterface
22
{
23
    use EventEmitterTrait;
24
25
    /**
26
     * @var BinaryRequestInterface
27
     */
28
    protected $request;
29
30
    /**
31
     * @var BinaryDecompressorInterface
32
     */
33
    protected $decompressor;
34
35
    /**
36
     * @var SystemInterface
37
     */
38
    protected $system;
39
40
    /**
41
     * @param BinaryRequestInterface $request
42
     * @param BinaryDecompressorInterface $decompressor
43
     * @param SystemInterface $system
44
     */
45
    public function __construct(
46
        BinaryRequestInterface $request = null,
47
        BinaryDecompressorInterface $decompressor = null,
48
        SystemInterface $system = null
49
    ) {
50
        $this->request = $request;
51
        $this->decompressor = $decompressor;
52
        $this->system = $system;
53
54
        $this->inherit(['progress', 'request.start', 'complete'], $this->getBinaryRequest());
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     *
60
     * @return BinaryRequestInterface|StandardBinaryRequest
61
     */
62
    public function getBinaryRequest()
63
    {
64
        if ($this->request === null) {
65
            $this->request = new StandardBinaryRequest();
66
        }
67
        return $this->request;
68
    }
69
70
    /**
71
     * {@inheritdoc}
72
     *
73
     * @return BinaryDecompressorInterface|ZipDecompressor
74
     */
75
    public function getBinaryDecompressor()
76
    {
77
        if ($this->decompressor === null) {
78
            $this->decompressor = new ZipDecompressor();
79
        }
80
        return $this->decompressor;
81
    }
82
83
    /**
84
     * {@inheritdoc}
85
     *
86
     * @return System|SystemInterface
87
     */
88
    public function getSystem()
89
    {
90
        if ($this->system === null) {
91
            $this->system = new System();
92
        }
93
94
        return $this->system;
95
    }
96
97
    /**
98
     * {@inheritdoc}
99
     *
100
     * @param string $compressedFilePath
101
     * @param string $directory
102
     * @return bool
103
     */
104
    public function extract($compressedFilePath, $directory)
105
    {
106
        return $this->getBinaryDecompressor()->extract($compressedFilePath, $directory);
107
    }
108
109
    /**
110
     * {@inheritdoc}
111
     *
112
     * @param string $url
113
     * @return string
114
     */
115
    public function request($url)
116
    {
117
        return $this->getBinaryRequest()->request($url);
118
    }
119
}
120