Browse Source

turn object based handler off by default

Johannes M. Schmitt 13 years ago
parent
commit
30378aedfe

+ 10 - 1
DependencyInjection/Configuration.php

@@ -49,7 +49,16 @@ class Configuration implements ConfigurationInterface
                     ->arrayNode('handlers')
                         ->addDefaultsIfNotSet()
                         ->children()
-                            ->booleanNode('object_based_custom')->defaultTrue()->end()
+                            ->arrayNode('object_based')
+                                ->treatTrueLike(array('serialization' => true, 'deserialization' => true))
+                                ->treatNullLike(array('serialization' => true, 'deserialization' => true))
+                                ->treatFalseLike(array('serialization' => false, 'deserialization' => false))
+                                ->addDefaultsIfNotSet()
+                                ->children()
+                                    ->booleanNode('serialization')->defaultFalse()->end()
+                                    ->booleanNode('deserialization')->defaultFalse()->end()
+                                ->end()
+                            ->end()
                             ->arrayNode('datetime')
                                 ->addDefaultsIfNotSet()
                                 ->canBeUnset()

+ 5 - 2
DependencyInjection/JMSSerializerExtension.php

@@ -52,8 +52,11 @@ class JMSSerializerExtension extends Extension
         }
 
         // object based custom handler
-        if (!$config['handlers']['object_based_custom']) {
-            $container->removeDefinition('jms_serializer.object_based_custom_handler');
+        if ($config['handlers']['object_based']['serialization']) {
+            $container->getDefinition('jms_serializer.object_based_custom_handler')->addTag('jms_serialization.serialization_handler');
+        }
+        if ($config['handlers']['object_based']['deserialization']) {
+            $container->getDefinition('jms_serializer.object_based_custom_handler')->addTag('jms_serialization.deserialization_handler');
         }
 
         // datetime handler

+ 0 - 2
Resources/config/services.xml

@@ -141,8 +141,6 @@
         <service id="jms_serializer.object_based_custom_handler" class="%jms_serializer.object_based_custom_handler.class%" public="false">
             <argument type="service" id="jms_serializer.unserialize_object_constructor" />
             <argument type="service" id="jms_serializer.metadata_factory" />
-            <tag name="jms_serializer.serialization_handler" />
-            <tag name="jms_serializer.deserialization_handler" />
         </service>
         <service id="jms_serializer.datetime_handler" class="%jms_serializer.datetime_handler.class%" public="false">
             <tag name="jms_serializer.serialization_handler" />

+ 30 - 20
Tests/DependencyInjection/JMSSerializerExtensionTest.php

@@ -18,17 +18,20 @@
 
 namespace JMS\SerializerBundle\Tests\DependencyInjection;
 
-use JMS\SerializerBundle\Tests\Fixtures\SimpleObject;
+use Symfony\Component\DependencyInjection\Compiler\InlineServiceDefinitionsPass;
 
-use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\DependencyInjection\Compiler\RepeatedPass;
+
+use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass;
 
+use Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass;
+
+use JMS\SerializerBundle\Tests\Fixtures\SimpleObject;
+use Doctrine\Common\Annotations\AnnotationReader;
 use Symfony\Component\DependencyInjection\Compiler\ResolveDefinitionTemplatesPass;
 use JMS\SerializerBundle\JMSSerializerBundle;
-
 use Doctrine\Common\Annotations\Reader;
-
 use JMS\SerializerBundle\Tests\Fixtures\VersionedObject;
-
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use JMS\SerializerBundle\DependencyInjection\JMSSerializerExtension;
 
@@ -53,6 +56,26 @@ class JMSSerializerExtensionTest extends \PHPUnit_Framework_TestCase
     }
 
     public function testLoad()
+    {
+        $container = $this->getContainerForConfig(array(array()));
+
+        $simpleObject = new SimpleObject('foo', 'bar');
+        $versionedObject  = new VersionedObject('foo', 'bar');
+        $serializer = $container->get('serializer');
+
+        // test that all components have been wired correctly
+        $this->assertEquals(json_encode(array('name' => 'bar')), $serializer->serialize($versionedObject, 'json'));
+        $this->assertEquals($simpleObject, $serializer->deserialize($serializer->serialize($simpleObject, 'json'), get_class($simpleObject), 'json'));
+        $this->assertEquals($simpleObject, $serializer->deserialize($serializer->serialize($simpleObject, 'xml'), get_class($simpleObject), 'xml'));
+
+        $serializer->setVersion('0.0.1');
+        $this->assertEquals(json_encode(array('name' => 'foo')), $serializer->serialize($versionedObject, 'json'));
+
+        $serializer->setVersion('1.1.1');
+        $this->assertEquals(json_encode(array('name' => 'bar')), $serializer->serialize($versionedObject, 'json'));
+    }
+
+    private function getContainerForConfig(array $configs)
     {
         $extension = new JMSSerializerExtension();
         $container = new ContainerBuilder();
@@ -62,7 +85,7 @@ class JMSSerializerExtensionTest extends \PHPUnit_Framework_TestCase
         $container->set('annotation_reader', new AnnotationReader());
         $container->set('service_container', $container);
         $container->set('translator', $this->getMock('Symfony\\Component\\Translation\\TranslatorInterface'));
-        $extension->load(array(array()), $container);
+        $extension->load($configs, $container);
 
         $bundle = new JMSSerializerBundle();
         $bundle->build($container);
@@ -73,19 +96,6 @@ class JMSSerializerExtensionTest extends \PHPUnit_Framework_TestCase
         $container->getCompilerPassConfig()->setRemovingPasses(array());
         $container->compile();
 
-        $simpleObject = new SimpleObject('foo', 'bar');
-        $versionedObject  = new VersionedObject('foo', 'bar');
-        $serializer = $container->get('serializer');
-
-        // test that all components have been wired correctly
-        $this->assertEquals(json_encode(array('name' => 'bar')), $serializer->serialize($versionedObject, 'json'));
-        $this->assertEquals($simpleObject, $serializer->deserialize($serializer->serialize($simpleObject, 'json'), get_class($simpleObject), 'json'));
-        $this->assertEquals($simpleObject, $serializer->deserialize($serializer->serialize($simpleObject, 'xml'), get_class($simpleObject), 'xml'));
-
-        $serializer->setVersion('0.0.1');
-        $this->assertEquals(json_encode(array('name' => 'foo')), $serializer->serialize($versionedObject, 'json'));
-
-        $serializer->setVersion('1.1.1');
-        $this->assertEquals(json_encode(array('name' => 'bar')), $serializer->serialize($versionedObject, 'json'));
+        return $container;
     }
 }