Completed
Push — master ( d4f713...589745 )
by Jonathan
12s queued 11s
created

ChangelogConfig::getGitHubCredentials()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
ccs 2
cts 2
cp 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ChangelogGenerator;
6
7
use function array_merge;
8
use function sprintf;
9
use function str_replace;
10
use function urlencode;
11
12
class ChangelogConfig
13
{
14
    private const DEFAULT_ROOT_GITHUB_URL = 'https://api.github.com';
15
16
    /** @var string */
17
    private $user;
18
19
    /** @var string */
20
    private $repository;
21
22
    /** @var string */
23
    private $milestone;
24
25
    /** @var string[] */
26
    private $labels;
27
28
    /** @var bool */
29
    private $includeOpen;
30
31
    /** @var bool */
32
    private $showContributors = false;
33
34
    /** @var GitHubCredentials|null */
35
    private $gitHubCredentials;
36
37
    /** @var mixed[] */
38
    private $options = ['rootGitHubUrl' => self::DEFAULT_ROOT_GITHUB_URL];
39
40
    /**
41
     * @param string[] $labels
42
     * @param mixed[]  $options
43
     */
44 38
    public function __construct(
45
        string $user = '',
46
        string $repository = '',
47
        string $milestone = '',
48
        array $labels = [],
49
        bool $includeOpen = false,
50
        array $options = []
51
    ) {
52 38
        $this->user        = $user;
53 38
        $this->repository  = $repository;
54 38
        $this->milestone   = $milestone;
55 38
        $this->labels      = $labels;
56 38
        $this->includeOpen = $includeOpen;
57 38
        $this->options     = array_merge($this->options, $options);
58 38
    }
59
60 1
    public function getUser() : string
61
    {
62 1
        return $this->user;
63
    }
64
65 16
    public function setUser(string $user) : self
66
    {
67 16
        $this->user = $user;
68
69 16
        return $this;
70
    }
71
72 1
    public function getRepository() : string
73
    {
74 1
        return $this->repository;
75
    }
76
77 16
    public function setRepository(string $repository) : self
78
    {
79 16
        $this->repository = $repository;
80
81 16
        return $this;
82
    }
83
84 2
    public function getMilestone() : string
85
    {
86 2
        return $this->milestone;
87
    }
88
89 16
    public function setMilestone(string $milestone) : self
90
    {
91 16
        $this->milestone = $milestone;
92
93 16
        return $this;
94
    }
95
96
    /**
97
     * @return string[]
98
     */
99 4
    public function getLabels() : array
100
    {
101 4
        return $this->labels;
102
    }
103
104
    /**
105
     * @param string[] $labels
106
     */
107 8
    public function setLabels(array $labels) : self
108
    {
109 8
        $this->labels = $labels;
110
111 8
        return $this;
112
    }
113
114 1
    public function shouldIncludeOpen() : bool
115
    {
116 1
        return $this->includeOpen;
117
    }
118
119 5
    public function setIncludeOpen(bool $includeOpen) : self
120
    {
121 5
        $this->includeOpen = $includeOpen;
122
123 5
        return $this;
124
    }
125
126 1
    public function showContributors() : bool
127
    {
128 1
        return $this->showContributors;
129
    }
130
131 2
    public function setShowContributors(bool $showContributors) : self
132
    {
133 2
        $this->showContributors = $showContributors;
134
135 2
        return $this;
136
    }
137
138 2
    public function getGitHubCredentials() : ?GitHubCredentials
139
    {
140 2
        return $this->gitHubCredentials;
141
    }
142
143 1
    public function setGitHubCredentials(GitHubCredentials $gitHubCredentials) : self
144
    {
145 1
        $this->gitHubCredentials = $gitHubCredentials;
146
147 1
        return $this;
148
    }
149
150
    /**
151
     * @return mixed[]
152
     */
153 1
    public function getOptions() : array
154
    {
155 1
        return $this->options;
156
    }
157
158
    /**
159
     * @param mixed[] $options
160
     */
161 3
    public function setOptions(array $options) : self
162
    {
163 3
        $this->options = $options;
164
165 3
        return $this;
166
    }
167
168
    /**
169
     * @return mixed
170
     */
171 1
    public function getOption(string $name)
172
    {
173 1
        return $this->options[$name] ?? null;
174
    }
175
176
    /**
177
     * @param mixed $value
178
     */
179 1
    public function setOption(string $name, $value) : self
180
    {
181 1
        $this->options[$name] = $value;
182
183 1
        return $this;
184
    }
185
186 6
    public function getMilestoneIssuesUrl(string $label) : string
187
    {
188 6
        $query = urlencode(sprintf(
189 6
            'milestone:"%s" repo:%s/%s%s%s',
190 6
            str_replace('"', '\"', $this->milestone),
191 6
            $this->user,
192 6
            $this->repository,
193 6
            $this->includeOpen ? '' : ' state:closed',
194 6
            $label !== '' ? ' label:' . $label : ''
195
        ));
196
197 6
        return sprintf('%s/search/issues?q=%s', $this->getRootGitHubUrl(), $query);
198
    }
199
200 17
    public function isValid() : bool
201
    {
202 17
        return $this->user !== '' && $this->repository !== '' && $this->milestone !== '';
203
    }
204
205 6
    private function getRootGitHubUrl() : string
206
    {
207 6
        return $this->options['rootGitHubUrl'] ?? self::DEFAULT_ROOT_GITHUB_URL;
208
    }
209
}
210