Response   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 6

Test Coverage

Coverage 0%

Importance

Changes 4
Bugs 2 Features 0
Metric Value
c 4
b 2
f 0
dl 0
loc 81
wmc 7
lcom 2
cbo 6
ccs 0
cts 37
cp 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getContent() 0 4 1
B __construct() 0 32 4
A checkResponseStatus() 0 8 2
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