Skip to content

Commit

Permalink
Merge pull request #862 from schmittjoh/twig
Browse files Browse the repository at this point in the history
add "jms_" prefix to serializer functions to avoid collisions with th…
  • Loading branch information
goetas committed Oct 14, 2021
2 parents 68291e1 + 2ce2610 commit a23399f
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 33 deletions.
25 changes: 8 additions & 17 deletions DependencyInjection/Compiler/TwigExtensionPass.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

namespace JMS\SerializerBundle\DependencyInjection\Compiler;

use JMS\Serializer\Twig\SerializerRuntimeExtension;
use JMS\Serializer\Twig\SerializerRuntimeHelper;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

Expand All @@ -16,23 +14,16 @@ final class TwigExtensionPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition('jms_serializer.twig_extension.serializer_runtime_helper')) {
return;
}

if (
!$container->hasDefinition('twig.runtime_loader')
|| !class_exists(SerializerRuntimeExtension::class)
|| !(interface_exists('Twig\RuntimeLoader\RuntimeLoaderInterface') || interface_exists('Twig_RuntimeLoaderInterface'))
|| !class_exists(SerializerRuntimeHelper::class)
) {
// if there is no support for twig runtime extensions, remove the services
if (!$container->hasDefinition('twig.runtime_loader')) {
$container->removeDefinition('jms_serializer.twig_extension.runtime_serializer');
$container->removeDefinition('jms_serializer.twig_extension.serializer_runtime_helper');

return;
}

$def = $container->findDefinition('jms_serializer.twig_extension.serializer');
$def->setClass(SerializerRuntimeExtension::class);
$def->setArguments([]);
// if there is no twig, remove the standard extension
// or twig is there with runtime extensions, thus the "legacy" extensions are not needed
if (!$container->hasDefinition('twig') || $container->hasDefinition('twig.runtime_loader')) {
$container->removeDefinition('jms_serializer.twig_extension.serializer');
}
}
}
8 changes: 7 additions & 1 deletion Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -231,10 +231,16 @@
<!-- Twig Extension -->
<service id="jms_serializer.twig_extension.serializer" class="JMS\Serializer\Twig\SerializerExtension" public="false">
<argument type="service" id="jms_serializer" />
<argument>jms_</argument>
<tag name="twig.extension" />
</service>

<service id="jms_serializer.twig_extension.serializer_runtime_helper" class="JMS\Serializer\Twig\SerializerRuntimeHelper" public="true">
<service id="jms_serializer.twig_extension.runtime_serializer" class="JMS\Serializer\Twig\SerializerRuntimeExtension" public="false">
<argument>jms_</argument>
<tag name="twig.extension" />
</service>

<service id="jms_serializer.twig_extension.serializer_runtime_helper" class="JMS\Serializer\Twig\SerializerRuntimeHelper" public="false">
<argument type="service" id="jms_serializer" />
<tag name="twig.runtime" />
</service>
Expand Down
6 changes: 3 additions & 3 deletions Resources/doc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ In templates, you may also use the ``serialize`` filter:

.. code-block :: html+jinja
{{ data | serialize }} {# serializes to JSON #}
{{ data | serialize('json') }}
{{ data | serialize('xml') }}
{{ data | jms_serialize }} {# serializes to JSON #}
{{ data | jms_serialize('json') }}
{{ data | jms_serialize('xml') }}
Learn more in the `documentation for the dedicated library <http://jmsyst.com/libs/serializer/master/usage>`_.

Expand Down
16 changes: 5 additions & 11 deletions Tests/DependencyInjection/TwigExtensionPassTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,37 +38,31 @@ public function testNotLoadedWhenNoBundle()

$this->assertFalse($container->hasDefinition('jms_serializer.twig_extension.serializer'));
$this->assertFalse($container->hasDefinition('jms_serializer.twig_extension.serializer_runtime_helper'));
$this->assertFalse($container->hasDefinition('jms_serializer.twig_extension.serializer_runtime_helper'));
}

public function testStandardExtension()
{
$container = $this->getContainer();
$container->register('twig');

$pass = new TwigExtensionPass();
$pass->process($container);

$extension = $container->getDefinition('jms_serializer.twig_extension.serializer');
$this->assertCount(1, $extension->getArguments());

$this->assertTrue($container->hasDefinition('jms_serializer.twig_extension.serializer'));
$this->assertFalse($container->hasDefinition('jms_serializer.twig_extension.serializer_runtime_helper'));
}

public function testLazyExtension()
{
if (!interface_exists('Twig_RuntimeLoaderInterface')) {
$this->markTestSkipped('Lazy extensions are supported only by serializer 1.7.0');
}

$container = $this->getContainer();

$container->register('twig');
$container->register('twig.runtime_loader');

$pass = new TwigExtensionPass();
$pass->process($container);

$extension = $container->getDefinition('jms_serializer.twig_extension.serializer');
$this->assertCount(0, $extension->getArguments());

$this->assertFalse($container->hasDefinition('jms_serializer.twig_extension.serializer'));
$this->assertTrue($container->hasDefinition('jms_serializer.twig_extension.serializer_runtime_helper'));
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
],
"require": {
"php": "^7.2 || ^8.0",
"jms/serializer": "^3.0",
"jms/serializer": "^3.15",
"jms/metadata": "^2.5",
"symfony/dependency-injection": "^3.3 || ^4.0 || ^5.0 || ^6.0",
"symfony/framework-bundle": "^3.0 || ^4.0 || ^5.0 || ^6.0"
Expand Down

0 comments on commit a23399f

Please sign in to comment.