class CoalescingDirectoryResource

Coalesces multiple directories together into one merged resource.

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

Hierarchy

Expanded class hierarchy of CoalescingDirectoryResource

1 file declares its use of CoalescingDirectoryResource
CoalescingDirectoryResourceTest.php in drupal/core/vendor/kriswallsmith/assetic/tests/Assetic/Test/Factory/Resource/CoalescingDirectoryResourceTest.php

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Factory/Resource/CoalescingDirectoryResource.php, line 19

Namespace

Assetic\Factory\Resource
View source
class CoalescingDirectoryResource implements IteratorResourceInterface {
  private $directories;
  public function __construct($directories) {
    $this->directories = array();
    foreach ($directories as $directory) {
      $this
        ->addDirectory($directory);
    }
  }
  public function addDirectory(IteratorResourceInterface $directory) {
    $this->directories[] = $directory;
  }
  public function isFresh($timestamp) {
    foreach ($this
      ->getFileResources() as $file) {
      if (!$file
        ->isFresh($timestamp)) {
        return false;
      }
    }
    return true;
  }
  public function getContent() {
    $parts = array();
    foreach ($this
      ->getFileResources() as $file) {
      $parts[] = $file
        ->getContent();
    }
    return implode("\n", $parts);
  }

  /**
   * Returns a string to uniquely identify the current resource.
   *
   * @return string An identifying string
   */
  public function __toString() {
    $parts = array();
    foreach ($this->directories as $directory) {
      $parts[] = (string) $directory;
    }
    return implode(',', $parts);
  }
  public function getIterator() {
    return new \ArrayIterator($this
      ->getFileResources());
  }

  /**
   * Returns the relative version of a filename.
   *
   * @param ResourceInterface $file      The file
   * @param ResourceInterface $directory The directory
   *
   * @return string The name to compare with files from other directories
   */
  protected function getRelativeName(ResourceInterface $file, ResourceInterface $directory) {
    return substr((string) $file, strlen((string) $directory));
  }

  /**
   * Performs the coalesce.
   *
   * @return array An array of file resources
   */
  private function getFileResources() {
    $paths = array();
    foreach ($this->directories as $directory) {
      foreach ($directory as $file) {
        $relative = $this
          ->getRelativeName($file, $directory);
        if (!isset($paths[$relative])) {
          $paths[$relative] = $file;
        }
      }
    }
    return array_values($paths);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CoalescingDirectoryResource::$directories private property
CoalescingDirectoryResource::addDirectory public function
CoalescingDirectoryResource::getContent public function Returns the content of the resource. Overrides ResourceInterface::getContent
CoalescingDirectoryResource::getFileResources private function Performs the coalesce.
CoalescingDirectoryResource::getIterator public function
CoalescingDirectoryResource::getRelativeName protected function Returns the relative version of a filename.
CoalescingDirectoryResource::isFresh public function Checks if a timestamp represents the latest resource. Overrides ResourceInterface::isFresh
CoalescingDirectoryResource::__construct public function
CoalescingDirectoryResource::__toString public function Returns a string to uniquely identify the current resource. Overrides ResourceInterface::__toString