Completed
Push — master ( 7723f5...13b1e1 )
by Adrian
16:41 queued 09:58
created

ModelManager   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 1
dl 0
loc 80
ccs 30
cts 30
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getModelInstance() 0 12 2
B getRepository() 0 27 5
A getAbstractionLayer() 0 10 1
1
<?php
2
namespace Ablunier\Laravel\Database\Manager\Eloquent;
3
4
use Ablunier\Laravel\Database\Contracts\Manager\ModelManager as ModelManagerContract;
5
use Ablunier\Laravel\Database\Contracts\Repository\HasCustomRepository;
6
use Ablunier\Laravel\Database\Contracts\Repository\HasCache;
7
use Ablunier\Laravel\Database\Repository\Eloquent\Repository;
8
use Illuminate\Database\Eloquent\Model as EloquentModel;
9
use Illuminate\Contracts\Foundation\Application;
10
11
class ModelManager implements ModelManagerContract
12
{
13
     /**
14
     * @var Application
15
     */
16
    private $app;
17
18
    /**
19
     * @param Application $app
20
     */
21 9
    public function __construct(Application $app)
22
    {
23 9
        $this->app = $app;
24 9
    }
25
26
    /**
27
     * Get Eloquent Model instance
28
     *
29
     * @param string $modelName
30
     *
31
     * @return EloquentModel
32
     */
33 7
    public function getModelInstance($modelName)
34
    {
35 7
        $modelInstance = $this->app->make($modelName);
36
37 7
        if (! $modelInstance instanceof EloquentModel) {
38 1
            $message = "Target [$modelName] is not an Illuminate\Database\Eloquent\Model instance.";
39
40 1
            throw new \Exception($message);
41
        }
42
43 6
        return $modelInstance;
44
    }
45
46
    /**
47
     * {@inheritdoc}
48
     */
49 4
    public function getRepository($modelName)
50
    {
51 4
        $modelInstance = $this->getModelInstance($modelName);
52
53 4
        $args = ['model' => $modelInstance];
54
55 4
        if ($modelInstance instanceof HasCustomRepository) {
56 2
            $repository = $this->app->make($modelInstance->repository(), $args);
0 ignored issues
show
Unused Code introduced by
The call to Application::make() has too many arguments starting with $args.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
57
58 2
            if (! $repository instanceof Repository) {
59 1
                $message = "The [$modelName] custom repository must extend Ablunier\Laravel\Database\Repository\Eloquent\Repository.";
60
61 1
                throw new \Exception($message);
62
            }
63 1
        } else {
64 2
            $repository = $this->app->make('Ablunier\Laravel\Database\Repository\Eloquent\Repository', $args);
0 ignored issues
show
Unused Code introduced by
The call to Application::make() has too many arguments starting with $args.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
65
        }
66
67 3
        if ($modelInstance instanceof HasCache && $modelInstance->cache() === true) {
68 1
            return $this->app->make('Ablunier\Laravel\Database\Repository\Eloquent\Cache', [
0 ignored issues
show
Unused Code introduced by
The call to Application::make() has too many arguments starting with array('repository' => $r...is->app['cache.store']).

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
69 1
                'repository' => $repository,
70 1
                'cache'      => $this->app['cache.store']
71 1
            ]);
72
        }
73
74 2
        return $repository;
75
    }
76
77
    /**
78
     * {@inheritdoc}
79
     */
80 1
    public function getAbstractionLayer($modelName)
81
    {
82 1
        $modelInstance = $this->getModelInstance($modelName);
83
84 1
        $args = ['model' => $modelInstance];
85
86 1
        $dbal = $this->app->make('Ablunier\Laravel\Database\Dbal\Eloquent\AbstractionLayer', $args);
0 ignored issues
show
Unused Code introduced by
The call to Application::make() has too many arguments starting with $args.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
87
88 1
        return $dbal;
89
    }
90
}
91