Test Failed
Branch v0.2 (3b8de8)
by Freddie
02:14
created

Environment::loadDotEnvParameters()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Simplex;
4
5
use Dotenv\Dotenv;
6
7
class Environment
8
{
9
    const SIMPLEX_ENVIRONMENT_ENV_VAR = 'SIMPLEX_ENV';
10
    const COMPILE_CONTAINER_ENV_VAR = 'COMPILE_CONTAINER';
11
    const ENABLE_CACHE_ENV_VAR = 'ENABLE_CACHE';
12
    const DEBUG_MODE_ENV_VAR = 'DEBUG_MODE';
13
    const EDITOR_ENV_VAR = 'EDITOR';
14
15
    const DOTENV_FILE_NAME = '.env';
16
17
    const DEFAULT_ENVIRONMENT = 'dev';
18
    const COMPILE_CONTAINER_DEFAULT = '0';
19
    const DEFAULT_CACHE_DIRECTORY = 'cache';
20
21
    const REQUIRED_VARIABLE_DEFAULTS = [
22
        self::SIMPLEX_ENVIRONMENT_ENV_VAR => self::DEFAULT_ENVIRONMENT,
23
        self::COMPILE_CONTAINER_ENV_VAR => self::COMPILE_CONTAINER_DEFAULT,
24
    ];
25
26
    /** @var \SplFileInfo */
27
    private $configDirectory;
28
29
    /** @var bool */
30
    private $loaded = false;
31
32
    public function load(\SplFileInfo $configDirectory): void
33
    {
34
        $this->configDirectory = $configDirectory;
35
36
        $dotEnvFile = $this->getDotEnvFile();
37
38
        $this->loadDotEnvParameters($dotEnvFile);
39
40
        $this->ensureRequireVariablesLoaded();
41
42
        if (!defined('CACHE_DIRECTORY')) {
43
            define('CACHE_DIRECTORY', $this->getDefaultCacheDirectory());
44
        }
45
46
        $this->loaded = true;
47
    }
48
49
    private function getDotEnvFile(): \SplFileInfo
50
    {
51
        return new \SplFileInfo(
52
            $this->configDirectory->getPathname()
53
            . DIRECTORY_SEPARATOR
54
            . '..'
55
            . DIRECTORY_SEPARATOR
56
            . self::DOTENV_FILE_NAME
57
        );
58
    }
59
60
    private function loadDotEnvParameters(\SplFileInfo $dotEnvFile): void
61
    {
62
        if ($dotEnvFile->isReadable()) {
63
            $dotenv = new Dotenv($dotEnvFile->getPath());
64
            $dotenv->load();
65
        }
66
    }
67
68
    private function ensureRequireVariablesLoaded(): void
69
    {
70
        foreach (self::REQUIRED_VARIABLE_DEFAULTS as $variableName => $defaultValue) {
71
            if (empty(getenv($variableName))) {
72
                putenv($variableName . '=' . $defaultValue);
73
            }
74
        }
75
    }
76
77
    private function getDefaultCacheDirectory(): string
78
    {
79
        return $this->configDirectory->getPath()
80
            . DIRECTORY_SEPARATOR
81
            . self::DEFAULT_CACHE_DIRECTORY;
82
    }
83
84
    public function getSimplexEnvironment(): string
85
    {
86
        if (!$this->loaded) {
87
            throw new \LogicException('Environment variables not loaded');
88
        }
89
90
        return getenv(self::SIMPLEX_ENVIRONMENT_ENV_VAR);
91
    }
92
93
    public function getCompileContainer(): bool
94
    {
95
        if (!$this->loaded) {
96
            throw new \LogicException('Environment variables not loaded');
97
        }
98
99
        return (bool) getenv(self::COMPILE_CONTAINER_ENV_VAR);
100
    }
101
}
102