Analogue   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 113
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 5
Bugs 2 Features 1
Metric Value
wmc 8
c 5
b 2
f 1
lcom 1
cbo 6
dl 0
loc 113
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A addConnection() 0 4 1
A connection() 0 4 1
A __callStatic() 0 4 1
A __call() 0 4 1
A __construct() 0 10 2
B boot() 0 24 2
1
<?php
2
3
namespace Analogue\ORM;
4
5
use Analogue\ORM\System\Manager;
6
use Illuminate\Events\Dispatcher;
7
use Illuminate\Database\Capsule\Manager as Capsule;
8
use Analogue\ORM\Drivers\Manager as DriverManager;
9
use Analogue\ORM\Drivers\IlluminateDriver;
10
use Analogue\ORM\Drivers\CapsuleConnectionProvider;
11
12
/**
13
 * This class is a proxy to the Manager class, which allows
14
 * using Analogue outside of the Laravel framework.
15
 *
16
 * @mixin Manager
17
 */
18
class Analogue
19
{
20
    /**
21
     * @var self
22
     */
23
    protected static $instance;
24
25
    /**
26
     * @var Manager
27
     */
28
    protected static $manager;
29
30
    /**
31
     * @var Capsule
32
     */
33
    protected static $capsule;
34
35
    /**
36
     * @var bool
37
     */
38
    protected static $booted = false;
39
40
    /**
41
     * Analogue constructor.
42
     * @param array $connection
43
     */
44
    public function __construct(array $connection)
45
    {
46
        if (!static::$booted) {
47
            static::$capsule = new Capsule;
48
49
            $this->addConnection($connection);
50
51
            $this->boot();
52
        }
53
    }
54
55
    /**
56
     * Boot Analogue
57
     *
58
     * @return Analogue
59
     */
60
    public function boot()
61
    {
62
        if (static::$booted) {
63
            return $this;
64
        }
65
66
        $dispatcher = new Dispatcher;
67
68
        $connectionProvider = new CapsuleConnectionProvider(static::$capsule);
69
70
        $illuminate = new IlluminateDriver($connectionProvider);
71
72
        $driverManager = new DriverManager;
73
74
        $driverManager->addDriver($illuminate);
75
76
        static::$manager = new Manager($driverManager, $dispatcher);
77
        
78
        static::$instance = $this;
79
80
        static::$booted = true;
81
82
        return $this;
83
    }
84
85
    /**
86
     * Add a connection array to Capsule
87
     *
88
     * @param array  $config
89
     * @param string $name
90
     */
91
    public function addConnection($config, $name = 'default')
92
    {
93
        static::$capsule->addConnection($config, $name);
94
    }
95
96
    /**
97
     * Get a Database connection object
98
     *
99
     * @param  $name
100
     * @return \Illuminate\Database\Connection
101
     */
102
    public function connection($name = null)
103
    {
104
        return static::$capsule->getConnection($name);
105
    }
106
107
    /**
108
     * Dynamically handle static calls to the instance, Facade Style.
109
     *
110
     * @param  string $method
111
     * @param  array  $parameters
112
     * @return mixed
113
     */
114
    public static function __callStatic($method, $parameters)
115
    {
116
        return call_user_func_array([static::$instance, $method], $parameters);
117
    }
118
119
    /**
120
     * Dynamically handle calls to the Analogue Manager instance.
121
     *
122
     * @param  string $method
123
     * @param  array  $parameters
124
     * @return mixed
125
     */
126
    public function __call($method, $parameters)
127
    {
128
        return call_user_func_array([static::$manager, $method], $parameters);
129
    }
130
}
131