CasbinDatabaseAdapterBootstrapper   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
c 1
b 0
f 0
dl 0
loc 46
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getBindings() 0 4 1
A registerBindings() 0 29 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Bootstrappers\Vendor;
6
7
use AbterPhp\Framework\Constant\Env;
8
use AbterPhp\Framework\Environments\Environment;
9
use AbterPhp\Framework\Exception\Config;
10
use CasbinAdapter\Database\Adapter;
11
use Opulence\Databases\Adapters\Pdo\MySql\Driver as MySqlDriver;
12
use Opulence\Databases\Adapters\Pdo\PostgreSql\Driver as PostgreSqlDriver;
13
use Opulence\Ioc\Bootstrappers\Bootstrapper;
14
use Opulence\Ioc\Bootstrappers\ILazyBootstrapper;
15
use Opulence\Ioc\IContainer;
16
17
class CasbinDatabaseAdapterBootstrapper extends Bootstrapper implements ILazyBootstrapper
18
{
19
    /**
20
     * @inheritdoc
21
     */
22
    public function getBindings(): array
23
    {
24
        return [
25
            Adapter::class,
26
        ];
27
    }
28
29
    /**
30
     * @param IContainer $container
31
     *
32
     * @throws Config
33
     */
34
    public function registerBindings(IContainer $container): void
35
    {
36
        $driverClass = Environment::getVar('DB_DRIVER', PostgreSqlDriver::class);
37
38
        switch ($driverClass) {
39
            case MySqlDriver::class:
40
                $dirDriver = 'mysql';
41
                break;
42
            case PostgreSqlDriver::class:
43
                $dirDriver = 'pgsql';
44
                break;
45
            default:
46
                throw new Config(
47
                    "Invalid database driver type specified in environment var \"DB_DRIVER\": $driverClass"
48
                );
49
        }
50
51
        $config = [
52
            'type'     => $dirDriver,
53
            'hostname' => Environment::mustGetVar(Env::DB_HOST),
54
            'database' => Environment::mustGetVar(Env::DB_NAME),
55
            'username' => Environment::mustGetVar(Env::DB_USER),
56
            'password' => Environment::mustGetVar(Env::DB_PASSWORD),
57
            'hostport' => Environment::mustGetVar(Env::DB_PORT),
58
        ];
59
60
        $adapter = Adapter::newAdapter($config);
61
62
        $container->bindInstance(Adapter::class, $adapter);
63
    }
64
}
65