Version 1
[yaffs-website] / vendor / consolidation / annotated-command / src / Hooks / Dispatchers / ValidateHookDispatcher.php
diff --git a/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php b/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php
new file mode 100644 (file)
index 0000000..fb4f489
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+namespace Consolidation\AnnotatedCommand\Hooks\Dispatchers;
+
+use Consolidation\AnnotatedCommand\AnnotationData;
+use Consolidation\AnnotatedCommand\CommandData;
+use Consolidation\AnnotatedCommand\CommandError;
+use Consolidation\AnnotatedCommand\Hooks\HookManager;
+use Consolidation\AnnotatedCommand\Hooks\ValidatorInterface;
+
+/**
+ * Call hooks
+ */
+class ValidateHookDispatcher extends HookDispatcher implements ValidatorInterface
+{
+    public function validate(CommandData $commandData)
+    {
+        $hooks = [
+            HookManager::PRE_ARGUMENT_VALIDATOR,
+            HookManager::ARGUMENT_VALIDATOR,
+            HookManager::POST_ARGUMENT_VALIDATOR,
+            HookManager::PRE_COMMAND_HOOK,
+            HookManager::COMMAND_HOOK,
+        ];
+        $validators = $this->getHooks($hooks, $commandData->annotationData());
+        foreach ($validators as $validator) {
+            $validated = $this->callValidator($validator, $commandData);
+            if ($validated === false) {
+                return new CommandError();
+            }
+            if (is_object($validated)) {
+                return $validated;
+            }
+        }
+    }
+
+    protected function callValidator($validator, CommandData $commandData)
+    {
+        if ($validator instanceof ValidatorInterface) {
+            return $validator->validate($commandData);
+        }
+        if (is_callable($validator)) {
+            return $validator($commandData);
+        }
+    }
+}