Minor dependency updates
[yaffs-website] / vendor / consolidation / annotated-command / src / Hooks / Dispatchers / ValidateHookDispatcher.php
1 <?php
2
3 namespace Consolidation\AnnotatedCommand\Hooks\Dispatchers;
4
5 use Consolidation\AnnotatedCommand\AnnotationData;
6 use Consolidation\AnnotatedCommand\CommandData;
7 use Consolidation\AnnotatedCommand\CommandError;
8 use Consolidation\AnnotatedCommand\Hooks\HookManager;
9 use Consolidation\AnnotatedCommand\Hooks\ValidatorInterface;
10
11 /**
12  * Call hooks
13  */
14 class ValidateHookDispatcher extends HookDispatcher implements ValidatorInterface
15 {
16     public function validate(CommandData $commandData)
17     {
18         $hooks = [
19             HookManager::PRE_ARGUMENT_VALIDATOR,
20             HookManager::ARGUMENT_VALIDATOR,
21             HookManager::POST_ARGUMENT_VALIDATOR,
22             HookManager::PRE_COMMAND_HOOK,
23             HookManager::COMMAND_HOOK,
24         ];
25         $validators = $this->getHooks($hooks, $commandData->annotationData());
26         foreach ($validators as $validator) {
27             $validated = $this->callValidator($validator, $commandData);
28             if ($validated === false) {
29                 return new CommandError();
30             }
31             if (is_object($validated)) {
32                 return $validated;
33             }
34         }
35     }
36
37     protected function callValidator($validator, CommandData $commandData)
38     {
39         if ($validator instanceof ValidatorInterface) {
40             return $validator->validate($commandData);
41         }
42         if (is_callable($validator)) {
43             return $validator($commandData);
44         }
45     }
46 }