StoreBuilder.php 2.12 KB
Newer Older
冯超鹏's avatar
冯超鹏 committed
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
<?php

namespace Dotenv\Store;

use Dotenv\Store\File\Paths;

class StoreBuilder
{
    /**
     * The paths to search within.
     *
     * @var string[]
     */
    private $paths;

    /**
     * The file names to search for.
     *
     * @var string[]|null
     */
    private $names;

    /**
     * Should file loading short circuit?
     *
     * @var bool
     */
    protected $shortCircuit;

    /**
     * Create a new store builder instance.
     *
     * @param string[]      $paths
     * @param string[]|null $names
     * @param bool          $shortCircuit
     *
     * @return void
     */
    private function __construct(array $paths = [], array $names = null, $shortCircuit = false)
    {
        $this->paths = $paths;
        $this->names = $names;
        $this->shortCircuit = $shortCircuit;
    }

    /**
     * Create a new store builder instance.
     *
     * @return \Dotenv\Store\StoreBuilder
     */
    public static function create()
    {
        return new self();
    }

    /**
     * Creates a store builder with the given paths.
     *
     * @param string|string[] $paths
     *
     * @return \Dotenv\Store\StoreBuilder
     */
    public function withPaths($paths)
    {
        return new self((array) $paths, $this->names, $this->shortCircuit);
    }

    /**
     * Creates a store builder with the given names.
     *
     * @param string|string[]|null $names
     *
     * @return \Dotenv\Store\StoreBuilder
     */
    public function withNames($names = null)
    {
        return new self($this->paths, $names === null ? null : (array) $names, $this->shortCircuit);
    }

    /**
     * Creates a store builder with short circuit mode enabled.
     *
     * @return \Dotenv\Store\StoreBuilder
     */
    public function shortCircuit()
    {
        return new self($this->paths, $this->names, true);
    }

    /**
     * Creates a new store instance.
     *
     * @return \Dotenv\Store\StoreInterface
     */
    public function make()
    {
        return new FileStore(
            Paths::filePaths($this->paths, $this->names === null ? ['.env'] : $this->names),
            $this->shortCircuit
        );
    }
}