diff options
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php')
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php new file mode 100644 index 0000000..98c0f04 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php @@ -0,0 +1,104 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Repository\Adapter; + +final class ReplacingWriter implements WriterInterface +{ + /** + * The inner writer to use. + * + * @var \Dotenv\Repository\Adapter\WriterInterface + */ + private $writer; + + /** + * The inner reader to use. + * + * @var \Dotenv\Repository\Adapter\ReaderInterface + */ + private $reader; + + /** + * The record of seen variables. + * + * @var array<string,string> + */ + private $seen; + + /** + * Create a new replacement writer instance. + * + * @param \Dotenv\Repository\Adapter\WriterInterface $writer + * @param \Dotenv\Repository\Adapter\ReaderInterface $reader + * + * @return void + */ + public function __construct(WriterInterface $writer, ReaderInterface $reader) + { + $this->writer = $writer; + $this->reader = $reader; + $this->seen = []; + } + + /** + * Write to an environment variable, if possible. + * + * @param non-empty-string $name + * @param string $value + * + * @return bool + */ + public function write(string $name, string $value) + { + if ($this->exists($name)) { + return $this->writer->write($name, $value); + } + + // succeed if nothing to do + return true; + } + + /** + * Delete an environment variable, if possible. + * + * @param non-empty-string $name + * + * @return bool + */ + public function delete(string $name) + { + if ($this->exists($name)) { + return $this->writer->delete($name); + } + + // succeed if nothing to do + return true; + } + + /** + * Does the given environment variable exist. + * + * Returns true if it currently exists, or existed at any point in the past + * that we are aware of. + * + * @param non-empty-string $name + * + * @return bool + */ + private function exists(string $name) + { + if (isset($this->seen[$name])) { + return true; + } + + if ($this->reader->read($name)->isDefined()) { + $this->seen[$name] = ''; + + return true; + } + + return false; + } +} |
