annotate vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
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@0 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@0 48 ;
Chris@0 49
Chris@0 50 $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']);
Chris@0 51 $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']);
Chris@0 52 }
Chris@0 53
Chris@0 54 protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data)
Chris@0 55 {
Chris@0 56 foreach ($data as $key => $info) {
Chris@0 57 $info = (array)$info;
Chris@0 58 $defaults->add($key, $info['description']);
Chris@0 59 if (array_key_exists('default', $info)) {
Chris@0 60 $defaults->setDefaultValue($key, $info['default']);
Chris@0 61 }
Chris@0 62 }
Chris@0 63 }
Chris@0 64
Chris@0 65
Chris@0 66 /**
Chris@0 67 * Default data. Everything should be provided during serialization;
Chris@0 68 * this is just as a fallback for unusual circumstances.
Chris@0 69 * @return array
Chris@0 70 */
Chris@0 71 protected function defaultSerializationData()
Chris@0 72 {
Chris@0 73 return [
Chris@0 74 'name' => '',
Chris@0 75 'description' => '',
Chris@0 76 'help' => '',
Chris@0 77 'aliases' => [],
Chris@0 78 'annotations' => [],
Chris@0 79 'example_usages' => [],
Chris@0 80 'return_type' => [],
Chris@0 81 'parameters' => [],
Chris@0 82 'arguments' => [],
Chris@0 83 'options' => [],
Chris@0 84 'mtime' => 0,
Chris@0 85 ];
Chris@0 86 }
Chris@0 87 }