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

CurlWebLoader   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%
Metric Value
dl 0
loc 76
ccs 26
cts 26
cp 1
rs 10
wmc 8
lcom 1
cbo 1

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A load() 0 14 3
A getResponseBodyAndStatusCode() 0 7 1
A getDefaultCurlOptions() 0 6 1
A setCurlOptions() 0 9 2
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