X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fbehat%2Fgherkin%2Fsrc%2FBehat%2FGherkin%2FCache%2FFileCache.php;fp=vendor%2Fbehat%2Fgherkin%2Fsrc%2FBehat%2FGherkin%2FCache%2FFileCache.php;h=17a206ac7b139ecc476ed6fcb495324c8b0c438a;hp=0000000000000000000000000000000000000000;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68 diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php new file mode 100644 index 000000000..17a206ac7 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php @@ -0,0 +1,109 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Behat\Gherkin\Cache; + +use Behat\Gherkin\Exception\CacheException; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Gherkin; + +/** + * File cache. + * Caches feature into a file. + * + * @author Konstantin Kudryashov + */ +class FileCache implements CacheInterface +{ + private $path; + + /** + * Initializes file cache. + * + * @param string $path Path to the folder where to store caches. + * + * @throws CacheException + */ + public function __construct($path) + { + $this->path = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'v'.Gherkin::VERSION; + + if (!is_dir($this->path)) { + @mkdir($this->path, 0777, true); + } + + if (!is_writeable($this->path)) { + throw new CacheException(sprintf('Cache path "%s" is not writeable. Check your filesystem permissions or disable Gherkin file cache.', $this->path)); + } + } + + /** + * Checks that cache for feature exists and is fresh. + * + * @param string $path Feature path + * @param integer $timestamp The last time feature was updated + * + * @return Boolean + */ + public function isFresh($path, $timestamp) + { + $cachePath = $this->getCachePathFor($path); + + if (!file_exists($cachePath)) { + return false; + } + + return filemtime($cachePath) > $timestamp; + } + + /** + * Reads feature cache from path. + * + * @param string $path Feature path + * + * @return FeatureNode + * + * @throws CacheException + */ + public function read($path) + { + $cachePath = $this->getCachePathFor($path); + $feature = unserialize(file_get_contents($cachePath)); + + if (!$feature instanceof FeatureNode) { + throw new CacheException(sprintf('Can not load cache for a feature "%s" from "%s".', $path, $cachePath )); + } + + return $feature; + } + + /** + * Caches feature node. + * + * @param string $path Feature path + * @param FeatureNode $feature Feature instance + */ + public function write($path, FeatureNode $feature) + { + file_put_contents($this->getCachePathFor($path), serialize($feature)); + } + + /** + * Returns feature cache file path from features path. + * + * @param string $path Feature path + * + * @return string + */ + protected function getCachePathFor($path) + { + return $this->path.'/'.md5($path).'.feature.cache'; + } +}