Completed
Push — master ( 72fe58...64ed7a )
by Vitaly
02:16
created

TreeNode   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
c 1
b 0
f 0
lcom 2
cbo 1
dl 0
loc 75
ccs 16
cts 16
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 2
A toArray() 0 19 3
A append() 0 4 1
1
<?php declare(strict_types = 1);
2
/**
3
 * Created by Vitaly Iegorov <[email protected]>.
4
 * on 31.03.17 at 09:23
5
 */
6
namespace samsonframework\stringconditiontree;
7
8
/**
9
 * Class TreeNode
10
 *
11
 * @author Vitaly Egorov <[email protected]>
12
 */
13
class TreeNode extends AbstractIterable
14
{
15
    /** string Internal collection name for iteration and counting */
16
    protected const COLLECTION_NAME = 'children';
17
18
    /** @var TreeNode[] Collection of tree node children */
19
    public $children = [];
20
21
    /** @var string Tree node identifier */
22
    public $identifier;
23
24
    /** @var self Pointer to parent node */
25
    public $parent;
26
27
    /** @var string Tree node value */
28
    public $value;
29
30
    /** @var string Tree node full value */
31
    public $fullValue;
32
33
    /**
34
     * TreeNode constructor.
35
     *
36
     * @param string   $value  Node value
37
     * @param string   $identifier Node identifier
38
     * @param TreeNode $parent Pointer to parent node
39
     */
40 1
    public function __construct(string $value = '', string $identifier = '', TreeNode $parent = null)
41
    {
42 1
        parent::__construct();
43
44 1
        $this->value = $value;
45 1
        $this->parent = $parent;
46 1
        $this->identifier = $identifier;
47 1
        $this->fullValue = $parent !== null ? $parent->fullValue . $value : '';
48 1
    }
49
50
    /**
51
     * Convert tree node to associative array.
52
     *
53
     * @return array Tree structure as hashed array
54
     */
55 1
    public function toArray(): array
56
    {
57 1
        $result = [];
58
59
        // Render @self item for tests
60 1
        if ($this->identifier !== '') {
61 1
            $result[StringConditionTree::SELF_NAME] = $this->identifier;
62
        }
63
64
        /**
65
         * @var string $key
66
         * @var TreeNode $child
67
         */
68 1
        foreach ($this as $key => $child) {
69 1
            $result[$key] = $child->toArray();
70
        }
71
72 1
        return $result;
73
    }
74
75
    /**
76
     * Append new node instance and return it.
77
     *
78
     * @param string $value Node value
79
     * @param string $identifier Node identifier
80
     *
81
     * @return TreeNode New created node instance
82
     */
83 1
    public function append(string $value, string $identifier): TreeNode
84
    {
85 1
        return $this->children[$value] = new self($value, $identifier, $this);
86
    }
87
}
88