Completed
Push — master ( a30571...7a668c )
by James Ekow Abaka
02:45
created

ORMContext::joinModels()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 2
crap 1
1
<?php
2
3
namespace ntentan\nibii;
4
5
use ntentan\atiaa\DbContext;
6
use ntentan\kaikai\Cache;
7
use ntentan\nibii\interfaces\ModelFactoryInterface;
8
use ntentan\nibii\interfaces\DriverAdapterFactoryInterface;
9
use ntentan\nibii\interfaces\ValidatorFactoryInterface;
10
11
/**
12
 * A collection of utility methods used as helpers for loading models.
13
 */
14
class ORMContext
0 ignored issues
show
Coding Style introduced by
Since you have declared the constructor as private, maybe you should also declare the class as final.
Loading history...
15
{
16
17
    private static $instance;
18
    private $cache;
19
    private $modelFactory;
20
    private $modelValidatorFactory;
21
    private $driverAdapterFactory;
22
23 36
    private function __construct(ModelFactoryInterface $modelFactory, DriverAdapterFactoryInterface $driverAdapterFactory, ValidatorFactoryInterface $modelValidatorFactory, Cache $cache)
24
    {
25 36
        $this->modelFactory = $modelFactory;
26 36
        $this->cache = $cache;
27 36
        $this->driverAdapterFactory = $driverAdapterFactory;
28 36
        $this->modelValidatorFactory = $modelValidatorFactory;
29 36
    }
30
31 36
    public static function initialize(ModelFactoryInterface $modelFactory, DriverAdapterFactoryInterface $driverAdapterFactory, ValidatorFactoryInterface $modelValidatorFactory, Cache $cache): ORMContext
32
    {
33 36
        self::$instance = new self($modelFactory, $driverAdapterFactory, $modelValidatorFactory, $cache);
34 36
        return self::$instance;
35
    }
36
37
    /**
38
     * A helper for loading a method described as a string.
39
     * @param string $path Model name as string 
40
     * @return \nibii\RecordWrapper
41
     * @throws NibiiException
42
     */
43 6
    public function load($path)
44
    {
45
        try {
46 6
            return $this->modelFactory->createModel($path, null);
47
        } catch (\ntentan\panie\exceptions\ResolutionException $e) {
0 ignored issues
show
Bug introduced by
The class ntentan\panie\exceptions\ResolutionException does not exist. Did you forget a USE statement, or did you not list all dependencies?

Scrutinizer analyzes your composer.json/composer.lock file if available to determine the classes, and functions that are defined by your dependencies.

It seems like the listed class was neither found in your dependencies, nor was it found in the analyzed files in your repository. If you are using some other form of dependency management, you might want to disable this analysis.

Loading history...
48
            throw new
49
            NibiiException("Failed to load model [$path]. The class [$className] could not be found.");
50
        }
51
    }
52
53
    /**
54
     * @param RecordWrapper $instance
55
     */
56 36
    public function getModelTable($instance)
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
57
    {
58 36
        return $this->modelFactory->getModelTable($instance);
59
    }
60
61 36
    public function getDriverAdapter()
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
62
    {
63 36
        return $this->driverAdapterFactory->createDriverAdapter();
64
    }
65
66
    /**
67
     * @param string $class
68
     */
69 28
    public function getModelName($class)
70
    {
71 28
        return $class;
72
    }
73
74 36
    public static function getInstance() : ORMContext
75
    {
76 36
        if (self::$instance === null) {
77
            throw new NibiiException("A context has not yet been initialized");
78
        }
79 36
        return self::$instance;
80
    }
81
82 28
    public function getCache()
83
    {
84 28
        return $this->cache;
85
    }
86
87
    public function getConfig()
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
88
    {
89
        return $this->config;
0 ignored issues
show
Bug introduced by
The property config does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
90
    }
91
92 28
    public function getModelDescription($model) : ModelDescription
93
    {
94 28
        return new ModelDescription($model);
95
    }
96
    
97 10
    public function getModelValidatorFactory() : ValidatorFactoryInterface
98
    {
99 10
        return $this->modelValidatorFactory;
100
    }
101
    
102 12
    public function getModelFactory() : ModelFactoryInterface
103
    {
104 12
        return $this->modelFactory;
105
    }
106
107
    /**
108
     * 
109
     * @return \ntentan\atiaa\DbContext
110
     */
111 36
    public function getDbContext()
112
    {
113 36
        return DbContext::getInstance();
114
    }
115
116
    public function __destruct()
117
    {
118
        self::$instance = null;
119
    }
120
121
}
122