UnseeApi   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 4
dl 0
loc 73
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 2
A call() 0 14 1
A processResponse() 0 10 2
A buildRequest() 0 10 1
1
<?php
2
3
namespace Bex\Behat\ScreenshotExtension\Driver\Service;
4
5
use Buzz\Client\Curl;
6
use Buzz\Message\Form\FormRequest;
7
use Buzz\Message\Form\FormUpload;
8
use Buzz\Message\Response;
9
10
class UnseeApi
11
{
12
    const REQUEST_URL = 'https://unsee.cc/upload/';
13
    const IMAGE_BASE_URL = 'https://unsee.cc/';
14
15
    /**
16
     * @var Curl
17
     */
18
    private $client;
19
20
    /**
21
     * @param Curl $client
22
     */
23
    public function __construct(Curl $client = null)
24
    {
25
        $this->client = $client ?: new Curl();
26
    }
27
28
    /**
29
     * @param  string $binaryImage
30
     * @param  string $filename
31
     * @param  int    $expire
32
     *
33
     * @return Response
34
     */
35
    public function call($binaryImage, $filename, $expire)
36
    {
37
        $response = new Response();
38
39
        $image = new FormUpload();
40
        $image->setFilename($filename);
41
        $image->setContent($binaryImage);
42
43
        $request = $this->buildRequest($image, $expire);
44
        $this->client->setOption(CURLOPT_TIMEOUT, 10000);
45
        $this->client->send($request, $response);
46
47
        return $this->processResponse($response);
48
    }
49
50
    /**
51
     * @param  Response $response
52
     *
53
     * @return string
54
     */
55
    private function processResponse(Response $response)
56
    {
57
        $responseData = json_decode($response->getContent(), true);
58
59
        if (!isset($responseData['hash'])) {
60
            throw new \RuntimeException('Screenshot upload failed');
61
        }
62
63
        return self::IMAGE_BASE_URL . $responseData['hash'];
64
    }
65
66
    /**
67
     * @param  FormUpload $image
68
     * @param  int        $expire
69
     *
70
     * @return FormRequest
71
     */
72
    private function buildRequest($image, $expire)
73
    {
74
        $request = new FormRequest();
75
        
76
        $request->fromUrl(self::REQUEST_URL);
77
        $request->setField('image', $image);
78
        $request->setField('time', $expire);
79
80
        return $request;
81
    }
82
}