ConnectionFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 29
rs 10
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A createConnection() 0 22 6
1
<?php
2
3
namespace Silviooosilva\CacheerPhp\Core;
4
5
use PDO;
6
use PDOException;
7
use Silviooosilva\CacheerPhp\Exceptions\ConnectionException;
8
9
/**
10
 * Class ConnectionFactory
11
 * @author Sílvio Silva <https://github.com/silviooosilva>
12
 * @package Silviooosilva\CacheerPhp
13
 */
14
class ConnectionFactory
15
{
16
17
    /**
18
      * @param array|null $database
19
      * @return PDO|null
20
    */
21
    public static function createConnection(?array $database = null)
22
    {
23
        $dbConf = $database ?? CACHEER_DATABASE_CONFIG[Connect::getConnection()];
24
25
        if ($dbConf['driver'] === 'sqlite') {
26
            $dbName = $dbConf['dbname'];
27
            $dbDsn = $dbConf['driver'] . ':' . $dbName;
28
        } else {
29
            $dbName = "{$dbConf['driver']}-{$dbConf['dbname']}@{$dbConf['host']}";
0 ignored issues
show
Unused Code introduced by
The assignment to $dbName is dead and can be removed.
Loading history...
30
            $dbDsn = "{$dbConf['driver']}:host={$dbConf['host']};dbname={$dbConf['dbname']};port={$dbConf['port']}";
31
        }
32
33
        try {
34
            $options = $dbConf['options'] ?? [];
35
            foreach ($options as $key => $value) {
36
                if (is_string($value) && defined($value)) {
37
                    $options[$key] = constant($value);
38
                }
39
            }
40
            return new PDO($dbDsn, $dbConf['username'] ?? null, $dbConf['passwd'] ?? null, $options);
41
        } catch (PDOException $exception) {
42
            throw ConnectionException::create($exception->getMessage(), $exception->getCode(), $exception->getPrevious());
43
        }
44
    }
45
}
46