Test Failed
Push — master ( ad6bc5...67eecb )
by SignpostMarv
06:24
created

TraitRememberDaftObject::RememberDaftObject()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 1
dl 0
loc 10
ccs 5
cts 5
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
* Base daft objects.
4
*
5
* @author SignpostMarv
6
*/
7
declare(strict_types=1);
8
9
namespace SignpostMarv\DaftObject;
10
11
trait TraitRememberDaftObject
12
{
13 114
    public function RememberDaftObject(DefinesOwnIdPropertiesInterface $object) : void
14
    {
15 114
        if ($object instanceof DaftNestedWriteableObject) {
16 112
            $this->RememberDaftObjectWriteableTyped($object);
17
        } else {
18 2
            NestedTypeParanoia::ThrowIfNotWriteableNestedType(
19
                $object,
20 112
                1,
21
                static::class,
22
                __FUNCTION__
23
            );
24
        }
25
    }
26
27
    /**
28
    * @return array<int, DaftNestedObject>
29
    */
30
    abstract public function RecallDaftNestedObjectFullTree(
31
        int $relativeDepthLimit = null
32
    ) : array;
33
34 2
    abstract public function CountDaftNestedObjectFullTree(int $relativeDepthLimit = null) : int;
35
36
    private function RememberDaftObjectWriteableTyped(DaftNestedWriteableObject $object) : void
37
    {
38
        $left = $object->GetIntNestedLeft();
39
        $right = $object->GetIntNestedRight();
40 2
        $level = $object->GetIntNestedLevel();
41 2
42 2
        if (0 === $left && 0 === $right && 0 === $level) {
43 2
            $fullTreeCount = $this->CountDaftNestedObjectFullTree();
44 2
45 2
            if ($fullTreeCount > AbstractArrayBackedDaftNestedObject::COUNT_EXPECT_NON_EMPTY) {
46 2
                $tree = $this->RecallDaftNestedObjectFullTree();
47
48
                /**
49
                * @var DaftNestedWriteableObject
50
                */
51 112
                $end = end($tree);
52
53 112
                $left = $end->GetIntNestedRight() + 1;
54 112
            } else {
55 112
                $left = $fullTreeCount + $fullTreeCount;
56
            }
57 112
58 110
            $object->SetIntNestedLeft($left);
59
            $object->SetIntNestedRight($left + 1);
60 110
        }
61 84
62
        parent::RememberDaftObject($object);
63
    }
64
}
65