Completed
Push — master ( 23d58c...27ec94 )
by Greg
02:24
created

OptionsHookDispatcher   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 4
dl 0
loc 31
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getOptions() 0 18 3
A callOptionHook() 0 9 3
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
}
45