ReadLine::__invoke()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @author stev leibelt <[email protected]>
4
 * @since 2015-07-05 
5
 */
6
7
namespace Net\Bazzline\Component\Cli\Readline;
8
9
use Net\Bazzline\Component\Cli\Readline\Configuration\Executable;
10
11
class ReadLine
12
{
13
    /** @var array */
14
    private $configuration;
15
16
    /**
17
     * @param string $prompt
18
     */
19
    public function __invoke($prompt)
20
    {
21
        $this->readLine($prompt);
22
    }
23
24
    /**
25
     * @param array $configuration
26
     */
27
    public function setConfiguration(array $configuration)
28
    {
29
        $this->configuration = $configuration;
30
    }
31
32
    /**
33
     * @param string $prompt
34
     */
35
    public function readLine($prompt)
36
    {
37
        $configuration  = $this->configuration;
38
        $line           = trim(readline($prompt));
39
        $tokens         = explode(' ', $line);
40
41
        if (!empty($tokens)) {
42
            $this->executeIfPossible($tokens, $configuration);
43
            readline_add_history($line);
44
        }
45
    }
46
47
    /**
48
     * @param array $tokens
49
     * @param $configuration
50
     */
51
    private function executeIfPossible(array $tokens, $configuration)
52
    {
53
        if ($configuration instanceof Executable) {
54
            $configuration->execute($tokens);
55
        } else {
56
            $token          = array_shift($tokens);
57
            $isValidToken   = (!is_null($token) && (strlen($token) > 0));
58
59
            if ($isValidToken) {
60
                if (isset($configuration[$token])) {
61
                    $this->executeIfPossible($tokens, $configuration[$token]);
62
                }
63
            }
64
        }
65
    }
66
}