annotate vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php @ 19:fa3358dc1485 tip

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