Test Failed
Pull Request — master (#10)
by Yo
02:26
created

AuthorListUpdater::update()   C

Complexity

Conditions 8
Paths 10

Size

Total Lines 28
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 28
rs 5.3846
c 0
b 0
f 0
cc 8
eloc 18
nc 10
nop 2
1
<?php
2
namespace Yoanm\ComposerConfigManager\Application\Updater;
3
4
use Yoanm\ComposerConfigManager\Domain\Model\Author;
5
6
class AuthorListUpdater
7
{
8
    /**
9
     * @param Author[] $newEntityList
10
     * @param Author[] $oldEntityList
11
     *
12
     * @return Author[]
13
     */
14
    public function update(array $newEntityList, array $oldEntityList)
15
    {
16
        $existingEntityIdList = [];
17
        foreach ($newEntityList as $entity) {
18
            $existingEntityIdList[$entity->getItemId()] = true;
19
        }
20
        $normalizedOldEntityList = [];
21
        foreach ($oldEntityList as $oldEntity) {
22
            if (!array_key_exists($oldEntity->getItemId(), $existingEntityIdList)) {
23
                $normalizedOldEntityList[] = $oldEntity;
24
            } else {
25
                // A new entity have been defined, loop over new entity list and append all entities with the same id
26
                $oldEntityId = $oldEntity->getItemId();
27
                foreach ($newEntityList as $newEntityKey => $newEntity) {
28
                    if ($newEntity->getItemId() == $oldEntityId) {
29
                        $normalizedOldEntityList[] = new Author(
30
                            $newEntity->getName(),
31
                            $newEntity->getEmail() ? $newEntity->getEmail() : $oldEntity->getEmail(),
32
                            $newEntity->getRole() ? $newEntity->getRole() : $oldEntity->getRole()
33
                        );
34
                        unset($newEntityList[$newEntityKey]);
35
                    }
36
                }
37
            }
38
        }
39
40
        return array_merge($normalizedOldEntityList, $newEntityList);
41
    }
42
}
43