Completed
Push — master ( 4dab06...9e5ffc )
by Andrii
03:02
created

History::getLinks()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
/*
4
 * Changelog keeper
5
 *
6
 * @link      https://github.com/hiqdev/chkipper
7
 * @package   chkipper
8
 * @license   BSD-3-Clause
9
 * @copyright Copyright (c) 2016, HiQDev (http://hiqdev.com/)
10
 */
11
12
namespace hiqdev\chkipper\history;
13
14
/**
15
 * History class.
16
 *
17
 * @property array $headers: header => header
18
 * @property array $hashes:  hash => hash
19
 * @property array $links:   link => href
20
 * @property array $tags:    tag name => tag object
21
 *
22
 * @author Andrii Vasyliev <[email protected]>
23
 */
24
class History
25
{
26
    public $lastTag = 'Under development';
27
28
    public $initTag = 'Development started';
29
30
    protected $_headers = [];
31
    protected $_hashes  = [];
32
    protected $_links   = [];
33
    protected $_tags    = [];
34
35 2
    public function addHeader($str)
36
    {
37 2
        $this->_headers[$str] = $str;
38 2
    }
39
40 1
    public function addHeaders(array $headers)
41
    {
42 1
        foreach ($headers as $header) {
43 1
            $this->addHeader($header);
44 1
        }
45 1
    }
46
47 1
    public function setHeaders(array $headers)
48
    {
49 1
        $this->_headers = [];
50 1
        $this->addHeaders($headers);
51 1
    }
52
53 2
    public function getHeaders()
54
    {
55 2
        return $this->_headers;
56
    }
57
58 2
    public function addLink($link, $href)
59
    {
60 2
        $this->_links[$link] = $href;
61 2
    }
62
63
    public function addLinks(array $links)
64
    {
65
        foreach ($links as $link => $href) {
66
            $this->addLink($link, $href);
67
        }
68
    }
69
70 1
    public function setLinks(array $links)
71
    {
72 1
        $this->_links = $links;
73 1
    }
74
75 2
    public function getLinks()
76
    {
77 2
        return $this->_links;
78
    }
79
80
    public function hasHash($hash)
81
    {
82
        return isset($this->_hashes[(string) $hash]);
83
    }
84
85 3
    public function addHash($hash)
86
    {
87 3
        $this->_hashes[(string) $hash] = $hash;
88 3
    }
89
90
    public function addHashes(array $hashes)
91
    {
92
        foreach ($hashes as $hash) {
93
            $this->addHash($hash);
94
        }
95
    }
96
97
    public function setHashes(array $hashes)
98
    {
99
        $this->_hashes = [];
100
        $this->addHashes($hashes);
101
    }
102
103
    public function getHashes()
104
    {
105
        return $this->_hashes;
106
    }
107
108
    public function getFirstTag()
109
    {
110
        return reset($this->_tags);
111
    }
112
113 3
    public function countTags()
114
    {
115 3
        return count($this->_tags);
116
    }
117
118 3
    public function initTags()
119
    {
120 3
        if (!$this->countTags()) {
121 3
            $this->addTag(new Tag($this->lastTag));
122 3
        }
123 3
    }
124
125 2
    public function getTags()
126
    {
127 2
        return $this->_tags;
128
    }
129
130 1
    public function addTags(array $tags)
131
    {
132 1
        foreach ($tags as $name => $tag) {
133 1
            $this->addTag($tag);
134 1
        }
135 1
    }
136
137 1
    public function setTags(array $tags)
138
    {
139 1
        $this->_tags = [];
140 1
        $this->addTags($tags);
141 1
    }
142
143
    /**
144
     * Returns tag by name.
145
     * Creates if not exists.
146
     * Returns first tag when given empty name.
147
     * @param string|Tag $tag tag or tag name
148
     * @return Tag
149
     */
150 3
    public function findTag($tag)
151
    {
152 3
        if (!$tag) {
153 1
            $tag = reset($this->_tags) ?: $this->lastTag;
154 1
        }
155 3
        $name = $tag instanceof Tag ? $tag->getName() : $tag;
156 3
        if (!$this->hasTag($name)) {
157 3
            $this->_tags[$name] = new Tag($name);
158 3
        }
159
160 3
        return $this->_tags[$name];
161
    }
162
163 3
    public function hasTag($tag)
164
    {
165 3
        return isset($this->_tags[$tag]);
166
    }
167
168 3
    public function addTag(Tag $tag)
169
    {
170 3
        return $this->findTag($tag->getName())->setDate($tag->getDate())->addNotes($tag->getNotes());
171
    }
172
173
    /**
174
     * Merges given history into the current.
175
     * @param History $history
176
     */
177
    public function merge(History $history)
178
    {
179
        $this->addLinks($history->getLinks());
180
        $this->addHashes($history->getHashes());
181
        $this->mergeTags($history->getTags());
182
    }
183
184
    /**
185
     * Merge given tags into the current history.
186
     * @param Tag[] $tags
187
     */
188
    public function mergeTags(array $tags)
189
    {
190
        $olds = $this->getTags();
191
        $this->_tags = $tags;
192
        foreach ($olds as $tag) {
193
            $this->addTag($tag);
194
        }
195
    }
196
}
197