Mercurial > hg > isophonics-drupal-site
comparison vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 namespace Consolidation\AnnotatedCommand\Parser; | |
3 | |
4 use Symfony\Component\Console\Input\InputOption; | |
5 use Consolidation\AnnotatedCommand\Parser\Internal\CommandDocBlockParser; | |
6 use Consolidation\AnnotatedCommand\Parser\Internal\CommandDocBlockParserFactory; | |
7 use Consolidation\AnnotatedCommand\AnnotationData; | |
8 | |
9 /** | |
10 * Deserialize a CommandInfo object | |
11 */ | |
12 class CommandInfoDeserializer | |
13 { | |
14 // TODO: in a future version, move CommandInfo::deserialize here | |
15 public function deserialize($data) | |
16 { | |
17 return CommandInfo::deserialize((array)$data); | |
18 } | |
19 | |
20 protected static function cachedMethodExists($cache) | |
21 { | |
22 return method_exists($cache['class'], $cache['method_name']); | |
23 } | |
24 | |
25 public static function isValidSerializedData($cache) | |
26 { | |
27 return | |
28 isset($cache['schema']) && | |
29 isset($cache['method_name']) && | |
30 isset($cache['mtime']) && | |
31 ($cache['schema'] > 0) && | |
32 ($cache['schema'] <= CommandInfo::SERIALIZATION_SCHEMA_VERSION) && | |
33 self::cachedMethodExists($cache); | |
34 } | |
35 | |
36 public function constructFromCache(CommandInfo $commandInfo, $info_array) | |
37 { | |
38 $info_array += $this->defaultSerializationData(); | |
39 | |
40 $commandInfo | |
41 ->setName($info_array['name']) | |
42 ->replaceRawAnnotations($info_array['annotations']) | |
43 ->setAliases($info_array['aliases']) | |
44 ->setHelp($info_array['help']) | |
45 ->setDescription($info_array['description']) | |
46 ->replaceExampleUsages($info_array['example_usages']) | |
47 ->setReturnType($info_array['return_type']) | |
48 ; | |
49 | |
50 $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']); | |
51 $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']); | |
52 } | |
53 | |
54 protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data) | |
55 { | |
56 foreach ($data as $key => $info) { | |
57 $info = (array)$info; | |
58 $defaults->add($key, $info['description']); | |
59 if (array_key_exists('default', $info)) { | |
60 $defaults->setDefaultValue($key, $info['default']); | |
61 } | |
62 } | |
63 } | |
64 | |
65 | |
66 /** | |
67 * Default data. Everything should be provided during serialization; | |
68 * this is just as a fallback for unusual circumstances. | |
69 * @return array | |
70 */ | |
71 protected function defaultSerializationData() | |
72 { | |
73 return [ | |
74 'name' => '', | |
75 'description' => '', | |
76 'help' => '', | |
77 'aliases' => [], | |
78 'annotations' => [], | |
79 'example_usages' => [], | |
80 'return_type' => [], | |
81 'parameters' => [], | |
82 'arguments' => [], | |
83 'options' => [], | |
84 'mtime' => 0, | |
85 ]; | |
86 } | |
87 } |