annotate vendor/consolidation/annotated-command/src/ParameterInjection.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@17 1 <?php
Chris@17 2 namespace Consolidation\AnnotatedCommand;
Chris@17 3
Chris@17 4 /**
Chris@17 5 * Prepare parameter list for execurion. Handle injection of any
Chris@17 6 * special values (e.g. $input and $output) into the parameter list.
Chris@17 7 */
Chris@17 8 class ParameterInjection implements ParameterInjector
Chris@17 9 {
Chris@17 10 public function __construct()
Chris@17 11 {
Chris@17 12 $this->register('Symfony\Component\Console\Input\InputInterface', $this);
Chris@17 13 $this->register('Symfony\Component\Console\Output\OutputInterface', $this);
Chris@17 14 }
Chris@17 15
Chris@17 16 public function register($interfaceName, ParameterInjector $injector)
Chris@17 17 {
Chris@17 18 $this->injectors[$interfaceName] = $injector;
Chris@17 19 }
Chris@17 20
Chris@17 21 public function args($commandData)
Chris@17 22 {
Chris@17 23 return array_merge(
Chris@17 24 $commandData->injectedInstances(),
Chris@17 25 $commandData->getArgsAndOptions()
Chris@17 26 );
Chris@17 27 }
Chris@17 28
Chris@17 29 public function injectIntoCommandData($commandData, $injectedClasses)
Chris@17 30 {
Chris@17 31 foreach ($injectedClasses as $injectedClass) {
Chris@17 32 $injectedInstance = $this->getInstanceToInject($commandData, $injectedClass);
Chris@17 33 $commandData->injectInstance($injectedInstance);
Chris@17 34 }
Chris@17 35 }
Chris@17 36
Chris@17 37 protected function getInstanceToInject(CommandData $commandData, $interfaceName)
Chris@17 38 {
Chris@17 39 if (!isset($this->injectors[$interfaceName])) {
Chris@17 40 return null;
Chris@17 41 }
Chris@17 42
Chris@17 43 return $this->injectors[$interfaceName]->get($commandData, $interfaceName);
Chris@17 44 }
Chris@17 45
Chris@17 46 public function get(CommandData $commandData, $interfaceName)
Chris@17 47 {
Chris@17 48 switch ($interfaceName) {
Chris@17 49 case 'Symfony\Component\Console\Input\InputInterface':
Chris@17 50 return $commandData->input();
Chris@17 51 case 'Symfony\Component\Console\Output\OutputInterface':
Chris@17 52 return $commandData->output();
Chris@17 53 }
Chris@17 54
Chris@17 55 return null;
Chris@17 56 }
Chris@17 57 }