summaryrefslogtreecommitdiff
path: root/vendor/vlucas/phpdotenv/src/Validator.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Validator.php')
-rw-r--r--vendor/vlucas/phpdotenv/src/Validator.php209
1 files changed, 209 insertions, 0 deletions
diff --git a/vendor/vlucas/phpdotenv/src/Validator.php b/vendor/vlucas/phpdotenv/src/Validator.php
new file mode 100644
index 0000000..0c04ab6
--- /dev/null
+++ b/vendor/vlucas/phpdotenv/src/Validator.php
@@ -0,0 +1,209 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Dotenv;
+
+use Dotenv\Exception\ValidationException;
+use Dotenv\Repository\RepositoryInterface;
+use Dotenv\Util\Regex;
+use Dotenv\Util\Str;
+
+class Validator
+{
+ /**
+ * The environment repository instance.
+ *
+ * @var \Dotenv\Repository\RepositoryInterface
+ */
+ private $repository;
+
+ /**
+ * The variables to validate.
+ *
+ * @var string[]
+ */
+ private $variables;
+
+ /**
+ * Create a new validator instance.
+ *
+ * @param \Dotenv\Repository\RepositoryInterface $repository
+ * @param string[] $variables
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return void
+ */
+ public function __construct(RepositoryInterface $repository, array $variables)
+ {
+ $this->repository = $repository;
+ $this->variables = $variables;
+ }
+
+ /**
+ * Assert that each variable is present.
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function required()
+ {
+ return $this->assert(
+ static function (?string $value) {
+ return $value !== null;
+ },
+ 'is missing'
+ );
+ }
+
+ /**
+ * Assert that each variable is not empty.
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function notEmpty()
+ {
+ return $this->assertNullable(
+ static function (string $value) {
+ return Str::len(\trim($value)) > 0;
+ },
+ 'is empty'
+ );
+ }
+
+ /**
+ * Assert that each specified variable is an integer.
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function isInteger()
+ {
+ return $this->assertNullable(
+ static function (string $value) {
+ return \ctype_digit($value);
+ },
+ 'is not an integer'
+ );
+ }
+
+ /**
+ * Assert that each specified variable is a boolean.
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function isBoolean()
+ {
+ return $this->assertNullable(
+ static function (string $value) {
+ if ($value === '') {
+ return false;
+ }
+
+ return \filter_var($value, \FILTER_VALIDATE_BOOLEAN, \FILTER_NULL_ON_FAILURE) !== null;
+ },
+ 'is not a boolean'
+ );
+ }
+
+ /**
+ * Assert that each variable is amongst the given choices.
+ *
+ * @param string[] $choices
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function allowedValues(array $choices)
+ {
+ return $this->assertNullable(
+ static function (string $value) use ($choices) {
+ return \in_array($value, $choices, true);
+ },
+ \sprintf('is not one of [%s]', \implode(', ', $choices))
+ );
+ }
+
+ /**
+ * Assert that each variable matches the given regular expression.
+ *
+ * @param string $regex
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function allowedRegexValues(string $regex)
+ {
+ return $this->assertNullable(
+ static function (string $value) use ($regex) {
+ return Regex::matches($regex, $value)->success()->getOrElse(false);
+ },
+ \sprintf('does not match "%s"', $regex)
+ );
+ }
+
+ /**
+ * Assert that the callback returns true for each variable.
+ *
+ * @param callable(?string):bool $callback
+ * @param string $message
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function assert(callable $callback, string $message)
+ {
+ $failing = [];
+
+ foreach ($this->variables as $variable) {
+ if ($callback($this->repository->get($variable)) === false) {
+ $failing[] = \sprintf('%s %s', $variable, $message);
+ }
+ }
+
+ if (\count($failing) > 0) {
+ throw new ValidationException(\sprintf(
+ 'One or more environment variables failed assertions: %s.',
+ \implode(', ', $failing)
+ ));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Assert that the callback returns true for each variable.
+ *
+ * Skip checking null variable values.
+ *
+ * @param callable(string):bool $callback
+ * @param string $message
+ *
+ * @throws \Dotenv\Exception\ValidationException
+ *
+ * @return \Dotenv\Validator
+ */
+ public function assertNullable(callable $callback, string $message)
+ {
+ return $this->assert(
+ static function (?string $value) use ($callback) {
+ if ($value === null) {
+ return true;
+ }
+
+ return $callback($value);
+ },
+ $message
+ );
+ }
+}