Test Failed
Pull Request — master (#13)
by
unknown
02:56
created

Client::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Digitonic\IexCloudSdk;
4
5
use Illuminate\Support\Arr;
6
use GuzzleHttp\Client as Guzzle;
7
use GuzzleHttp\Exception\ClientException;
8
use GuzzleHttp\Exception\GuzzleException;
9
use Psr\Http\Message\RequestInterface;
10
use Psr\Http\Message\ResponseInterface;
11
use Digitonic\IexCloudSdk\Contracts\IEXCloud;
12
use Digitonic\IexCloudSdk\Exceptions\WrongData;
13
14
class Client implements IEXCloud
15
{
16
    /**
17
     * @var Guzzle|null
18
     */
19
    private $client = null;
20
21
    /**
22
     * Client constructor.
23
     *
24
     * @param  Guzzle  $client
25
     */
26 92
    public function __construct(Guzzle $client)
27
    {
28 92
        $this->client = $client;
29 92
    }
30
31
    /**
32
     * @param  RequestInterface  $request
33
     * @param  array  $options
34
     *
35
     * @return ResponseInterface
36
     * @throws GuzzleException
37
     * @throws WrongData
38
     */
39
    public function send(RequestInterface $request, array $options = []): ResponseInterface
40
    {
41
        try {
42
            if($request->getMethod() == 'GET') {
43
                $options['query'] = $this->mergeQuery($request);
44
            }
45
            return $this->client->send($request, $options);
46
        }
47
        catch (ClientException $e) {
48
            throw WrongData::invalidValuesProvided($e->getMessage());
49
        }
50
    }
51
52
    /**
53
     * Merge the global query with current query (if has it)
54
     *
55
     * @param RequestInterface $request
56
     * @return array
57
     */
58
    private function mergeQuery(RequestInterface $request) {
59
        $currentQueryArray = Arr::get($this->client->getConfig(), 'query');
60
        $newQueryArray = [];
61
        if($query = $request->getUri()->getQuery()) {
62
            parse_str($query, $newQueryArray);
63
        }
64
65
        return array_merge($currentQueryArray, $newQueryArray);
66
    }
67
}
68