Version 1
[yaffs-website] / vendor / consolidation / annotated-command / src / Parser / CommandInfoDeserializer.php
diff --git a/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php b/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php
new file mode 100644 (file)
index 0000000..ed193cb
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+namespace Consolidation\AnnotatedCommand\Parser;
+
+use Symfony\Component\Console\Input\InputOption;
+use Consolidation\AnnotatedCommand\Parser\Internal\CommandDocBlockParser;
+use Consolidation\AnnotatedCommand\Parser\Internal\CommandDocBlockParserFactory;
+use Consolidation\AnnotatedCommand\AnnotationData;
+
+/**
+ * Deserialize a CommandInfo object
+ */
+class CommandInfoDeserializer
+{
+    // TODO: in a future version, move CommandInfo::deserialize here
+    public function deserialize($data)
+    {
+        return CommandInfo::deserialize((array)$data);
+    }
+
+    protected static function cachedMethodExists($cache)
+    {
+        return method_exists($cache['class'], $cache['method_name']);
+    }
+
+    public static function isValidSerializedData($cache)
+    {
+        return
+            isset($cache['schema']) &&
+            isset($cache['method_name']) &&
+            isset($cache['mtime']) &&
+            ($cache['schema'] > 0) &&
+            ($cache['schema'] <= CommandInfo::SERIALIZATION_SCHEMA_VERSION) &&
+            self::cachedMethodExists($cache);
+    }
+
+    public function constructFromCache(CommandInfo $commandInfo, $info_array)
+    {
+        $info_array += $this->defaultSerializationData();
+
+        $commandInfo
+            ->setName($info_array['name'])
+            ->replaceRawAnnotations($info_array['annotations'])
+            ->setAliases($info_array['aliases'])
+            ->setHelp($info_array['help'])
+            ->setDescription($info_array['description'])
+            ->replaceExampleUsages($info_array['example_usages'])
+            ->setReturnType($info_array['return_type'])
+            ;
+
+        $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']);
+        $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']);
+    }
+
+    protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data)
+    {
+        foreach ($data as $key => $info) {
+            $info = (array)$info;
+            $defaults->add($key, $info['description']);
+            if (array_key_exists('default', $info)) {
+                $defaults->setDefaultValue($key, $info['default']);
+            }
+        }
+    }
+
+
+    /**
+     * Default data. Everything should be provided during serialization;
+     * this is just as a fallback for unusual circumstances.
+     * @return array
+     */
+    protected function defaultSerializationData()
+    {
+        return [
+            'name' => '',
+            'description' => '',
+            'help' => '',
+            'aliases' => [],
+            'annotations' => [],
+            'example_usages' => [],
+            'return_type' => [],
+            'parameters' => [],
+            'arguments' => [],
+            'options' => [],
+            'mtime' => 0,
+        ];
+    }
+}