Updater::update()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 9
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Salah3id\Domains\Process;
4
5
use Salah3id\Domains\Domain;
6
7
class Updater extends Runner
8
{
9
    /**
10
     * Update the dependencies for the specified domain by given the domain name.
11
     *
12
     * @param string $domain
13
     */
14
    public function update($domain)
15
    {
16
        $domain = $this->domain->findOrFail($domain);
17
18
        chdir(base_path());
19
20
        $this->installRequires($domain);
21
        $this->installDevRequires($domain);
22
        $this->copyScriptsToMainComposerJson($domain);
23
    }
24
25
    /**
26
     * Check if composer should output anything.
27
     *
28
     * @return string
29
     */
30
    private function isComposerSilenced()
31
    {
32
        return config('domains.composer.composer-output') === false ? ' --quiet' : '';
33
    }
34
35
    /**
36
     * @param Domain $domain
37
     */
38
    private function installRequires(Domain $domain)
39
    {
40
        $packages = $domain->getComposerAttr('require', []);
41
42
        $concatenatedPackages = '';
43
        foreach ($packages as $name => $version) {
44
            $concatenatedPackages .= "\"{$name}:{$version}\" ";
45
        }
46
47
        if (!empty($concatenatedPackages)) {
48
            $this->run("composer require {$concatenatedPackages}{$this->isComposerSilenced()}");
49
        }
50
    }
51
52
    /**
53
     * @param Domain $domain
54
     */
55
    private function installDevRequires(Domain $domain)
56
    {
57
        $devPackages = $domain->getComposerAttr('require-dev', []);
58
59
        $concatenatedPackages = '';
60
        foreach ($devPackages as $name => $version) {
61
            $concatenatedPackages .= "\"{$name}:{$version}\" ";
62
        }
63
64
        if (!empty($concatenatedPackages)) {
65
            $this->run("composer require --dev {$concatenatedPackages}{$this->isComposerSilenced()}");
66
        }
67
    }
68
69
    /**
70
     * @param Domain $domain
71
     */
72
    private function copyScriptsToMainComposerJson(Domain $domain)
73
    {
74
        $scripts = $domain->getComposerAttr('scripts', []);
75
76
        $composer = json_decode(file_get_contents(base_path('composer.json')), true);
77
78
        foreach ($scripts as $key => $script) {
79
            if (array_key_exists($key, $composer['scripts'])) {
80
                $composer['scripts'][$key] = array_unique(array_merge($composer['scripts'][$key], $script));
81
82
                continue;
83
            }
84
            $composer['scripts'] = array_merge($composer['scripts'], [$key => $script]);
85
        }
86
87
        file_put_contents(base_path('composer.json'), json_encode($composer, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
88
    }
89
}
90