Deployer   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 132
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 81.25%

Importance

Changes 0
Metric Value
wmc 17
lcom 1
cbo 5
dl 0
loc 132
ccs 39
cts 48
cp 0.8125
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A getLogger() 0 4 1
A setLogger() 0 4 1
A getServersFromConfig() 0 10 2
A getStepsFromConfig() 0 9 2
A createServerFromConfig() 0 20 3
B createStepFromConfig() 0 23 5
A create() 0 19 3
1
<?php
2
3
namespace Anorgan\Deployer\Common;
4
5
use Anorgan\Deployer\Common\Server\AbstractServer;
6
use Anorgan\Deployer\Common\Server\Local;
7
use Anorgan\Deployer\Common\Server\Ssh;
8
use Psr\Log\LoggerInterface;
9
use Psr\Log\NullLogger;
10
11
class Deployer
12
{
13
    /**
14
     * @var AbstractServer[]
15
     */
16
    private $servers;
17
18
    /**
19
     * @var DeployStep[]
20
     */
21
    private $steps;
22
23
    /**
24
     * @var LoggerInterface
25
     */
26
    private $logger;
27
28
    /**
29
     * @return LoggerInterface
30
     */
31
    public function getLogger()
32
    {
33
        return $this->logger;
34
    }
35
36
    /**
37
     * @param LoggerInterface $logger
38
     */
39 2
    public function setLogger($logger)
40
    {
41 2
        $this->logger = $logger;
42 2
    }
43
44 2
    private function getServersFromConfig(array $config)
45
    {
46 2
        $servers = [];
47 2
        foreach ($config['servers'] as $title => $serverConfig) {
48 2
            $server          = $this->createServerFromConfig($title, $serverConfig);
49 2
            $servers[$title] = $server;
50
        }
51
52 2
        return $this->servers = $servers;
53
    }
54
55 2
    private function getStepsFromConfig(array $config, array $servers)
56
    {
57 2
        $steps = [];
58 2
        foreach ($config['steps'] as $title => $stepConfig) {
59 2
            $steps[$title] = $this->createStepFromConfig($title, $stepConfig, $servers);
60
        }
61
62 2
        return $this->steps = $steps;
63
    }
64
65
    /**
66
     * @param string $title
67
     * @param array  $config
68
     *
69
     * @return AbstractServer
70
     */
71 2
    private function createServerFromConfig($title, array $config)
72
    {
73 2
        $path = $config['path'];
74
75
        switch (true) {
76 2
            case isset($config['user']):
77 2
            case isset($config['host']):
78
                $server = new Ssh($title, $path, $config['host'], $config['user']);
79
80
                break;
81
82
            default:
83 2
                $server = new Local($title, $path);
84 2
                $server->setHostname($title);
85
86 2
                break;
87
        }
88
89 2
        return $server;
90
    }
91
92
    /**
93
     * @param string $title
94
     * @param array  $config
95
     * @param array  $allServers
96
     *
97
     * @return DeployStep
98
     */
99 2
    private function createStepFromConfig($title, array $config, array $allServers)
100
    {
101 2
        $commands = $config['commands'];
102
103 2
        if (!isset($config['servers']) || $config['servers'] === 'all') {
104
            // Run on all servers
105 2
            $servers = array_values($allServers);
106
        } else {
107
            $servers           = [];
108
            $config['servers'] = (array) $config['servers'];
109
            foreach ($config['servers'] as $serverTitle) {
110
                $servers[] = $allServers[$serverTitle];
111
            }
112
        }
113
114 2
        $step = new DeployStep($title, $commands, $servers);
115
116 2
        if (isset($config['mandatory'])) {
117
            $step->setIsMandatory((bool) $config['mandatory']);
118
        }
119
120 2
        return $step;
121
    }
122
123 3
    public static function create(array $config, LoggerInterface $logger = null)
124
    {
125 3
        if (empty($config)) {
126 1
            throw new \InvalidArgumentException('Error while creating Deploy Runner, config is empty');
127
        }
128
129 2
        if (null === $logger) {
130 2
            $logger = new NullLogger();
131
        }
132
133 2
        $self = new self();
134 2
        $self->setLogger($logger);
135
136 2
        $servers = $self->getServersFromConfig($config);
137
138 2
        $steps = $self->getStepsFromConfig($config, $servers);
139
140 2
        return new Runner(array_values($steps), $logger);
141
    }
142
}
143