AbstractResponseParser::ensureValidResponseName()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
ccs 6
cts 6
cp 1
rs 9.4285
cc 3
eloc 5
nc 3
nop 2
crap 3
1
<?php
2
3
4
namespace Beanie\Command\ResponseParser;
5
6
7
use Beanie\Command\Response;
8
use Beanie\Exception\BadFormatException;
9
use Beanie\Exception\InternalErrorException;
10
use Beanie\Exception\OutOfMemoryException;
11
use Beanie\Exception\UnexpectedResponseException;
12
use Beanie\Exception\UnknownCommandException;
13
use Beanie\Server\Server;
14
15
abstract class AbstractResponseParser implements ResponseParserInterface
16
{
17
    protected static $generalErrorResponses = [
18
        Response::ERROR_BAD_FORMAT => BadFormatException::class,
19
        Response::ERROR_INTERNAL_ERROR => InternalErrorException::class,
20
        Response::ERROR_OUT_OF_MEMORY => OutOfMemoryException::class,
21
        Response::ERROR_UNKNOWN_COMMAND => UnknownCommandException::class
22
    ];
23
24
    /** @var string[] */
25
    private $acceptableResponses = [];
26
27
    /** @var array */
28
    private $expectedErrorResponses = [];
29
30
    /**
31
     * @param string[] $acceptableResponses
32
     * @param string[] $expectedErrorResponses
33
     */
34 56
    public function __construct(array $acceptableResponses = [], array $expectedErrorResponses = [])
35
    {
36 56
        $this->acceptableResponses = $acceptableResponses;
37 56
        $this->expectedErrorResponses = array_merge(static::$generalErrorResponses, $expectedErrorResponses);
38 56
    }
39
40
    /**
41
     * @param string $responseLine
42
     * @param Server $server
43
     * @return Response
44
     * @throws UnexpectedResponseException
45
     */
46
    abstract public function parseResponse($responseLine, Server $server);
47
48
    /**
49
     * @param string $responseLine
50
     * @return string
51
     */
52 7
    protected function getResponseName($responseLine)
53
    {
54 7
        return ($spacePosition = strpos($responseLine, ' ')) !== false
55 7
            ? substr($responseLine, 0, $spacePosition)
56 4
            : $responseLine
57 7
            ;
58
    }
59
60
    /**
61
     * @param string $responseName
62
     * @param Server $server
63
     * @throws UnexpectedResponseException
64
     */
65 7
    protected function ensureValidResponseName($responseName, Server $server)
66
    {
67 7
        if (isset($this->expectedErrorResponses[$responseName])) {
68 1
            throw new $this->expectedErrorResponses[$responseName]($server);
69
        }
70
71 6
        if (!in_array($responseName, $this->acceptableResponses)) {
72 1
            throw new UnexpectedResponseException($responseName, $server);
73
        }
74 5
    }
75
}
76