UuidServiceProvider   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 8
dl 0
loc 47
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A boot() 0 9 1
A optimizeUuids() 0 10 1
A createGrammarFromConnection() 0 23 3
1
<?php
2
3
namespace Spatie\BinaryUuid;
4
5
use Exception;
6
use Ramsey\Uuid\Uuid;
7
use Ramsey\Uuid\UuidFactory;
8
use Illuminate\Database\Connection;
9
use Illuminate\Support\ServiceProvider;
10
use Ramsey\Uuid\Codec\OrderedTimeCodec;
11
use Illuminate\Database\Schema\Grammars\Grammar;
12
use Illuminate\Database\Query\Grammars\MySqlGrammar as IlluminateMySqlGrammar;
13
use Illuminate\Database\Query\Grammars\SQLiteGrammar as IlluminateSQLiteGrammar;
14
15
class UuidServiceProvider extends ServiceProvider
16
{
17
    public function boot()
18
    {
19
        /** @var \Illuminate\Database\Connection $connection */
20
        $connection = app('db')->connection();
21
22
        $connection->setSchemaGrammar($this->createGrammarFromConnection($connection));
23
24
        $this->optimizeUuids();
25
    }
26
27
    protected function createGrammarFromConnection(Connection $connection): Grammar
28
    {
29
        $queryGrammar = $connection->getQueryGrammar();
30
31
        $queryGrammarClass = get_class($queryGrammar);
32
33
        if (! in_array($queryGrammarClass, [
34
            IlluminateMySqlGrammar::class,
35
            IlluminateSQLiteGrammar::class,
36
        ])) {
37
            throw new Exception("There current grammar `$queryGrammarClass` doesn't support binary uuids. Only  MySql and SQLite connections are supported.");
38
        }
39
40
        if ($queryGrammar instanceof IlluminateSQLiteGrammar) {
41
            $grammar = new SQLiteGrammar();
42
        } else {
43
            $grammar = new MySqlGrammar();
44
        }
45
46
        $grammar->setTablePrefix($queryGrammar->getTablePrefix());
47
48
        return $grammar;
49
    }
50
51
    protected function optimizeUuids()
52
    {
53
        $factory = new UuidFactory();
54
55
        $codec = new OrderedTimeCodec($factory->getUuidBuilder());
56
57
        $factory->setCodec($codec);
58
59
        Uuid::setFactory($factory);
60
    }
61
}
62