Response::checkResponseStatus()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 8
ccs 0
cts 7
cp 0
crap 6
rs 9.4285
1
<?php
2
namespace ApigilityClient\Http;
3
4
use Zend\Http\Client as ZendHttpClient,
5
    Zend\Http\Response as ZendHttpResponse;
6
7
use ApigilityClient\Exception\RuntimeException,
8
    ApigilityClient\Http\Response\TriggerException,
9
    ApigilityClient\Http\Response\Content\HalJson,
10
    ApigilityClient\Http\Response\Content\EmptyContent;
11
12
final class Response
13
{
14
    /**
15
     * @var Zend\Http\Client
16
     */
17
    private $httpClient;
18
19
    /**
20
     * @var Zend\Http\Response
21
     */
22
    private $httpResponse;
23
24
    /**
25
     * @var ApiClient\Http\Response\Content\ContentInterface
26
     */
27
    private $strategyContent;
28
29
    /**
30
    * Construtor
31
    *
32
    * @param Zend\Http\Client   $client
33
    * @param Zend\Http\Response $response
34
    */
35
    public function __construct(ZendHttpClient $client, ZendHttpResponse $response)
36
    {
37
        $this->httpClient = $client;
0 ignored issues
show
Documentation Bug introduced by
It seems like $client of type object<Zend\Http\Client> is incompatible with the declared type object<ApigilityClient\Http\Zend\Http\Client> of property $httpClient.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
38
        $this->httpResponse = $response;
0 ignored issues
show
Documentation Bug introduced by
It seems like $response of type object<Zend\Http\Response> is incompatible with the declared type object<ApigilityClient\Http\Zend\Http\Response> of property $httpResponse.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
39
40
        try {
41
            $this->checkResponseStatus();
42
43
            if (204 == $this->httpResponse->getStatusCode()) {
44
                $this->strategyContent = new EmptyContent($this->httpClient, $this->httpResponse);
0 ignored issues
show
Documentation Bug introduced by
It seems like new \ApigilityClient\Htt...t, $this->httpResponse) of type object<ApigilityClient\H...e\Content\EmptyContent> is incompatible with the declared type object<ApigilityClient\H...ntent\ContentInterface> of property $strategyContent.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
45
            } else {
46
                $contentType = $this->httpResponse->getHeaders()->get('Content-Type')->getFieldValue();
47
48
                switch (trim($contentType)) {
49
                    case HalJson::CONTENT_TYPE :
0 ignored issues
show
Coding Style introduced by
There must be no space before the colon in a CASE statement

As per the PSR-2 coding standard, there must not be a space in front of the colon in case statements.

switch ($selector) {
    case "A": //right
        doSomething();
        break;
    case "B" : //wrong
        doSomethingElse();
        break;
}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
50
                        $this->strategyContent = new HalJson($this->httpClient, $this->httpResponse);
0 ignored issues
show
Documentation Bug introduced by
It seems like new \ApigilityClient\Htt...t, $this->httpResponse) of type object<ApigilityClient\H...sponse\Content\HalJson> is incompatible with the declared type object<ApigilityClient\H...ntent\ContentInterface> of property $strategyContent.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
51
                        break;
52
53
                    default :
0 ignored issues
show
Coding Style introduced by
There must be no space before the colon in a DEFAULT statement

As per the PSR-2 coding standard, there must not be a space in front of the colon in the default statement.

switch ($expr) {
    default : //wrong
        doSomething();
        break;
}

switch ($expr) {
    default: //right
        doSomething();
        break;
}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
54
                        $errorMessage = sprintf(
55
                            'The apigility server returned a mime type ("%s") that cannot be parsed by apigility client',
56
                            $contentType
57
                        );
58
59
                    return new TriggerException($this->httpClient, $this->httpResponse, $errorMessage);
60
                }
61
            }
62
63
        } catch (RuntimeException $e) {
64
	   throw $e;
65
        }
66
    }
67
68
    /**
69
     * Get the content
70
     *
71
     * @return mixed
72
     */
73
    public function getContent()
74
    {
75
        return $this->strategyContent->getContent();
76
    }
77
78
    /**
79
     * Check response status
80
     *
81
     * @throws ApigilityClient\Exception\RuntimeException
82
     * @return Bool
83
     */
84
    private function checkResponseStatus()
85
    {
86
        if (! $this->httpResponse->isSuccess()) {
87
            return new TriggerException($this->httpClient, $this->httpResponse);
88
        }
89
90
        return true;
91
    }
92
}
93