comparison vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Consolidation\AnnotatedCommand\Hooks\Dispatchers;
4
5 use Symfony\Component\Console\Command\Command;
6 use Consolidation\AnnotatedCommand\AnnotatedCommand;
7 use Consolidation\AnnotatedCommand\AnnotationData;
8 use Consolidation\AnnotatedCommand\Hooks\HookManager;
9 use Consolidation\AnnotatedCommand\Hooks\OptionHookInterface;
10
11 /**
12 * Call hooks
13 */
14 class OptionsHookDispatcher extends HookDispatcher implements OptionHookInterface
15 {
16 public function getOptions(
17 Command $command,
18 AnnotationData $annotationData
19 ) {
20 $hooks = [
21 HookManager::PRE_OPTION_HOOK,
22 HookManager::OPTION_HOOK,
23 HookManager::POST_OPTION_HOOK
24 ];
25 $optionHooks = $this->getHooks($hooks, $annotationData);
26 foreach ($optionHooks as $optionHook) {
27 $this->callOptionHook($optionHook, $command, $annotationData);
28 }
29 $commandInfoList = $this->hookManager->getHookOptionsForCommand($command);
30 if ($command instanceof AnnotatedCommand) {
31 $command->optionsHookForHookAnnotations($commandInfoList);
32 }
33 }
34
35 protected function callOptionHook($optionHook, $command, AnnotationData $annotationData)
36 {
37 if ($optionHook instanceof OptionHookInterface) {
38 return $optionHook->getOptions($command, $annotationData);
39 }
40 if (is_callable($optionHook)) {
41 return $optionHook($command, $annotationData);
42 }
43 }
44 }