Completed
Push — master ( 3deaa5...4c5cb4 )
by Changwan
06:31
created

Manager   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 3

Test Coverage

Coverage 81.82%

Importance

Changes 0
Metric Value
dl 0
loc 68
ccs 18
cts 22
cp 0.8182
rs 10
c 0
b 0
f 0
wmc 8
lcom 2
cbo 3

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A connect() 0 7 2
A setAsGlobal() 0 6 1
A getConnectorFromConfig() 0 11 3
A connection() 0 4 1
1
<?php
2
namespace Wandu\Database;
3
4
use ArrayAccess;
5
use Wandu\Database\Connector\MysqlConnector;
6
use Wandu\Database\Contracts\ConnectionInterface;
7
use Wandu\Database\Contracts\ConnectorInterface;
8
use Wandu\Database\Exception\DriverNotFoundException;
9
10
class Manager
11
{
12
    /** @var \Wandu\Database\Manager */
13
    protected static $instance;
14
15
    /** @var \ArrayAccess */
16
    protected $container;
17
18
    /** @var array */
19
    protected $connections = [];
20
21
    /**
22
     * @param \ArrayAccess $container
23
     */
24 2
    public function __construct(ArrayAccess $container = null)
25
    {
26 2
        $this->container = $container;
27 2
    }
28
29
    /**
30
     * @param array|\Wandu\Database\Contracts\ConnectorInterface $information
31
     * @param string $name
32
     * @return \Wandu\Database\Contracts\ConnectionInterface
33
     */
34 2
    public function connect($information, $name = 'default')
35
    {
36 2
        if (!$information instanceof ConnectorInterface) {
37 2
            $information = $this->getConnectorFromConfig($information);
38 1
        }
39 1
        return $this->connection($information->connect($this->container), $name);
40
    }
41
42
    /**
43
     * @param \Wandu\Database\Contracts\ConnectionInterface $connection
44
     * @param string $name
45
     * @return \Wandu\Database\Contracts\ConnectionInterface
46
     */
47 1
    public function connection(ConnectionInterface $connection, $name = 'default')
48
    {
49 1
        return $this->connections[$name] = $connection;
50
    }
51
52
    /**
53
     * @return \Wandu\Database\Manager
54
     */
55
    public function setAsGlobal()
56
    {
57
        $beforeInstance = static::$instance;
58
        static::$instance = $this;
59
        return $beforeInstance;
60
    }
61
62
    /**
63
     * @param array $config
64
     * @return \Wandu\Database\Contracts\ConnectorInterface
65
     */
66 2
    private function getConnectorFromConfig(array $config)
67
    {
68 2
        if (!isset($config['driver'])) {
69 1
            throw new DriverNotFoundException();
70
        }
71 2
        switch ($config['driver']) {
72 2
            case 'mysql':
73 1
                return new MysqlConnector($config);
74 1
        }
75 1
        throw new DriverNotFoundException($config['driver']);
76
    }
77
}
78