Completed
Push — master ( 5927eb...1e13db )
by
unknown
04:04
created

CurlWebLoader::getResponseBodyAndStatusCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 1
rs 9.4285
1
<?php
2
3
namespace League\JsonGuard\Loaders;
4
5
use League\JsonGuard;
6
use League\JsonGuard\Loader;
7
8
class CurlWebLoader implements Loader
9
{
10
    /**
11
     * @var string
12
     */
13
    private $prefix;
14
15
    /**
16
     * @var array
17
     */
18
    private $curlOptions;
19
20
    /**
21
     * @param string $prefix
22
     * @param array  $curlOptions
23
     */
24 88
    public function __construct($prefix, array $curlOptions = null)
25
    {
26 88
        $this->prefix      = $prefix;
27 88
        $this->setCurlOptions($curlOptions);
28 88
    }
29
30
    /**
31
     * {@inheritdoc}
32
     */
33 8
    public function load($path)
34
    {
35 8
        $uri = $this->prefix . $path;
36 8
        $ch = curl_init($uri);
37 8
        curl_setopt_array($ch, $this->curlOptions);
38 8
        list($response, $statusCode) = $this->getResponseBodyAndStatusCode($ch);
39 8
        curl_close($ch);
40
41 8
        if ($statusCode === 404 || !$response) {
42 4
            throw JsonGuard\Exceptions\SchemaLoadingException::create($uri);
43
        }
44
45 4
        return JsonGuard\json_decode($response);
46
    }
47
48
    /**
49
     * @param resource $ch
50
     *
51
     * @return array
52
     */
53 8
    private function getResponseBodyAndStatusCode($ch)
54
    {
55 8
        $response   = curl_exec($ch);
56 8
        $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
57
58 8
        return [$response, $statusCode];
59
    }
60
61
    /**
62
     * @return array
63
     */
64 88
    private function getDefaultCurlOptions()
65
    {
66
        return [
67 88
            CURLOPT_RETURNTRANSFER => true,
68 88
        ];
69
    }
70
71
    /**
72
     * @param array|null $curlOptions
73
     */
74 88
    private function setCurlOptions($curlOptions)
75
    {
76 88
        if (is_array($curlOptions)) {
77 2
            $this->curlOptions = $curlOptions + $this->getDefaultCurlOptions();
78 2
            return;
79
        }
80
81 86
        $this->curlOptions = $this->getDefaultCurlOptions();
82 86
    }
83
}
84