1<?php
2
3/*
4 * This file is part of the Assetic package, an OpenSky project.
5 *
6 * (c) 2010-2014 OpenSky Project Inc
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Assetic\Cache;
13
14/**
15 * A simple filesystem cache.
16 *
17 * @author Kris Wallsmith <kris.wallsmith@gmail.com>
18 */
19class FilesystemCache implements CacheInterface
20{
21    private $dir;
22
23    public function __construct($dir)
24    {
25        $this->dir = $dir;
26    }
27
28    public function has($key)
29    {
30        return file_exists($this->dir.'/'.$key);
31    }
32
33    public function get($key)
34    {
35        $path = $this->dir.'/'.$key;
36
37        if (!file_exists($path)) {
38            throw new \RuntimeException('There is no cached value for '.$key);
39        }
40
41        return file_get_contents($path);
42    }
43
44    public function set($key, $value)
45    {
46        if (!is_dir($this->dir) && false === @mkdir($this->dir, 0777, true)) {
47            throw new \RuntimeException('Unable to create directory '.$this->dir);
48        }
49
50        $path = $this->dir.'/'.$key;
51
52        if (false === @file_put_contents($path, $value)) {
53            throw new \RuntimeException('Unable to write file '.$path);
54        }
55    }
56
57    public function remove($key)
58    {
59        $path = $this->dir.'/'.$key;
60
61        if (file_exists($path) && false === @unlink($path)) {
62            throw new \RuntimeException('Unable to remove file '.$path);
63        }
64    }
65}
66