Persister::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 3
dl 0
loc 8
ccs 4
cts 4
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\SkeletonMapper\UnitOfWork;
6
7
use Doctrine\SkeletonMapper\Events;
8
use Doctrine\SkeletonMapper\ObjectIdentityMap;
9
use Doctrine\SkeletonMapper\UnitOfWork;
10
11
class Persister
12
{
13
    /** @var UnitOfWork */
14
    private $unitOfWork;
15
16
    /** @var EventDispatcher */
17
    private $eventDispatcher;
18
19
    /** @var ObjectIdentityMap */
20
    private $objectIdentityMap;
21
22 22
    public function __construct(
23
        UnitOfWork $unitOfWork,
24
        EventDispatcher $eventDispatcher,
25
        ObjectIdentityMap $objectIdentityMap
26
    ) {
27 22
        $this->unitOfWork        = $unitOfWork;
28 22
        $this->eventDispatcher   = $eventDispatcher;
29 22
        $this->objectIdentityMap = $objectIdentityMap;
30 22
    }
31
32 12
    public function executePersists() : void
33
    {
34 12
        foreach ($this->unitOfWork->getObjectsToPersist() as $object) {
35 9
            $persister  = $this->unitOfWork->getObjectPersister($object);
36 9
            $repository = $this->unitOfWork->getObjectRepository($object);
37
38 9
            $objectData = $persister->persistObject($object);
39
40 9
            $identifier = $repository->getObjectIdentifierFromData($objectData);
41 9
            $persister->assignIdentifier($object, $identifier);
42 9
            $this->objectIdentityMap->addToIdentityMap($object, $objectData);
43
44 9
            $this->eventDispatcher->dispatchLifecycleEvent(Events::postPersist, $object);
45
        }
46 12
    }
47
48 12
    public function executeUpdates() : void
49
    {
50 12
        foreach ($this->unitOfWork->getObjectsToUpdate() as $object) {
51 8
            $changeSet = $this->unitOfWork->getObjectChangeSet($object);
52
53 8
            $this->unitOfWork->getObjectPersister($object)
54 8
                ->updateObject($object, $changeSet);
55
56 8
            $this->eventDispatcher->dispatchLifecycleEvent(Events::postUpdate, $object);
57
        }
58 12
    }
59
60 12
    public function executeRemoves() : void
61
    {
62 12
        foreach ($this->unitOfWork->getObjectsToRemove() as $object) {
63 3
            $this->unitOfWork->getObjectPersister($object)
64 3
                ->removeObject($object);
65
66 3
            $this->objectIdentityMap->detach($object);
67
68 3
            $this->eventDispatcher->dispatchLifecycleEvent(Events::postRemove, $object);
69
        }
70 12
    }
71
}
72