Client::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 5
c 0
b 0
f 0
ccs 4
cts 4
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
crap 1
1
<?php
2
3
namespace Rs\VersionEye;
4
5
use Rs\VersionEye\Api\Api;
6
use Rs\VersionEye\Http\ClientFactory;
7
use Rs\VersionEye\Http\HttpClient;
8
9
/**
10
 * Client for interacting with the API.
11
 *
12
 * @author Robert Schönthal <[email protected]>
13
 */
14
class Client
15
{
16
    /**
17
     * @var HttpClient
18
     */
19
    private $client;
20
21
    private $token;
22
    /**
23
     * @var string
24
     */
25
    private $url;
26
27
    /**
28
     * @param HttpClient $client
29
     * @param string     $url
30
     */
31 10
    public function __construct(HttpClient $client = null, $url = 'https://www.versioneye.com/api/v2/')
32
    {
33 10
        $this->client = $client;
34 10
        $this->url    = $url;
35 10
    }
36
37
    /**
38
     * returns an api.
39
     *
40
     * @param string $name
41
     *
42
     * @throws \InvalidArgumentException
43
     *
44
     * @return Api
45
     */
46 9
    public function api($name)
47
    {
48 9
        $this->initializeClient($this->url, $this->client);
49
50 9
        $class = 'Rs\\VersionEye\\Api\\' . ucfirst($name);
51
52 9
        if (class_exists($class)) {
53 8
            return new $class($this->client);
54
        } else {
55 1
            throw new \InvalidArgumentException('unknown api "' . $name . '" requested');
56
        }
57
    }
58
59
    /**
60
     * authorizes a api.
61
     *
62
     * @param $token
63
     */
64 1
    public function authorize($token)
65
    {
66 1
        $this->token = $token;
67 1
    }
68
69
    /**
70
     * initializes the http client.
71
     *
72
     * @param string     $url
73
     * @param HttpClient $client
74
     *
75
     * @return HttpClient
76
     */
77 9
    private function initializeClient($url, HttpClient $client = null)
78
    {
79 9
        if ($client) {
80 1
            return $this->client = $client;
81
        }
82
83 8
        return $this->client = $this->createDefaultHttpClient($url);
84
    }
85
86
    /**
87
     * @param string $url
88
     *
89
     * @return HttpClient
90
     */
91 8
    private function createDefaultHttpClient($url)
92
    {
93 8
        return ClientFactory::create($url, $this->token);
94
    }
95
}
96