Bläddra i källkod

Add XML, PHP and YAML Driver for groups and tests for this

Christian Stocker 13 år sedan
förälder
incheckning
e8c91ba292

+ 4 - 0
Metadata/Driver/XmlDriver.php

@@ -98,6 +98,10 @@ class XmlDriver extends AbstractFileDriver
                         $pMetadata->type = (string) $pElem->type;
                     }
 
+                    if (null !== $groups = $pElem->attributes()->groups) {
+                        $pMetadata->groups =  preg_split('/\s*,\s*/', (string) $groups);
+                    } 
+
                     if (isset($pElem->{'xml-list'})) {
                         $pMetadata->xmlCollection = true;
 

+ 3 - 0
Metadata/Driver/YamlDriver.php

@@ -86,6 +86,9 @@ class YamlDriver extends AbstractFileDriver
                     if (isset($pConfig['type'])) {
                         $pMetadata->type = (string) $pConfig['type'];
                     }
+                    if (isset($pConfig['groups'])) {
+                        $pMetadata->groups = $pConfig['groups'];
+                    } 
 
                     if (isset($pConfig['xml_list'])) {
                         $pMetadata->xmlCollection = true;

+ 5 - 0
Tests/Fixtures/BlogPost.php

@@ -23,6 +23,7 @@ use JMS\SerializerBundle\Annotation\SerializedName;
 use JMS\SerializerBundle\Annotation\XmlRoot;
 use JMS\SerializerBundle\Annotation\XmlAttribute;
 use JMS\SerializerBundle\Annotation\XmlList;
+use JMS\SerializerBundle\Annotation\Groups;
 use Doctrine\Common\Collections\ArrayCollection;
 
 /** @XmlRoot("blog-post") */
@@ -30,6 +31,7 @@ class BlogPost
 {
     /**
      * @Type("string")
+     * @Groups({"comments","post"})
      */
     private $title;
 
@@ -43,17 +45,20 @@ class BlogPost
      * @Type("boolean")
      * @SerializedName("is_published")
      * @XmlAttribute
+     * @Groups({"post"})
      */
     private $published;
 
     /**
      * @Type("ArrayCollection<JMS\SerializerBundle\Tests\Fixtures\Comment>")
      * @XmlList(inline=true, entry="comment")
+     * @Groups({"comments"})
      */
     private $comments;
 
     /**
      * @Type("JMS\SerializerBundle\Tests\Fixtures\Author")
+     * @Groups({"post"})
      */
     private $author;
 

+ 4 - 0
Tests/Metadata/Driver/BaseDriverTest.php

@@ -32,6 +32,7 @@ abstract class BaseDriverTest extends \PHPUnit_Framework_TestCase
 
         $p = new PropertyMetadata($m->name, 'title');
         $p->type = 'string';
+        $p->groups = array("comments","post");
         $this->assertEquals($p, $m->propertyMetadata['title']);
 
         $p = new PropertyMetadata($m->name, 'createdAt');
@@ -43,6 +44,7 @@ abstract class BaseDriverTest extends \PHPUnit_Framework_TestCase
         $p->type = 'boolean';
         $p->serializedName = 'is_published';
         $p->xmlAttribute = true;
+        $p->groups = array("post");
         $this->assertEquals($p, $m->propertyMetadata['published']);
 
         $p = new PropertyMetadata($m->name, 'comments');
@@ -50,10 +52,12 @@ abstract class BaseDriverTest extends \PHPUnit_Framework_TestCase
         $p->xmlCollection = true;
         $p->xmlCollectionInline = true;
         $p->xmlEntryName = 'comment';
+        $p->groups = array("comments");
         $this->assertEquals($p, $m->propertyMetadata['comments']);
 
         $p = new PropertyMetadata($m->name, 'author');
         $p->type = 'JMS\SerializerBundle\Tests\Fixtures\Author';
+        $p->groups = array("post");
         $this->assertEquals($p, $m->propertyMetadata['author']);
         
         $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\SerializerBundle\Tests\Fixtures\Price'));

+ 6 - 0
Tests/Metadata/Driver/php/BlogPost.php

@@ -8,6 +8,7 @@ $metadata->xmlRootName = 'blog-post';
 
 $pMetadata = new PropertyMetadata('JMS\SerializerBundle\Tests\Fixtures\BlogPost', 'title');
 $pMetadata->type = 'string';
+$pMetadata->groups = array('comments','post');
 $metadata->addPropertyMetadata($pMetadata);
 
 $pMetadata = new PropertyMetadata('JMS\SerializerBundle\Tests\Fixtures\BlogPost', 'createdAt');
@@ -18,6 +19,7 @@ $metadata->addPropertyMetadata($pMetadata);
 $pMetadata = new PropertyMetadata('JMS\SerializerBundle\Tests\Fixtures\BlogPost', 'published');
 $pMetadata->type = 'boolean';
 $pMetadata->serializedName = 'is_published';
+$pMetadata->groups = array('post');
 $pMetadata->xmlAttribute = true;
 $metadata->addPropertyMetadata($pMetadata);
 
@@ -26,10 +28,14 @@ $pMetadata->type = 'ArrayCollection<JMS\SerializerBundle\Tests\Fixtures\Comment>
 $pMetadata->xmlCollection = true;
 $pMetadata->xmlCollectionInline = true;
 $pMetadata->xmlEntryName = 'comment';
+$pMetadata->groups = array('comments');
+
 $metadata->addPropertyMetadata($pMetadata);
 
 $pMetadata = new PropertyMetadata('JMS\SerializerBundle\Tests\Fixtures\BlogPost', 'author');
 $pMetadata->type = 'JMS\SerializerBundle\Tests\Fixtures\Author';
+$pMetadata->groups = array('post');
+
 $metadata->addPropertyMetadata($pMetadata);
 
 return $metadata;

+ 5 - 5
Tests/Metadata/Driver/xml/BlogPost.xml

@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <serializer>
     <class name="JMS\SerializerBundle\Tests\Fixtures\BlogPost" xml-root-name="blog-post">
-        <property name="title" type="string" />
-        <property name="createdAt" xml-attribute="true" type="DateTime" />
-        <property name="published" type="boolean" serialized-name="is_published" xml-attribute="true" />
-        <property name="comments">
+        <property name="title" type="string" groups="comments,post"/>
+        <property name="createdAt" xml-attribute="true" type="DateTime"/>
+        <property name="published" type="boolean" serialized-name="is_published" xml-attribute="true" groups="post" />
+        <property name="comments" groups="comments">
             <type><![CDATA[ArrayCollection<JMS\SerializerBundle\Tests\Fixtures\Comment>]]></type>
             <xml-list inline="true" entry-name="comment" />
         </property>
-        <property name="author" type="JMS\SerializerBundle\Tests\Fixtures\Author" />
+        <property name="author" groups="post" type="JMS\SerializerBundle\Tests\Fixtures\Author" />
     </class>
 </serializer>

+ 5 - 1
Tests/Metadata/Driver/yml/BlogPost.yml

@@ -3,6 +3,7 @@ JMS\SerializerBundle\Tests\Fixtures\BlogPost:
     properties:
         title:
             type: string
+            groups: [comments, post]
         createdAt:
             type: DateTime
             xml_attribute: true
@@ -10,10 +11,13 @@ JMS\SerializerBundle\Tests\Fixtures\BlogPost:
             type: boolean
             serialized_name: is_published
             xml_attribute: true
+            groups: [post]
         comments:
             type: ArrayCollection<JMS\SerializerBundle\Tests\Fixtures\Comment>
+            groups: [comments]
             xml_list:
                 inline: true
                 entry_name: comment
         author:
-            type: JMS\SerializerBundle\Tests\Fixtures\Author
+            type: JMS\SerializerBundle\Tests\Fixtures\Author
+            groups: [post]