Updater::getStrategy()   B
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 26
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 26
ccs 0
cts 17
cp 0
rs 8.8571
cc 3
eloc 13
nc 3
nop 0
crap 12
1
<?php
2
/**
3
 * @package: marx/php-self-updater
4
 *
5
 * @author:  msiebeneicher
6
 * @since:   2015-12-27
7
 *
8
 */
9
10
namespace PSU;
11
12
use PSU\Exception\StrategyException;
13
use PSU\HttpClient\HttpClientFactory;
14
use PSU\Strategy\GithubStrategy;
15
use PSU\Strategy\StrategyInterface;
16
17
18
class Updater
19
{
20
    const STRATEGY_GITHUB_API = 1;
21
22
    /**
23
     * @var int
24
     */
25
    private $defaultStrategy = self::STRATEGY_GITHUB_API;
26
27
    /**
28
     * @var StrategyInterface
29
     */
30
    private $strategy;
31
32
    /**
33
     * @var string
34
     */
35
    private $pharFile = '';
36
37
    /**
38
     * @var string
39
     */
40
    private $homeDir = '';
41
42
    /**
43
     * @param string $pharFile
44
     * @param string $homeDir
45
     */
46
    public function __construct($pharFile, $homeDir)
47
    {
48
        if (!is_dir($homeDir))
49
        {
50
            throw new \InvalidArgumentException(
51
                sprintf('Can\'t find directory "%s"', $homeDir)
52
            );
53
        }
54
55
        $this->pharFile = $pharFile;
56
        $this->homeDir = $homeDir;
57
    }
58
59
    /**
60
     * @param StrategyInterface $strategy
61
     */
62
    public function setStrategy(StrategyInterface $strategy)
63
    {
64
        $this->strategy = $strategy;
65
    }
66
67
    /**
68
     * return StrategyInterface
69
     */
70
    public function getStrategy()
71
    {
72
        if (!is_null($this->strategy))
73
        {
74
            return $this->strategy;
75
        }
76
77
        if (self::STRATEGY_GITHUB_API == $this->defaultStrategy)
78
        {
79
            $this->strategy = new GithubStrategy(
80
                new HttpClientFactory()
81
            );
82
83
            $this->strategy->setPharFile($this->pharFile);
84
85
            return $this->strategy;
86
        }
87
88
        throw new StrategyException(
89
            sprintf(
90
                'Unknown default strategy "%i"',
91
                $this->defaultStrategy
92
            ),
93
            StrategyException::ERROR_UNKNOWN_STRATEGY
94
        );
95
    }
96
97
    /**
98
     * @return string
99
     * @throws StrategyException
100
     */
101
    public function getLatestReleaseVersion()
102
    {
103
        return $this->getStrategy()->getLatestVersion();
104
    }
105
106
    /**
107
     * @param $localVersion
108
     * @return bool
109
     */
110
    public function hasToUpdate($localVersion)
111
    {
112
        return (-1 == version_compare($localVersion, $this->getLatestReleaseVersion()));
113
    }
114
115
    /**
116
     * @throws StrategyException
117
     */
118
    public function downloadLatestVersion()
119
    {
120
        $download = $this->getStrategy()->downloadLatestVersion();
121
        // ...
122
        return $download;
123
    }
124
125
    /**
126
     *
127
     */
128
    public function updateToLatestVersion()
129
    {
130
        //$this->downloadLatestVersion();
0 ignored issues
show
Unused Code Comprehensibility introduced by
84% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
131
        // move current phar as rollback
132
        // move tmp file to current phar
133
134
        // return result
135
    }
136
}