Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
16 / 16
Http
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
8
100.00% covered (success)
100.00%
16 / 16
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 send
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 sendHttpRequest
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 sendAsyncHttpRequest
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
8 / 8
 getMethod
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
 createResponse
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
1<?php
2
3namespace Qmp\Laravel\MicroService\Client\Tools;
4
5use \GuzzleHttp\Client;
6use Illuminate\Support\Facades\Log;
7use Psr\Http\Message\ResponseInterface;
8use Qmp\Laravel\MicroService\Client\Exceptions\ClientException;
9
10class Http
11{
12    /**
13     * @var Client Http client
14     */
15    private $clientHttp;
16
17    /**
18     * Http constructor.
19     * @param Client $client
20     */
21    public function __construct(Client $client)
22    {
23        $this->clientHttp = $client;
24    }
25
26    /**
27     * @param Request $request
28     * @return \GuzzleHttp\Promise\PromiseInterface|Response
29     * @throws ClientException
30     */
31    public function send(Request $request)
32    {
33        if ($request->hasCallback()) {
34            return $this->sendAsyncHttpRequest($request);
35        } else {
36            return $this->sendHttpRequest($request);
37        }
38    }
39
40    /**
41     * @param Request $request
42     * @return Response
43     */
44    private function sendHttpRequest(Request $request)
45    {
46        return $this->createResponse($this->clientHttp->request($this->getMethod($request), $request->getPath(), $request->getParameters()));
47    }
48
49    /**
50     * @param Request $request
51     * @return \GuzzleHttp\Promise\PromiseInterface
52     */
53    private function sendAsyncHttpRequest(Request $request)
54    {
55        $this->clientHttp = new \GuzzleHttp\Client($request->getParameters());
56        $requestPsr7 = new \GuzzleHttp\Psr7\Request($this->getMethod($request), $request->getPath());
57
58        $promise = $this->clientHttp->sendAsync($requestPsr7)->then(function ($response) use ($request) {
59            $response = $this->createResponse($response);
60            $request->getCallback()($response);
61            return $response;
62        });
63
64        return $promise;
65    }
66
67    private function getMethod(Request $request)
68    {
69        return  $request->getMethod() === Request::METHOD_PUT ? Request::METHOD_POST : $request->getMethod();
70    }
71
72    /**
73     * @param ResponseInterface $response
74     * @return Response
75     */
76    private function createResponse(ResponseInterface $response)
77    {
78        return new Response($response);
79    }
80}