Manager   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 109
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 3
dl 0
loc 109
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A setAssembler() 0 4 1
A setAutocomplete() 0 6 1
A setConfiguration() 0 6 1
A setPrompt() 0 6 1
A setReadLine() 0 6 1
A run() 0 21 2
A registerAutocomplete() 0 4 1
A validateEnvironment() 0 6 2
1
<?php
2
/**
3
 * @author stev leibelt <[email protected]>
4
 * @since 2015-07-02 
5
 */
6
7
namespace Net\Bazzline\Component\Cli\Readline;
8
9
use Net\Bazzline\Component\Cli\Readline\Configuration\Assembler;
10
use RuntimeException;
11
12
class Manager
13
{
14
    /** @var Assembler */
15
    private $assembler;
16
17
    /** @var Autocomplete */
18
    private $autocomplete;
19
20
    /** @var array */
21
    private $configuration;
22
23
    /** @var string */
24
    private $prompt;
25
26
    /** @var ReadLine */
27
    private $readLine;
28
29
    /**
30
     * @param Assembler $assembler
31
     */
32
    public function setAssembler(Assembler $assembler)
33
    {
34
        $this->assembler = $assembler;
35
    }
36
37
    /**
38
     * @param Autocomplete $autocomplete
39
     * @return $this
40
     */
41
    public function setAutocomplete(Autocomplete $autocomplete)
42
    {
43
        $this->autocomplete = $autocomplete;
44
45
        return $this;
46
    }
47
48
    /**
49
     * @param array $configuration
50
     * @return $this
51
     */
52
    public function setConfiguration(array $configuration)
53
    {
54
        $this->configuration = $configuration;
55
56
        return $this;
57
    }
58
59
    /**
60
     * @param string $prompt
61
     * @return $this
62
     */
63
    public function setPrompt($prompt)
64
    {
65
        $this->prompt = (string) $prompt;
66
67
        return $this;
68
    }
69
70
    /**
71
     * @param ReadLine $readLine
72
     * @return $this
73
     */
74
    public function setReadLine(ReadLine $readLine)
75
    {
76
        $this->readLine = $readLine;
77
78
        return $this;
79
    }
80
81
    public function run()
82
    {
83
        $this->validateEnvironment();
84
85
        $assembler      = $this->assembler;
86
        $autocomplete   = $this->autocomplete;
87
        $prompt         = $this->prompt;
88
        $readLine       = $this->readLine;
89
90
        $configuration  = $assembler->assemble($this->configuration);
91
92
        $autocomplete->setConfiguration($configuration);
93
        $readLine->setConfiguration($configuration);
94
95
        $this->registerAutocomplete($autocomplete);
96
97
        while (true) {
98
            $readLine($prompt);
99
            usleep(500000);
100
        }
101
    }
102
103
    /**
104
     * @param Autocomplete $autocomplete
105
     */
106
    private function registerAutocomplete(Autocomplete $autocomplete)
107
    {
108
        readline_completion_function($autocomplete);
109
    }
110
111
    /**
112
     * @throws RuntimeException
113
     */
114
    private function validateEnvironment()
115
    {
116
        if (!function_exists('readline')) {
117
            throw new RuntimeException('readline not installed');
118
        }
119
    }
120
}