-
Notifications
You must be signed in to change notification settings - Fork 422
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
64 changed files
with
932 additions
and
201 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,3 +3,4 @@ php: | |
- 5.2 | ||
- 5.3 | ||
- 5.4 | ||
- 5.5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Mustache.php. | ||
* | ||
* (c) 2013 Justin Hileman | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* Mustache Cache interface. | ||
* | ||
* Interface for caching and loading Mustache_Template classes | ||
* generated by the Mustache_Compiler. | ||
*/ | ||
interface Mustache_Cache | ||
{ | ||
/** | ||
* Load a compiled Mustache_Template class from cache. | ||
* | ||
* @param string $key | ||
* | ||
* @return boolean indicates successfully class load | ||
*/ | ||
public function load($key); | ||
|
||
/** | ||
* Cache and load a compiled Mustache_Template class. | ||
* | ||
* @param string $key | ||
* @param string $value | ||
* | ||
* @return void | ||
*/ | ||
public function cache($key, $value); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Mustache.php. | ||
* | ||
* (c) 2013 Justin Hileman | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* Abstract Mustache Cache class. | ||
* | ||
* Provides logging support to child implementations. | ||
* | ||
* @abstract | ||
*/ | ||
abstract class Mustache_Cache_AbstractCache implements Mustache_Cache | ||
{ | ||
private $logger = null; | ||
|
||
/** | ||
* Get the current logger instance. | ||
* | ||
* @return Mustache_Logger|Psr\Log\LoggerInterface | ||
*/ | ||
public function getLogger() | ||
{ | ||
return $this->logger; | ||
} | ||
|
||
/** | ||
* Set a logger instance. | ||
* | ||
* @param Mustache_Logger|Psr\Log\LoggerInterface $logger | ||
*/ | ||
public function setLogger($logger = null) | ||
{ | ||
if ($logger !== null && !($logger instanceof Mustache_Logger || is_a($logger, 'Psr\\Log\\LoggerInterface'))) { | ||
throw new Mustache_Exception_InvalidArgumentException('Expected an instance of Mustache_Logger or Psr\\Log\\LoggerInterface.'); | ||
} | ||
|
||
$this->logger = $logger; | ||
} | ||
|
||
/** | ||
* Add a log record if logging is enabled. | ||
* | ||
* @param integer $level The logging level | ||
* @param string $message The log message | ||
* @param array $context The log context | ||
*/ | ||
protected function log($level, $message, array $context = array()) | ||
{ | ||
if (isset($this->logger)) { | ||
$this->logger->log($level, $message, $context); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Mustache.php. | ||
* | ||
* (c) 2013 Justin Hileman | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* Mustache Cache filesystem implementation. | ||
* | ||
* A FilesystemCache instance caches Mustache Template classes from the filesystem by name: | ||
* | ||
* $cache = new Mustache_Cache_FilesystemCache(dirname(__FILE__).'/cache'); | ||
* $cache->cache($className, $compiledSource); | ||
* | ||
* The FilesystemCache benefits from any opcode caching that may be setup in your environment. So do that, k? | ||
*/ | ||
class Mustache_Cache_FilesystemCache extends Mustache_Cache_AbstractCache | ||
{ | ||
private $baseDir; | ||
private $fileMode; | ||
|
||
/** | ||
* Filesystem cache constructor. | ||
* | ||
* @param string $baseDir Directory for compiled templates. | ||
* @param int $fileMode Override default permissions for cache files. Defaults to using the system-defined umask. | ||
*/ | ||
public function __construct($baseDir, $fileMode = null) | ||
{ | ||
$this->baseDir = $baseDir; | ||
$this->fileMode = $fileMode; | ||
} | ||
|
||
/** | ||
* Load the class from cache using `require_once`. | ||
* | ||
* @param string $key | ||
* | ||
* @return boolean | ||
*/ | ||
public function load($key) | ||
{ | ||
$fileName = $this->getCacheFilename($key); | ||
if (!is_file($fileName)) { | ||
return false; | ||
} | ||
|
||
require_once $fileName; | ||
|
||
return true; | ||
} | ||
|
||
/** | ||
* Cache and load the compiled class | ||
* | ||
* @param string $key | ||
* @param string $value | ||
* | ||
* @return void | ||
*/ | ||
public function cache($key, $value) | ||
{ | ||
$fileName = $this->getCacheFilename($key); | ||
|
||
$this->log( | ||
Mustache_Logger::DEBUG, | ||
'Writing to template cache: "{fileName}"', | ||
array('fileName' => $fileName) | ||
); | ||
|
||
$this->writeFile($fileName, $value); | ||
$this->load($key); | ||
} | ||
|
||
/** | ||
* Build the cache filename. | ||
* Subclasses should override for custom cache directory structures. | ||
* | ||
* @param string $name | ||
* | ||
* @return string | ||
*/ | ||
protected function getCacheFilename($name) | ||
{ | ||
return sprintf('%s/%s.php', $this->baseDir, $name); | ||
} | ||
|
||
/** | ||
* Create cache directory | ||
* | ||
* @throws Mustache_Exception_RuntimeException If unable to create directory | ||
* | ||
* @param string $fileName | ||
* | ||
* @return string | ||
*/ | ||
private function buildDirectoryForFilename($fileName) | ||
{ | ||
$dirName = dirname($fileName); | ||
if (!is_dir($dirName)) { | ||
$this->log( | ||
Mustache_Logger::INFO, | ||
'Creating Mustache template cache directory: "{dirName}"', | ||
array('dirName' => $dirName) | ||
); | ||
|
||
@mkdir($dirName, 0777, true); | ||
if (!is_dir($dirName)) { | ||
throw new Mustache_Exception_RuntimeException(sprintf('Failed to create cache directory "%s".', $dirName)); | ||
} | ||
} | ||
|
||
return $dirName; | ||
} | ||
|
||
/** | ||
* Write cache file | ||
* | ||
* @throws Mustache_Exception_RuntimeException If unable to write file | ||
* | ||
* @param string $fileName | ||
* @param string $value | ||
* | ||
* @return void | ||
*/ | ||
private function writeFile($fileName, $value) | ||
{ | ||
$dirName = $this->buildDirectoryForFilename($fileName); | ||
|
||
$this->log( | ||
Mustache_Logger::DEBUG, | ||
'Caching compiled template to "{fileName}"', | ||
array('fileName' => $fileName) | ||
); | ||
|
||
$tempFile = tempnam($dirName, basename($fileName)); | ||
if (false !== @file_put_contents($tempFile, $value)) { | ||
if (@rename($tempFile, $fileName)) { | ||
$mode = isset($this->fileMode) ? $this->fileMode : (0666 & ~umask()); | ||
@chmod($fileName, $mode); | ||
|
||
return; | ||
} | ||
|
||
$this->log( | ||
Mustache_Logger::ERROR, | ||
'Unable to rename Mustache temp cache file: "{tempName}" -> "{fileName}"', | ||
array('tempName' => $tempFile, 'fileName' => $fileName) | ||
); | ||
} | ||
|
||
throw new Mustache_Exception_RuntimeException(sprintf('Failed to write cache file "%s".', $fileName)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Mustache.php. | ||
* | ||
* (c) 2013 Justin Hileman | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* Mustache Cache in-memory implementation. | ||
* | ||
* The in-memory cache is used for uncached lambda section templates. It's also useful during development, but is not | ||
* recommended for production use. | ||
*/ | ||
class Mustache_Cache_NoopCache extends Mustache_Cache_AbstractCache | ||
{ | ||
/** | ||
* Loads nothing. Move along. | ||
* | ||
* @param string $key | ||
* | ||
* @return boolean | ||
*/ | ||
public function load($key) | ||
{ | ||
return false; | ||
} | ||
|
||
/** | ||
* Loads the compiled Mustache Template class without caching. | ||
* | ||
* @param string $key | ||
* @param string $value | ||
* | ||
* @return void | ||
*/ | ||
public function cache($key, $value) | ||
{ | ||
$this->log( | ||
Mustache_Logger::WARNING, | ||
'Template cache disabled, evaluating "{className}" class at runtime', | ||
array('className' => $key) | ||
); | ||
eval('?>' . $value); | ||
} | ||
} |
Oops, something went wrong.