comparison vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.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 Consolidation\AnnotatedCommand\CommandData;
6 use Consolidation\AnnotatedCommand\Hooks\HookManager;
7 use Psr\Log\LoggerAwareInterface;
8 use Psr\Log\LoggerAwareTrait;
9
10 /**
11 * Call hooks.
12 */
13 class ReplaceCommandHookDispatcher extends HookDispatcher implements LoggerAwareInterface
14 {
15
16 use LoggerAwareTrait;
17
18 /**
19 * @return int
20 */
21 public function hasReplaceCommandHook()
22 {
23 return (bool) count($this->getReplaceCommandHooks());
24 }
25
26 /**
27 * @return \callable[]
28 */
29 public function getReplaceCommandHooks()
30 {
31 $hooks = [
32 HookManager::REPLACE_COMMAND_HOOK,
33 ];
34 $replaceCommandHooks = $this->getHooks($hooks);
35
36 return $replaceCommandHooks;
37 }
38
39 /**
40 * @param \Consolidation\AnnotatedCommand\CommandData $commandData
41 *
42 * @return callable
43 */
44 public function getReplacementCommand(CommandData $commandData)
45 {
46 $replaceCommandHooks = $this->getReplaceCommandHooks();
47
48 // We only take the first hook implementation of "replace-command" as the replacement. Commands shouldn't have
49 // more than one replacement.
50 $replacementCommand = reset($replaceCommandHooks);
51
52 if ($this->logger && count($replaceCommandHooks) > 1) {
53 $command_name = $commandData->annotationData()->get('command', 'unknown');
54 $message = "Multiple implementations of the \"replace - command\" hook exist for the \"$command_name\" command.\n";
55 foreach ($replaceCommandHooks as $replaceCommandHook) {
56 $class = get_class($replaceCommandHook[0]);
57 $method = $replaceCommandHook[1];
58 $hook_name = "$class->$method";
59 $message .= " - $hook_name\n";
60 }
61 $this->logger->warning($message);
62 }
63
64 return $replacementCommand;
65 }
66 }