comparison vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.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\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 }