class AssetCache

Caches an asset to avoid the cost of loading and dumping.

@author Kris Wallsmith <kris.wallsmith@gmail.com>

Hierarchy

Expanded class hierarchy of AssetCache

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Asset/AssetCache.php, line 23

Namespace

Assetic\Asset
View source
class AssetCache implements AssetInterface {
  private $asset;
  private $cache;
  public function __construct(AssetInterface $asset, CacheInterface $cache) {
    $this->asset = $asset;
    $this->cache = $cache;
  }
  public function ensureFilter(FilterInterface $filter) {
    $this->asset
      ->ensureFilter($filter);
  }
  public function getFilters() {
    return $this->asset
      ->getFilters();
  }
  public function clearFilters() {
    $this->asset
      ->clearFilters();
  }
  public function load(FilterInterface $additionalFilter = null) {
    $cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'load');
    if ($this->cache
      ->has($cacheKey)) {
      $this->asset
        ->setContent($this->cache
        ->get($cacheKey));
      return;
    }
    $this->asset
      ->load($additionalFilter);
    $this->cache
      ->set($cacheKey, $this->asset
      ->getContent());
  }
  public function dump(FilterInterface $additionalFilter = null) {
    $cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'dump');
    if ($this->cache
      ->has($cacheKey)) {
      return $this->cache
        ->get($cacheKey);
    }
    $content = $this->asset
      ->dump($additionalFilter);
    $this->cache
      ->set($cacheKey, $content);
    return $content;
  }
  public function getContent() {
    return $this->asset
      ->getContent();
  }
  public function setContent($content) {
    $this->asset
      ->setContent($content);
  }
  public function getSourceRoot() {
    return $this->asset
      ->getSourceRoot();
  }
  public function getSourcePath() {
    return $this->asset
      ->getSourcePath();
  }
  public function getTargetPath() {
    return $this->asset
      ->getTargetPath();
  }
  public function setTargetPath($targetPath) {
    $this->asset
      ->setTargetPath($targetPath);
  }
  public function getLastModified() {
    return $this->asset
      ->getLastModified();
  }
  public function getVars() {
    return $this->asset
      ->getVars();
  }
  public function setValues(array $values) {
    $this->asset
      ->setValues($values);
  }
  public function getValues() {
    return $this->asset
      ->getValues();
  }

  /**
   * Returns a cache key for the current asset.
   *
   * The key is composed of everything but an asset's content:
   *
   *  * source root
   *  * source path
   *  * target url
   *  * last modified
   *  * filters
   *
   * @param AssetInterface  $asset            The asset
   * @param FilterInterface $additionalFilter Any additional filter being applied
   * @param string          $salt             Salt for the key
   *
   * @return string A key for identifying the current asset
   */
  private static function getCacheKey(AssetInterface $asset, FilterInterface $additionalFilter = null, $salt = '') {
    if ($additionalFilter) {
      $asset = clone $asset;
      $asset
        ->ensureFilter($additionalFilter);
    }
    $cacheKey = $asset
      ->getSourceRoot();
    $cacheKey .= $asset
      ->getSourcePath();
    $cacheKey .= $asset
      ->getTargetPath();
    $cacheKey .= $asset
      ->getLastModified();
    foreach ($asset
      ->getFilters() as $filter) {
      if ($filter instanceof HashableInterface) {
        $cacheKey .= $filter
          ->hash();
      }
      else {
        $cacheKey .= serialize($filter);
      }
    }
    if ($values = $asset
      ->getValues()) {
      asort($values);
      $cacheKey .= serialize($values);
    }
    return md5($cacheKey . $salt);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AssetCache::$asset private property
AssetCache::$cache private property
AssetCache::clearFilters public function Clears all filters from the current asset. Overrides AssetInterface::clearFilters
AssetCache::dump public function Applies dump filters and returns the asset as a string. Overrides AssetInterface::dump
AssetCache::ensureFilter public function Ensures the current asset includes the supplied filter. Overrides AssetInterface::ensureFilter
AssetCache::getCacheKey private static function Returns a cache key for the current asset.
AssetCache::getContent public function Returns the loaded content of the current asset. Overrides AssetInterface::getContent
AssetCache::getFilters public function Returns an array of filters currently applied. Overrides AssetInterface::getFilters
AssetCache::getLastModified public function Returns the time the current asset was last modified. Overrides AssetInterface::getLastModified
AssetCache::getSourcePath public function Returns the relative path for the source asset. Overrides AssetInterface::getSourcePath
AssetCache::getSourceRoot public function Returns an absolute path or URL to the source asset's root directory. Overrides AssetInterface::getSourceRoot
AssetCache::getTargetPath public function Returns the URL for the current asset. Overrides AssetInterface::getTargetPath
AssetCache::getValues public function Returns the current values for this asset. Overrides AssetInterface::getValues
AssetCache::getVars public function Returns an array of variable names for this asset. Overrides AssetInterface::getVars
AssetCache::load public function Loads the asset into memory and applies load filters. Overrides AssetInterface::load
AssetCache::setContent public function Sets the content of the current asset. Overrides AssetInterface::setContent
AssetCache::setTargetPath public function Sets the URL for the current asset. Overrides AssetInterface::setTargetPath
AssetCache::setValues public function Sets the values for the asset's variables. Overrides AssetInterface::setValues
AssetCache::__construct public function