Project::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 3
crap 1
1
<?php
2
3
namespace Notimatica\Driver;
4
5
use Notimatica\Driver\Providers\AbstractProvider;
6
7
class Project
8
{
9
    /**
10
     * @var string
11
     */
12
    public $name = '';
13
    /**
14
     * @var array
15
     */
16
    public $config = [];
17
    /**
18
     * @var AbstractProvider[]
19
     */
20
    public $providers = [];
21
    /**
22
     * @var string
23
     */
24
    public $baseUrl;
25
26
    /**
27
     * Create a new Project.
28
     *
29
     * @param string $name
30
     * @param string $baseUrl
31
     * @param array $config
32
     */
33 15
    public function __construct($name, $baseUrl, array $config = [])
34
    {
35 15
        $this->name = $name;
36 15
        $this->config = $config;
37 15
        $this->baseUrl = $baseUrl;
38
39 15
        $this->buildProviders();
40 15
    }
41
42
    /**
43
     * Make providers.
44
     *
45
     * @return AbstractProvider[]
46
     */
47 1
    public function getProviders()
48
    {
49 1
        return $this->providers;
50 1
    }
51
52
    /**
53
     * Fetch connected provider.
54
     *
55
     * @param  string $name
56
     * @return AbstractProvider
57
     */
58 4
    public function getProvider($name)
59
    {
60 4
        if (! $this->providerConnected($name)) {
61 1
            throw new \RuntimeException("Unsupported provider '{$name}'");
62
        }
63
64 4
        return $this->providers[$name];
65
    }
66
67
    /**
68
     * Check if project has required provider.
69
     *
70
     * @param  string $name
71
     * @return bool
72
     */
73 6
    public function providerConnected($name)
74
    {
75 6
        return array_key_exists($name, $this->providers);
76
    }
77
78
    /**
79
     * Build providers objects.
80
     */
81 15
    public function buildProviders()
82
    {
83 15
        $providersFactory = new ProvidersFactory();
84
85 15
        if (! empty($this->config['providers']) && is_array($this->config['providers'])) {
86 15
            foreach ($this->config['providers'] as $name => $options) {
87 15
                $this->providers[$name] = $providersFactory->make($name, $options)->setProject($this);
88 15
            }
89 15
        }
90 15
    }
91
}
92