Completed
Push — master ( b4af2d...85fa4e )
by Andrii
02:31
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 hasLink($link)
59
    {
60 2
        return isset($this->_links[$link]);
61
    }
62
63 3
    public function addLink($link, $href)
64
    {
65 3
        $this->_links[$link] = $href;
66 3
    }
67
68
    public function addLinks(array $links)
69
    {
70
        foreach ($links as $link => $href) {
71
            $this->addLink($link, $href);
72
        }
73
    }
74
75 1
    public function setLinks(array $links)
76
    {
77 1
        $this->_links = $links;
78 1
    }
79
80 2
    public function getLinks()
81
    {
82 2
        return $this->_links;
83
    }
84
85
    public function hasHash($hash)
86
    {
87
        return isset($this->_hashes[(string) $hash]);
88
    }
89
90 3
    public function addHash($hash)
91
    {
92 3
        $this->_hashes[(string) $hash] = $hash;
93 3
    }
94
95
    public function addHashes(array $hashes)
96
    {
97
        foreach ($hashes as $hash) {
98
            $this->addHash($hash);
99
        }
100
    }
101
102
    public function setHashes(array $hashes)
103
    {
104
        $this->_hashes = [];
105
        $this->addHashes($hashes);
106
    }
107
108 2
    public function getHashes()
109
    {
110 2
        return $this->_hashes;
111
    }
112
113
    public function getFirstTag()
114
    {
115
        return reset($this->_tags);
116
    }
117
118 3
    public function countTags()
119
    {
120 3
        return count($this->_tags);
121
    }
122
123 3
    public function initTags()
124
    {
125 3
        if (!$this->countTags()) {
126 3
            $this->addTag(new Tag($this->lastTag));
127 3
        }
128 3
    }
129
130 2
    public function getTags()
131
    {
132 2
        return $this->_tags;
133
    }
134
135 1
    public function addTags(array $tags)
136
    {
137 1
        foreach ($tags as $name => $tag) {
138 1
            $this->addTag($tag);
139 1
        }
140 1
    }
141
142 1
    public function setTags(array $tags)
143
    {
144 1
        $this->_tags = [];
145 1
        $this->addTags($tags);
146 1
    }
147
148
    /**
149
     * Returns tag by name.
150
     * Creates if not exists.
151
     * Returns first tag when given empty name.
152
     * @param string|Tag $tag tag or tag name
153
     * @return Tag
154
     */
155 3
    public function findTag($tag)
156
    {
157 3
        if (!$tag) {
158 1
            $tag = reset($this->_tags) ?: $this->lastTag;
159 1
        }
160 3
        $name = $tag instanceof Tag ? $tag->getName() : $tag;
161 3
        if (!$this->hasTag($name)) {
162 3
            $this->_tags[$name] = new Tag($name);
163 3
        }
164
165 3
        return $this->_tags[$name];
166
    }
167
168 3
    public function hasTag($tag)
169
    {
170 3
        return isset($this->_tags[$tag]);
171
    }
172
173 3
    public function addTag(Tag $tag)
174
    {
175 3
        return $this->findTag($tag->getName())->setDate($tag->getDate())->addNotes($tag->getNotes());
176
    }
177
178
    /**
179
     * Merges given history into the current.
180
     * @param History $history
181
     */
182
    public function merge(History $history)
183
    {
184
        $this->mergeTags($history->getTags());
185
        $this->addLinks($history->getLinks());
186
        $this->addHashes($history->getHashes());
187
    }
188
189
    /**
190
     * Merge given tags into the current history.
191
     * @param Tag[] $tags
192
     */
193
    public function mergeTags(array $tags)
194
    {
195
        foreach ($tags as $tag) {
196
            foreach ($tag->getNotes() as $note) {
197
                $note->removeCommits($this->getHashes());
198
            }
199
        }
200
        $olds = $this->getTags();
201
        $this->_tags = $tags;
202
        foreach ($olds as $tag) {
203
            $this->addTag($tag);
204
        }
205
    }
206
}
207