Config::__get()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php namespace Magestead\Helper;
2
3
use Magestead\Exceptions\MissingComposerHomeException;
4
use Magestead\Exceptions\MissingConfigFileException;
5
use Symfony\Component\Console\Output\OutputInterface;
6
use Symfony\Component\Yaml\Exception\ParseException;
7
use Symfony\Component\Yaml\Parser;
8
9
class Config
10
{
11
    protected $_config;
12
13
    protected $_projectPath;
14
15
    /**
16
     * @var OutputInterface
17
     */
18
    private $output;
19
20
    /**
21
     * Config constructor.
22
     * @param OutputInterface $output
23
     */
24
    public function __construct(OutputInterface $output)
25
    {
26
        $this->_projectPath = getcwd();
27
        $this->output = $output;
28
    }
29
30
    /**
31
     * @param $name
32
     * @return mixed
33
     */
34
    function __get($name)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
35
    {
36
        $this->_config = $this->getConfigFile($this->output);
37
        return $this->_config['magestead']['apps']['mba_12345'][$name];
38
    }
39
40
    /**
41
     * @param OutputInterface $output
42
     * @return bool|mixed
43
     */
44
    protected function getConfigFile(OutputInterface $output)
45
    {
46
        $config = new Parser();
47
        try {
48
            return $config->parse($this->readConfigFile());
49
        } catch (ParseException $e) {
50
            $output->writeln('<error>Unable to parse the config file</error>');
51
        }
52
53
        return false;
54
    }
55
56
    /**
57
     * @return string
58
     * @throws MissingConfigFileException
59
     */
60
    protected function readConfigFile()
61
    {
62
        if (!file_exists($this->_projectPath . '/magestead.yaml')) {
63
            throw new MissingConfigFileException('No config file was found, are you in the project root?');
64
        }
65
66
        return file_get_contents($this->_projectPath . '/magestead.yaml');
67
    }
68
69
    /**
70
     * Find the composer home directory on non Mac environments (experimental)
71
     *
72
     * @return string
73
     * @throws MissingComposerHomeException
74
     */
75
    public function getComposerHomeDir()
76
    {
77
        $composerConfig = shell_exec('composer config --list --global | grep home');
78
79
        if (is_null($composerConfig)) {
80
            throw new MissingComposerHomeException('Composer home directory is not found. Do you have it installed?');
81
        }
82
83
        return trim(str_replace('[home] ', '', $composerConfig));
84
    }
85
}
86