-
Notifications
You must be signed in to change notification settings - Fork 2k
Expand file tree
/
Copy pathEnvironmentDetector.php
More file actions
81 lines (68 loc) · 2.19 KB
/
EnvironmentDetector.php
File metadata and controls
81 lines (68 loc) · 2.19 KB
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
81
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <[email protected]>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter;
use CodeIgniter\Exceptions\InvalidArgumentException;
/**
* Provides a simple way to determine the current environment of the application.
*
* Primarily intended as a mockable seam for testing environment-specific code
* paths that resolve this class via the `envdetector` service.
*
* It does not redefine the `ENVIRONMENT` constant. It affects only code paths
* that resolve and use this class, while code that still reads `ENVIRONMENT`
* directly keeps its current behavior.
*
* For custom environment names beyond the built-in production/development/testing,
* use {@see self::is()}.
*
* @see \CodeIgniter\EnvironmentDetectorTest
*/
final readonly class EnvironmentDetector
{
private string $environment;
/**
* @param non-empty-string|null $environment The environment to use, or null to
* fall back to the `ENVIRONMENT` constant.
*/
public function __construct(?string $environment = null)
{
$environment = $environment !== null ? trim($environment) : ENVIRONMENT;
if ($environment === '') {
throw new InvalidArgumentException('Environment cannot be an empty string.');
}
$this->environment = $environment;
}
public function get(): string
{
return $this->environment;
}
/**
* Checks if the current environment matches any of the given environments.
*
* @param string ...$environments One or more environment names to check against.
*/
public function is(string ...$environments): bool
{
return in_array($this->environment, $environments, true);
}
public function isProduction(): bool
{
return $this->is('production');
}
public function isDevelopment(): bool
{
return $this->is('development');
}
public function isTesting(): bool
{
return $this->is('testing');
}
}