Skip to content

Commit

Permalink
[Templating] Make Asset/Templating component optional
Browse files Browse the repository at this point in the history
  • Loading branch information
GeLoLabs committed Dec 11, 2015
1 parent da7c226 commit c65bfa1
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 67 deletions.
15 changes: 4 additions & 11 deletions DependencyInjection/Compiler/AssetsHelperCompilerPass.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
use Symfony\Component\HttpKernel\Kernel;

/**
* Create assets.packages fallback alias for symfony < 2.7
* Create assets.packages fallback alias for Symfony < 2.7
*
* @author Adam Misiorny <adam.misiorny@gmail.com>
*/
Expand All @@ -27,15 +27,8 @@ class AssetsHelperCompilerPass implements CompilerPassInterface
*/
public function process(ContainerBuilder $container)
{
if ($container->hasDefinition('assets.packages')) {
return;
if (Kernel::VERSION_ID < 27000 && $container->has('templating.helper.assets')) {
$container->setAlias('assets.packages', 'templating.helper.assets');
}

if (!$container->hasDefinition('templating.helper.assets')) {
throw new ServiceNotFoundException('templating.helper.assets');
}

// create fallback alias for symfony < 2.7
$container->setAlias('assets.packages', 'templating.helper.assets');
}
}
34 changes: 25 additions & 9 deletions Templating/CKEditorHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public function __construct(ContainerInterface $container)
*/
public function renderBasePath($basePath)
{
return $this->fixPath($this->getAssetsHelper()->getUrl($basePath));
return $this->fixPath($this->fixUrl($basePath));
}

/**
Expand All @@ -61,7 +61,7 @@ public function renderBasePath($basePath)
*/
public function renderJsPath($jsPath)
{
return $this->getAssetsHelper()->getUrl($jsPath);
return $this->fixUrl($jsPath);
}

/**
Expand Down Expand Up @@ -136,7 +136,7 @@ public function renderPlugin($name, array $plugin)
return sprintf(
'CKEDITOR.plugins.addExternal("%s", "%s", "%s");',
$name,
$this->fixPath($this->getAssetsHelper()->getUrl($plugin['path'])),
$this->fixPath($this->fixUrl($plugin['path'])),
$plugin['filename']
);
}
Expand Down Expand Up @@ -174,9 +174,7 @@ public function renderStylesSet($name, array $stylesSet)
public function renderTemplate($name, array $template)
{
if (isset($template['imagesPath'])) {
$template['imagesPath'] = $this->fixPath(
$this->getAssetsHelper()->getUrl($template['imagesPath'])
);
$template['imagesPath'] = $this->fixPath($this->fixUrl($template['imagesPath']));
}

$this->jsonBuilder
Expand Down Expand Up @@ -224,7 +222,7 @@ private function fixConfigContentsCss(array $config)

$config['contentsCss'] = array();
foreach ($cssContents as $cssContent) {
$config['contentsCss'][] = $this->fixPath($this->getAssetsHelper()->getUrl($cssContent));
$config['contentsCss'][] = $this->fixPath($this->fixUrl($cssContent));
}
}

Expand Down Expand Up @@ -330,14 +328,32 @@ private function fixPath($path)
return $path;
}

/**
* Fixes an url.
*
* @param string $url The url.
*
* @return string The fixed url.
*/
private function fixUrl($url)
{
$assetsHelper = $this->getAssetsHelper();

if ($assetsHelper !== null) {
$url = $assetsHelper->getUrl($url);
}

return $url;
}

/**
* Gets the assets helper.
*
* @return \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper The assets helper.
* @return \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper|null The assets helper.
*/
private function getAssetsHelper()
{
return $this->container->get('assets.packages');
return $this->container->get('assets.packages', ContainerInterface::NULL_ON_INVALID_REFERENCE);
}

