vendor/assetic/src/Assetic/Cache/ConfigCache.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/assetic/src/Assetic/Cache/ConfigCache.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of the Assetic package, an OpenSky project.
+ *
+ * (c) 2010-2011 OpenSky Project Inc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Assetic\Cache;
+
+/**
+ * A config cache stores values using var_export() and include.
+ *
+ * @author Kris Wallsmith <kris.wallsmith@gmail.com>
+ */
+class ConfigCache
+{
+    private $dir;
+
+    /**
+     * Construct.
+     *
+     * @param string $dir The cache directory
+     */
+    public function __construct($dir)
+    {
+        $this->dir = $dir;
+    }
+
+    /**
+     * Checks of the cache has a file.
+     *
+     * @param string $resource A cache key
+     *
+     * @return Boolean True if a file exists
+     */
+    public function has($resource)
+    {
+        return file_exists($this->getSourcePath($resource));
+    }
+
+    /**
+     * Writes a value to a file.
+     *
+     * @param string $resource A cache key
+     * @param mixed  $value    A value to cache
+     */
+    public function set($resource, $value)
+    {
+        $path = $this->getSourcePath($resource);
+
+        if (!is_dir($dir = dirname($path)) && false === @mkdir($dir, 0777, true)) {
+            // @codeCoverageIgnoreStart
+            throw new \RuntimeException('Unable to create directory '.$dir);
+            // @codeCoverageIgnoreEnd
+        }
+
+        if (false === @file_put_contents($path, sprintf("<?php\n\n// $resource\nreturn %s;\n", var_export($value, true)))) {
+            // @codeCoverageIgnoreStart
+            throw new \RuntimeException('Unable to write file '.$path);
+            // @codeCoverageIgnoreEnd
+        }
+    }
+
+    /**
+     * Loads and returns the value for the supplied cache key.
+     *
+     * @param string $resource A cache key
+     *
+     * @return mixed The cached value
+     */
+    public function get($resource)
+    {
+        $path = $this->getSourcePath($resource);
+
+        if (!file_exists($path)) {
+            throw new \RuntimeException('There is no cached value for '.$resource);
+        }
+
+        return include $path;
+    }
+
+    /**
+     * Returns a timestamp for when the cache was created.
+     *
+     * @param string $resource A cache key
+     *
+     * @return integer A UNIX timestamp
+     */
+    public function getTimestamp($resource)
+    {
+        $path = $this->getSourcePath($resource);
+
+        if (!file_exists($path)) {
+            throw new \RuntimeException('There is no cached value for '.$resource);
+        }
+
+        if (false === $mtime = @filemtime($path)) {
+            // @codeCoverageIgnoreStart
+            throw new \RuntimeException('Unable to determine file mtime for '.$path);
+            // @codeCoverageIgnoreEnd
+        }
+
+        return $mtime;
+    }
+
+    /**
+     * Returns the path where the file corresponding to the supplied cache key can be included from.
+     *
+     * @param string $resource A cache key
+     *
+     * @return string A file path
+     */
+    private function getSourcePath($resource)
+    {
+        $key = md5($resource);
+
+        return $this->dir.'/'.$key[0].'/'.$key.'.php';
+    }
+}