Failed Conditions
Pull Request — release/0.2.0 (#12)
by Yo
02:09
created

NamespaceResolver::resolve()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 0
loc 23
ccs 0
cts 20
cp 0
rs 8.7972
c 0
b 0
f 0
cc 4
eloc 15
nc 6
nop 3
crap 20
1
<?php
2
namespace Yoanm\InitPhpRepository\Resolver;
3
4
use Yoanm\InitPhpRepository\Command\RepositorySubType;
5
use Yoanm\InitPhpRepository\Command\RepositoryType;
6
use Yoanm\InitPhpRepository\Model\Template;
7
8
/**
9
 * Class NamespaceResolver
10
 */
11
class NamespaceResolver
12
{
13
    /** Repository type namespaces */
14
    const LIBRARY_NAMESPACE = 'library';
15
    const PROJECT_NAMESPACE = 'project';
16
17
    /** Repository sub type namespaces */
18
    const SYMFONY_LIBRARY_NAMESPACE = 'symfony-library';
19
20
    /**
21
     * @param Template[] $templateList
22
     * @param string     $repositoryType
23
     * @param string     $repositorySubType
24
     */
25
    public function resolve(array $templateList, $repositoryType, $repositorySubType)
26
    {
27
        $namespace = RepositoryType::LIBRARY === $repositoryType
28
            ? self::LIBRARY_NAMESPACE
29
            : self::PROJECT_NAMESPACE
30
        ;
31
        // Override base namespace for specific files
32
        if (RepositoryType::LIBRARY === $repositoryType) {
33
            $this->setNamespace($templateList, 'composer.config', $namespace);
34
            $this->setNamespace($templateList, 'git.gitignore', $namespace);
35
            $this->setNamespace($templateList, 'git.readme', $namespace);
36
37
            // Override with sub type
38
            if (RepositorySubType::SYMFONY === $repositorySubType) {
39
                $subNamespace = self::SYMFONY_LIBRARY_NAMESPACE;
40
                $this->setNamespace($templateList, 'ci.travis', $subNamespace);
41
                $this->setNamespace($templateList, 'git.readme', $subNamespace);
42
                $this->setNamespace($templateList, 'ci.scrutinizer', $subNamespace);
43
            }
44
        } else {
45
            $this->setNamespace($templateList, 'ci.scrutinizer', $namespace);
46
        }
47
    }
48
49
    /**
50
     * @param Template[] $templateList
51
     * @param string     $key
52
     * @param string     $namespace
53
     */
54
    protected function setNamespace(array $templateList, $key, $namespace)
55
    {
56
        if (isset($templateList[$key])) {
57
            $templateList[$key]->setNamespace($namespace);
58
        }
59
    }
60
}
61