RenderContextGenerator   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 35
dl 0
loc 74
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 36 2
A __construct() 0 4 1
A resolveChangeGroups() 0 17 2
1
<?php
2
/**
3
 * Copyright © Vaimo Group. All rights reserved.
4
 * See LICENSE_VAIMO.txt for license details.
5
 */
6
namespace Vaimo\ComposerChangelogs\Generators\Changelog;
7
8
class RenderContextGenerator implements \Vaimo\ComposerChangelogs\Interfaces\RenderContextGeneratorInterface
9
{
10
    /**
11
     * @var \Vaimo\ComposerChangelogs\Resolvers\VcsDetailsResolver
12
     */
13
    private $vcsDetailsResolver;
14
    
15
    /**
16
     * @var \Vaimo\ComposerChangelogs\Resolvers\ReleaseDetailsResolver
17
     */
18
    private $releaseInfoResolver;
19
20
    public function __construct()
21
    {
22
        $this->vcsDetailsResolver = new \Vaimo\ComposerChangelogs\Resolvers\VcsDetailsResolver();
23
        $this->releaseInfoResolver = new \Vaimo\ComposerChangelogs\Resolvers\ReleaseDetailsResolver();
24
    }
25
26
    public function generate(array $changelog, $repositoryUrl = '', $repositoryRoot = '')
27
    {
28
        $lastVersion = $this->vcsDetailsResolver->resolveInitialCommitReference($repositoryRoot);
29
30
        $contextData = array();
31
        
32
        foreach (array_reverse($changelog) as $version => $details) {
33
            $item = $this->releaseInfoResolver->resolveOverview($details);
34
            
35
            $releaseLinks = $this->vcsDetailsResolver->resolveReleaseLinks(
36
                $repositoryUrl,
37
                $version,
38
                $lastVersion
39
            );
40
41
            $releaseDateTime = $this->vcsDetailsResolver->resolveReleaseTime(
42
                $repositoryRoot,
43
                $version
44
            );
45
            
46
            $changeGroups = $this->resolveChangeGroups($details);
47
48
            $contextData[] = array_filter(
49
                array_replace(
50
                    $item,
51
                    array('groups' => $changeGroups),
52
                    $releaseLinks,
53
                    $releaseDateTime
54
                )
55
            );
56
            
57
            $lastVersion = $version;
58
        }
59
        
60
        return array(
61
            'releases' => array_reverse($contextData)
62
        );
63
    }
64
    
65
    private function resolveChangeGroups(array $details)
66
    {
67
        $result = array();
68
69
        $changeGroups = $this->releaseInfoResolver->resolveChangeGroups($details);
70
        
71
        foreach ($changeGroups as $name => $groupItems) {
72
            $group = array();
73
74
            $group['label'] = ucfirst($name);
75
            $group['name'] = $name;
76
            $group['items'] = $groupItems;
77
78
            $result[] = $group;
79
        }
80
        
81
        return $result;
82
    }
83
}
84