diff options
Diffstat (limited to 'Mustache/Source/FilesystemSource.php')
-rw-r--r-- | Mustache/Source/FilesystemSource.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/Mustache/Source/FilesystemSource.php b/Mustache/Source/FilesystemSource.php new file mode 100644 index 00000000..270f584e --- /dev/null +++ b/Mustache/Source/FilesystemSource.php @@ -0,0 +1,77 @@ +<?php + +/* + * This file is part of Mustache.php. + * + * (c) 2010-2017 Justin Hileman + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Mustache template Filesystem Source. + * + * This template Source uses stat() to generate the Source key, so that using + * pre-compiled templates doesn't require hitting the disk to read the source. + * It is more suitable for production use, and is used by default in the + * ProductionFilesystemLoader. + */ +class Mustache_Source_FilesystemSource implements Mustache_Source +{ + private $fileName; + private $statProps; + private $stat; + + /** + * Filesystem Source constructor. + * + * @param string $fileName + * @param array $statProps + */ + public function __construct($fileName, array $statProps) + { + $this->fileName = $fileName; + $this->statProps = $statProps; + } + + /** + * Get the Source key (used to generate the compiled class name). + * + * @throws Mustache_Exception_RuntimeException when a source file cannot be read + * + * @return string + */ + public function getKey() + { + $chunks = array( + 'fileName' => $this->fileName, + ); + + if (!empty($this->statProps)) { + if (!isset($this->stat)) { + $this->stat = @stat($this->fileName); + } + + if ($this->stat === false) { + throw new Mustache_Exception_RuntimeException(sprintf('Failed to read source file "%s".', $this->fileName)); + } + + foreach ($this->statProps as $prop) { + $chunks[$prop] = $this->stat[$prop]; + } + } + + return json_encode($chunks); + } + + /** + * Get the template Source. + * + * @return string + */ + public function getSource() + { + return file_get_contents($this->fileName); + } +} |