diff --git a/src/Symfony/Bundle/AsseticBundle/Factory/Resource/CoalescingDirectoryResource.php b/src/Symfony/Bundle/AsseticBundle/Factory/Resource/CoalescingDirectoryResource.php new file mode 100644 index 0000000000..1ad87e9f72 --- /dev/null +++ b/src/Symfony/Bundle/AsseticBundle/Factory/Resource/CoalescingDirectoryResource.php @@ -0,0 +1,30 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Bundle\AsseticBundle\Factory\Resource; + +use Assetic\Factory\Resource\CoalescingDirectoryResource as BaseCoalescingDirectoryResource; +use Assetic\Factory\Resource\ResourceInterface; + +/** + * Coalesces multiple directories together into one merged resource. + * + * @author Kris Wallsmith + */ +class CoalescingDirectoryResource extends BaseCoalescingDirectoryResource +{ + protected function getRelativeName(ResourceInterface $file, ResourceInterface $directory) + { + $name = (string) $file; + + return substr($name, strpos($name, ':')); + } +} diff --git a/src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml b/src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml index d2fa71d9e1..522000810b 100644 --- a/src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml +++ b/src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml @@ -12,7 +12,7 @@ Assetic\Cache\ConfigCache Symfony\Bundle\AsseticBundle\Factory\Loader\ConfigurationLoader Symfony\Bundle\AsseticBundle\Factory\Resource\ConfigurationResource - Assetic\Factory\Resource\CoalescingDirectoryResource + Symfony\Bundle\AsseticBundle\Factory\Resource\CoalescingDirectoryResource Symfony\Bundle\AsseticBundle\Factory\Resource\DirectoryResource Symfony\Bundle\AsseticBundle\FilterManager Assetic\Factory\Worker\EnsureFilterWorker diff --git a/src/Symfony/Bundle/AsseticBundle/Tests/Factory/Resource/CoalescingDirectoryResourceTest.php b/src/Symfony/Bundle/AsseticBundle/Tests/Factory/Resource/CoalescingDirectoryResourceTest.php new file mode 100644 index 0000000000..4967e45cfe --- /dev/null +++ b/src/Symfony/Bundle/AsseticBundle/Tests/Factory/Resource/CoalescingDirectoryResourceTest.php @@ -0,0 +1,63 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Bundle\AsseticBundle\Tests\Factory\Resource; + +use Symfony\Bundle\AsseticBundle\Factory\Resource\CoalescingDirectoryResource; + +class CoalescingDirectoryResourceTest extends \PHPUnit_Framework_TestCase +{ + public function testFiltering() + { + $dir1 = $this->getMock('Assetic\\Factory\\Resource\\IteratorResourceInterface'); + $file1a = $this->getMock('Assetic\\Factory\\Resource\\ResourceInterface'); + $file1b = $this->getMock('Assetic\\Factory\\Resource\\ResourceInterface'); + + $dir2 = $this->getMock('Assetic\\Factory\\Resource\\IteratorResourceInterface'); + $file2a = $this->getMock('Assetic\\Factory\\Resource\\ResourceInterface'); + $file2c = $this->getMock('Assetic\\Factory\\Resource\\ResourceInterface'); + + $dir1->expects($this->any()) + ->method('getIterator') + ->will($this->returnValue(new \ArrayIterator(array($file1a, $file1b)))); + $file1a->expects($this->any()) + ->method('__toString') + ->will($this->returnValue('FooBundle:Foo:file1.foo.bar')); + $file1b->expects($this->any()) + ->method('__toString') + ->will($this->returnValue('FooBundle:Foo:file2.foo.bar')); + + $dir2->expects($this->any()) + ->method('getIterator') + ->will($this->returnValue(new \ArrayIterator(array($file2a, $file2c)))); + $file2a->expects($this->any()) + ->method('__toString') + ->will($this->returnValue('BarBundle:Foo:file1.foo.bar')); + $file2c->expects($this->any()) + ->method('__toString') + ->will($this->returnValue('BarBundle:Foo:file3.foo.bar')); + + $resource = new CoalescingDirectoryResource(array($dir1, $dir2)); + + $actual = array(); + foreach ($resource as $file) { + $actual[] = (string) $file; + } + + $expected = array( + 'FooBundle:Foo:file1.foo.bar', + 'FooBundle:Foo:file2.foo.bar', + 'BarBundle:Foo:file3.foo.bar', + ); + + $this->assertEquals($expected, $actual); + } +}