-
Notifications
You must be signed in to change notification settings - Fork 193
/
Copy pathConfigSource.php
80 lines (67 loc) · 2.18 KB
/
ConfigSource.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\CloudDocker\Config\Source;
use Illuminate\Config\Repository;
use Magento\CloudDocker\Filesystem\DirectoryList;
use Magento\CloudDocker\Filesystem\Filesystem;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;
/**
* The cloud-docker.yml config
*/
class ConfigSource implements SourceInterface
{
/**
* @var DirectoryList
*/
private $directoryList;
/**
* @var Filesystem
*/
private $filesystem;
/**
* @param DirectoryList $directoryList
* @param Filesystem $filesystem
*/
public function __construct(DirectoryList $directoryList, Filesystem $filesystem)
{
$this->directoryList = $directoryList;
$this->filesystem = $filesystem;
}
/**
* @inheritDoc
*/
public function read(): Repository
{
$configFile = $this->directoryList->getMagentoRoot() . '/.magento.docker.yml';
if (!$this->filesystem->exists($configFile)) {
$configFile = $this->directoryList->getMagentoRoot() . '/.magento.docker.yaml';
}
$repository = new Repository();
try {
if ($this->filesystem->exists($configFile)) {
$config = Yaml::parseFile($configFile);
if (!isset($config['name'])) {
throw new SourceException('Name could not be parsed.');
}
/**
* Enable services which were added from the file by default
*/
if (!empty($config[self::SERVICES])) {
foreach (array_keys($config[self::SERVICES]) as $service) {
$config[self::SERVICES][$service]['enabled'] = $config[self::SERVICES][$service]['enabled']
?? true;
}
}
$repository->set($config);
}
} catch (ParseException $exception) {
throw new SourceException($exception->getMessage(), $exception->getCode(), $exception);
}
return $repository;
}
}