/**
Expand Down
99 changes: 53 additions & 46 deletions Tests/DependencyInjection/Compiler/AssetsHelperCompilerPassTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Ivory\CKEditorBundle\Tests\DependencyInjection\Compiler;

use Ivory\CKEditorBundle\DependencyInjection\Compiler\AssetsHelperCompilerPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel;

/**
* Assets helper compiler pass test.
Expand All @@ -21,18 +21,15 @@
*/
class AssetsHelperCompilerPassTest extends \PHPUnit_Framework_TestCase
{
/** @var \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper|\PHPUnit_Framework_MockObject_MockObject */
private $containerBuilderMock;
/** @var \Ivory\CKEditorBundle\DependencyInjection\Compiler\AssetsHelperCompilerPass */
private $assetsHelperCompilerPass;

/**
* {@inheritdoc}
*/
protected function setUp()
{
$this->containerBuilderMock = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
->setMethods(array('hasDefinition', 'setAlias'))
->disableOriginalConstructor()
->getMock();
$this->assetsHelperCompilerPass = new AssetsHelperCompilerPass();
}

/**
Expand All @@ -43,63 +40,73 @@ protected function tearDown()
unset($this->containerBuilderMock);
}

public function testAssetsPackagesExists()
public function testAssetsPackagesAliasWithTemplatingHelperAssets()
{
$this->containerBuilderMock
if (Kernel::VERSION_ID >= 27000) {
$this->markTestSkipped();
}

$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
->setMethods(array('has', 'setAlias'))
->disableOriginalConstructor()
->getMock();

$container
->expects($this->once())
->method('hasDefinition')
->with('assets.packages')
->method('has')
->with($this->identicalTo($legacy = 'templating.helper.assets'))
->will($this->returnValue(true));

$compilerPass = new AssetsHelperCompilerPass();
$container
->expects($this->once())
->method('setAlias')
->with(
$this->identicalTo('assets.packages'),
$this->identicalTo($legacy)
);

$compilerPass->process($this->containerBuilderMock);
$this->assetsHelperCompilerPass->process($container);
}

public function testAssetsPackagesNotExists()
public function testAssetsPackagesAliasWithoutTemplatingHelperAssets()
{
$this->containerBuilderMock
->expects($this->at(0))
->method('hasDefinition')
->with('assets.packages')
->will($this->returnValue(false));
if (Kernel::VERSION_ID >= 27000) {
$this->markTestSkipped();
}

$this->containerBuilderMock
->expects($this->at(1))
->method('hasDefinition')
->with('templating.helper.assets')
->will($this->returnValue(true));
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
->setMethods(array('has', 'setAlias'))
->disableOriginalConstructor()
->getMock();

$this->containerBuilderMock
$container
->expects($this->once())
->method('setAlias')
->with($this->equalTo('assets.packages'), $this->equalTo('templating.helper.assets'));
->method('has')
->with($this->identicalTo($legacy = 'templating.helper.assets'))
->will($this->returnValue(false));

$compilerPass = new AssetsHelperCompilerPass();
$container
->expects($this->never())
->method('setAlias');

$compilerPass->process($this->containerBuilderMock);
$this->assetsHelperCompilerPass->process($container);
}

/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
* @expectedExceptionMessage You have requested a non-existent service "templating.helper.assets".
*/
public function testMissingService()
public function testAssetsPackagesAliasWithAssetsPackage()
{
$this->containerBuilderMock
->expects($this->at(0))
->method('hasDefinition')
->with('assets.packages')
->will($this->returnValue(false));
if (Kernel::VERSION_ID < 27000) {
$this->markTestSkipped();
}

$this->containerBuilderMock
->expects($this->at(1))
->method('hasDefinition')
->with('templating.helper.assets')
->will($this->returnValue(false));
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
->setMethods(array('setAlias'))
->disableOriginalConstructor()
->getMock();

$compilerPass = new AssetsHelperCompilerPass();
$container
->expects($this->never())
->method('setAlias');

$compilerPass->process($this->containerBuilderMock);
$this->assetsHelperCompilerPass->process($container);
}
}
2 changes: 1 addition & 1 deletion Tests/Templating/CKEditorHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ protected function setUp()
->will($this->returnValueMap(array(
array(
'assets.packages',
ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE,
ContainerInterface::NULL_ON_INVALID_REFERENCE,
$this->assetsHelperMock,
),
array(
Expand Down

0 comments on commit c65bfa1

Please sign in to comment.