Completed
Push — master ( 2ec9f0...d428ee )
by Andrii
30:10 queued 22:08
created

LibrariesioRepository::request()   B

Complexity

Conditions 6
Paths 12

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 18
rs 8.8571
cc 6
eloc 11
nc 12
nop 3
1
<?php
2
/**
3
 * Asset Packagist.
4
 *
5
 * @link      https://github.com/hiqdev/asset-packagist
6
 * @package   asset-packagist
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2016-2017, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiqdev\assetpackagist\librariesio;
12
13
use GuzzleHttp\Client;
14
use yii\base\Component;
15
16
class LibrariesioRepository extends Component
17
{
18
    /**
19
     * @var string Base URI for https://libraries.io
20
     */
21
    public $baseUri = 'https://libraries.io/api/';
22
23
    /**
24
     * Without api key, has 30/request/minute hate limit
25
     * With api key, has 60/request/minute hate limit.
26
     * @var string The user API Key
27
     */
28
    public $apiKey;
29
30
    /**
31
     * Options for Guzzle client
32
     * Example:
33
     * [
34
     *   'timeout'         => 0,
35
     *   'allow_redirects' => false,
36
     *   'proxy'           => '192.168.16.1:10'
37
     * ].
38
     *
39
     * @var array
40
     */
41
    public $clientOptions = [];
42
43
    /**
44
     * The Guzzle client.
45
     * @var Client
46
     */
47
    protected $client;
48
49
    public function init()
50
    {
51
        parent::init();
52
53
        $this->clientOptions['base_uri'] = $this->baseUri;
54
55
        $this->client = new Client($this->clientOptions);
56
    }
57
58
    /**
59
     * Send request to server with api_key and return a Response.
60
     * @param string $method
61
     * @param string $uri
62
     * @param array $options
63
     * @throws \GuzzleHttp\Exception\BadResponseException
64
     * @return \GuzzleHttp\Psr7\Response
65
     */
66
    public function request($method, $uri = '', array $options = [])
67
    {
68
        if (!isset($options['query'])) {
69
            $options['query'] = [];
70
        }
71
        if ($this->apiKey && !isset($options['query']['api_key'])) {
72
            $options['query']['api_key'] = $this->apiKey;
73
        }
74
75
        try {
76
            return $this->client->request($method, $uri, $options);
77
        } catch (\GuzzleHttp\Exception\BadResponseException $ex) {
78
            if ($ex->hasResponse()) {
79
                return $ex->getResponse();
80
            }
81
            throw $ex;
82
        }
83
    }
84
85
    /**
86
     * Search package in https://libraries.io.
87
     * @see https://libraries.io/api/#project-search
88
     * @param array $query
89
     * @return \GuzzleHttp\Psr7\Response
90
     */
91
    public function search($query = [])
92
    {
93
        return $this->request('GET', 'search', ['query' => $query]);
94
    }
95
96
    /**
97
     * Return the package info from https://libraries.io.
98
     * @see https://libraries.io/api/#project
99
     * @param string $platform
100
     * @param string $name
101
     * @return \GuzzleHttp\Psr7\Response
102
     */
103
    public function getProject($platform, $name)
104
    {
105
        return $this->request('GET', $platform . '/' . $name);
106
    }
107
}
108