Переглянути джерело

Virtual property metadata refactoring

Aleksandr Klimenkov 13 роки тому
батько
коміт
8207823a82

+ 1 - 10
Metadata/Driver/AnnotationDriver.php

@@ -102,16 +102,7 @@ class AnnotationDriver implements DriverInterface
                     $classMetadata->addPostSerializeMethod(new MethodMetadata($name, $method->getName()));
                     continue 2;
                 } else if ($annot instanceof VirtualProperty) {
-
-                    $methodName = $method->getName();
-                    if ('get' === substr($methodName, 0, 3)) {
-                        $fieldName = lcfirst(substr($methodName, 3));
-                    } else {
-                        $fieldName = $method->getName();
-                    }
-
-                    $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $fieldName);
-                    $virtualPropertyMetadata->getter = $methodName;
+                    $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $method->getName());
                     $propertiesMetadata[] = $virtualPropertyMetadata;
                     $propertiesAnnotations[] = $methodAnnotations;
                     continue 2;

+ 1 - 9
Metadata/Driver/XmlDriver.php

@@ -67,15 +67,7 @@ class XmlDriver extends AbstractFileDriver
                 throw new RuntimeException('The method attribute must be set for all virtual-property elements.');
             }
 
-            $methodName = (string) $method->attributes()->method;
-            if ('get' === substr($methodName, 0, 3)) {
-                $fieldName = lcfirst(substr($methodName, 3));
-            } else {
-                $fieldName = $method->getName();
-            }
-
-            $virtualPropertyMetadata = new VirtualPropertyMetadata( $name, $fieldName );
-            $virtualPropertyMetadata->getter = (string) $method->attributes()->method;
+            $virtualPropertyMetadata = new VirtualPropertyMetadata( $name, (string) $method->attributes()->method );
             
             $propertiesMetadata[] = $virtualPropertyMetadata;
             $propertiesNodes[] = $method;

+ 1 - 8
Metadata/Driver/YamlDriver.php

@@ -63,14 +63,7 @@ class YamlDriver extends AbstractFileDriver
                     throw new RuntimeException('The method '.$methodName.' not found in class ' . $class->name);
                 }
 
-                if ('get' === substr($methodName, 0, 3)) {
-                    $fieldName = lcfirst(substr($methodName, 3));
-                } else {
-                    $fieldName = $method->getName();
-                }
-
-                $virtualPropertyMetadata = new VirtualPropertyMetadata( $name, $fieldName );
-                $virtualPropertyMetadata->getter = $methodName;
+                $virtualPropertyMetadata = new VirtualPropertyMetadata( $name, $methodName );
 
                 $propertiesMetadata[$methodName] = $virtualPropertyMetadata;
                 $config['properties'][$methodName] = $propertySettings;

+ 10 - 2
Metadata/VirtualPropertyMetadata.php

@@ -22,10 +22,18 @@ namespace JMS\SerializerBundle\Metadata;
 class VirtualPropertyMetadata extends PropertyMetadata
 {
 
-    public function __construct($class, $name)
+    public function __construct($class, $methodName)
     {
+
+        if ('get' === substr($methodName, 0, 3)) {
+            $fieldName = lcfirst(substr($methodName, 3));
+        } else {
+            $fieldName = $methodName;
+        }
+
         $this->class = $class;
-        $this->name = $name;
+        $this->name = $fieldName;
+        $this->getter = $methodName;
         $this->readOnly = true;
     }