ChangelogLoader::walkRecursiveRemove()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 11
rs 10
c 0
b 0
f 0
cc 4
nc 4
nop 2
1
<?php
2
/**
3
 * Copyright © Vaimo Group. All rights reserved.
4
 * See LICENSE_VAIMO.txt for license details.
5
 */
6
namespace Vaimo\ComposerChangelogs\Loaders;
7
8
class ChangelogLoader
9
{
10
    /**
11
     * @var \Vaimo\ComposerChangelogs\Resolvers\ChangelogConfigResolver
12
     */
13
    private $configResolver;
14
15
    /**
16
     * @var \Vaimo\ComposerChangelogs\Readers\JsonFileReader
17
     */
18
    private $jsonFileReader;
19
    
20
    /**
21
     * @var array
22
     */
23
    private $cache = array();
24
25
    /**
26
     * @param \Vaimo\ComposerChangelogs\Resolvers\ChangelogConfigResolver $configResolver
27
     */
28
    public function __construct(
29
        \Vaimo\ComposerChangelogs\Resolvers\ChangelogConfigResolver $configResolver
30
    ) {
31
        $this->configResolver = $configResolver;
32
        
33
        $this->jsonFileReader = new \Vaimo\ComposerChangelogs\Readers\JsonFileReader();
34
    }
35
36
    public function load(\Composer\Package\PackageInterface $package)
37
    {
38
        $packageName = $package->getName();
39
40
        if (!isset($this->cache[$packageName])) {
41
            $sourcePath = $this->configResolver->resolveSourcePath($package);
42
            
43
            if (!$sourcePath) {
44
                throw new \Vaimo\ComposerChangelogs\Exceptions\LoaderException(
45
                    sprintf('Changelog source path not defined for: %s', $package->getName())
46
                );
47
            }
48
            
49
            $dataUtils = new \Vaimo\ComposerChangelogs\Utils\DataUtils();
50
51
            $changelogData = $this->jsonFileReader->readToArray($sourcePath);
52
            
53
            $groups = $dataUtils->walkArrayNodes(
54
                $changelogData,
55
                function (array $value) use ($dataUtils) {
56
                    return $dataUtils->removeKeysByPrefix($value, '_');
57
                }
58
            );
59
            
60
            foreach (array_keys($groups) as $version) {
61
                $groups[$version]['version'] = $version;
62
            }
63
64
            $this->cache[$packageName] = $groups;
65
        }
66
67
        return $this->cache[$packageName];
68
    }
69
70
    public function walkRecursiveRemove(array $array, $callback)
71
    {
72
        foreach ($array as $key => $value) {
73
            if (is_array($value)) {
74
                $array[$key] = $this->walkRecursiveRemove($value, $callback);
75
            } elseif ($callback($value, $key)) {
76
                unset($array[$key]);
77
            }
78
        }
79
80
        return $array;
81
    }
82
}
83