Source of file CoalescingDirectoryResource.php
Size: 2,726 Bytes - Last Modified: 2013-06-02T00:13:43+02:00
/home/theseer/Downloads/Symfony/vendor/kriswallsmith/assetic/src/Assetic/Factory/Resource/CoalescingDirectoryResource.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | <?php /* * This file is part of the Assetic package, an OpenSky project. * * (c) 2010-2013 OpenSky Project Inc * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Assetic\Factory\Resource; /** * Coalesces multiple directories together into one merged resource. * * @author Kris Wallsmith <kris.wallsmith@gmail.com> */ 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); } } |