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

DefaultModelFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 90.48%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
c 1
b 0
f 0
lcom 0
cbo 1
dl 0
loc 41
ccs 19
cts 21
cp 0.9048
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A createModel() 0 4 1
A getModelTable() 0 6 1
A getJunctionClassName() 0 15 2
A getClassFileDetails() 0 8 2
1
<?php
2
3
namespace ntentan\nibii\factories;
4
5
use ntentan\utils\Text;
6
use ntentan\nibii\interfaces\ModelFactoryInterface;
7
8
class DefaultModelFactory implements ModelFactoryInterface
9
{
10
11 14
    public function createModel($className, $context)
12
    {
13 14
        return new $className();
14
    }
15
16 36
    public function getModelTable($instance)
17
    {
18 36
        $class = new \ReflectionClass($instance);
19 36
        $nameParts = explode("\\", $class->getName());
20 36
        return Text::deCamelize(end($nameParts));
21
    }
22
23 4
    public function getJunctionClassName($classA, $classB)
24
    {
25 4
        $classA = $this->getClassFileDetails($classA);
26 4
        $classB = $this->getClassFileDetails($classB);
27 4
        if ($classA['namespace'] != $classB['namespace']) {
28
            throw new NibiiException(
29
            "Cannot automatically join two classes of different "
30
            . "namespaces. Please provide a model joiner or "
31
            . "explicitly specify your joint model."
32
            );
33
        }
34 4
        $classes = [$classA['class'], $classB['class']];
35 4
        sort($classes);
36 4
        return "{$classA['namespace']}\\" . implode('', $classes);
37
    }
38
    
39 4
    private function getClassFileDetails($className) {
40 4
        $arrayed = explode('\\', $className);
41 4
        $class = array_pop($arrayed);
42 4
        if ($arrayed[0] == '') {
43 4
            array_shift($arrayed);
44
        }
45 4
        return ['class' => $class, 'namespace' => implode('\\', $arrayed)];
46
    }    
47
48
}
49