ConnectionFactory::createConnection()   A
last analyzed

Complexity

Conditions 6
Paths 22

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
c 1
b 0
f 0
nc 22
nop 1
dl 0
loc 22
rs 9.2222
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