Completed
Push — master ( c5047e...3a177f )
by Gabriel
03:52
created

ModelLocator::locateManager()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 8
cts 8
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Nip\Records\Locator;
4
5
use Nip\Records\AbstractModels\RecordManager;
6
use Nip\Records\Locator\Configuration\HasConfigurationTrait;
7
use Nip\Records\Locator\Exceptions\InvalidModelException;
8
use Nip\Records\Locator\ModelLocator\Traits\StaticMethodsTrait;
9
use Nip\Records\Locator\Registry\HasModelRegistry;
10
use Nip\Records\Locator\Resolver\Commands\Command;
11
use Nip\Records\Locator\Resolver\Commands\CommandsFactory;
12
use Nip\Records\Locator\Resolver\HasResolverPipelineTrait;
13
14
/**
15
 * Class ModelLocator
16
 * @package Nip\Records\Locator
17
 */
18
class ModelLocator
19
{
20
    use StaticMethodsTrait;
21
    use HasResolverPipelineTrait;
22
    use HasConfigurationTrait;
23
    use HasModelRegistry;
24
25
    /**
26
     * @param string $alias
27
     * @return RecordManager
28
     * @throws InvalidModelException
29
     */
30 6
    public function getManager($alias)
31
    {
32 6
        $manager = $this->locateManager($alias);
33 5
        $this->getModelRegistry()->set($alias, $manager);
34 5
        $this->getModelRegistry()->set($manager->getClassName(), $manager);
35 5
        return $manager;
36
    }
37
38
    /**
39
     * @param $alias
40
     * @return RecordManager
41
     * @throws InvalidModelException
42
     */
43 6
    protected function locateManager($alias)
44
    {
45 6
        $command = CommandsFactory::create($alias, $this);
46 6
        $pipeline = $this->buildCallPipeline();
47
48
        /** @var Command $command */
49 6
        $command = $pipeline->process($command);
50
51 6
        if ($command->hasInstance()) {
52 5
            return $command->getInstance();
53
        }
54
55 1
        throw new InvalidModelException(
56
            "No valid instance located for model alias " .
57 1
            "[" . $alias . "]"
58
        );
59
    }
60
}
61