Completed
Push — master ( b3ba9b...5f072b )
by Sébastien
18:57 queued 16:38
created

AdapterFactory   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 8

Test Coverage

Coverage 86.21%

Importance

Changes 6
Bugs 2 Features 1
Metric Value
wmc 12
c 6
b 2
f 1
lcom 0
cbo 8
dl 0
loc 88
ccs 25
cts 29
cp 0.8621
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createAdapterFromCapsule5() 0 4 1
A createAdapterFromZendDb2() 0 4 1
A createAdapterFromDoctrine2() 0 4 1
B createAdapterFromResource() 0 13 6
A getAdapterFromPdo() 0 17 3
1
<?php
2
3
namespace Soluble\DbWrapper;
4
5
class AdapterFactory
6
{
7
8
    /**
9
     * Create adapter from an existing doctrine/dbal connection
10
     *
11
     * @param \Illuminate\Database\Capsule\Manager $capsule
12
     * @return \Soluble\DbWrapper\Adapter\Illuminate\Capsule5Adapter
13
     */
14
15 1
    public static function createAdapterFromCapsule5(\Illuminate\Database\Capsule\Manager $capsule)
16
    {
17 1
        return new \Soluble\DbWrapper\Adapter\Laravel\Capsule5Adapter($capsule);
18
    }
19
20
    /**
21
     * Create adapter from an existing doctrine/dbal connection
22
     *
23
     * @param \Doctrine\DBAL\Connection $dbalConnection
24
     * @return \Soluble\DbWrapper\Adapter\Doctrine\Dbal2Adapter
25
     */
26
27 1
    public static function createAdapterFromDoctrine2(\Doctrine\DBAL\Connection $dbalConnection)
28
    {
29 1
        return new \Soluble\DbWrapper\Adapter\Doctrine\Dbal2Adapter($dbalConnection);
30
    }
31
32
33
    /**
34
     * Create adapter from an existing zendframework/zend-db adapter
35
     *
36
     * @param \Zend\Db\Adapter\Adapter $zendAdapter
37
     * @return \Soluble\DbWrapper\Adapter\Zend\ZendDb2Adapter
38
     */
39
40 1
    public static function createAdapterFromZendDb2(\Zend\Db\Adapter\Adapter $zendAdapter)
41
    {
42 1
        return new \Soluble\DbWrapper\Adapter\Zend\ZendDb2Adapter($zendAdapter);
43
    }
44
45
    /**
46
     * Create adapter from an existing connection resource
47
     *
48
     * @param mixed $resource database connection object (mysqli, pdo_mysql,...)
49
     * @throws Exception\InvalidArgumentException
50
     * @throws Exception\UnsupportedDriverException
51
     * @return Adapter\AdapterInterface
52
     */
53 5
    public static function createAdapterFromResource($resource)
54
    {
55 5
        if (is_scalar($resource) || is_array($resource)) {
56 1
            throw new Exception\InvalidArgumentException("Resource param must be a valid 'resource' link (mysqli, pdo)");
57 4
        } if ($resource instanceof \PDO) {
58 2
            $adapter = self::getAdapterFromPdo($resource);
59 4
        } elseif (extension_loaded('mysqli') && $resource instanceof \mysqli) {
60 1
            $adapter = new Adapter\MysqliAdapter($resource);
61 1
        } else {
62 1
            throw new Exception\InvalidArgumentException("Resource must be a valid connection link, like PDO or mysqli");
63
        }
64 3
        return $adapter;
65
    }
66
67
68
    /**
69
     * Get an adapter from an existing connection resource
70
     *
71
     * @param \PDO $resource database connection object
72
     * @throws Exception\UnsupportedDriverException
73
     * @return Adapter\AdapterInterface
74
     */
75 2
    protected static function getAdapterFromPdo(\PDO $resource)
76
    {
77
78 2
        $driver = strtolower($resource->getAttribute(\PDO::ATTR_DRIVER_NAME));
79
        switch ($driver) {
80 2
            case 'mysql':
81 1
                $adapter = new Adapter\PdoMysqlAdapter($resource);
82 1
                break;
83 1
            case 'sqlite':
84 1
                $adapter = new Adapter\PdoSqliteAdapter($resource);
85 1
                break;
86
            default:
87
                $msg = "Driver 'PDO_$driver' is not currently supported.";
88
                throw new Exception\UnsupportedDriverException($msg);
89
        }
90 2
        return $adapter;
91
    }
92
}
93