1 | <?php |
||
19 | final class LabelBuilder |
||
20 | { |
||
21 | /** @var string */ |
||
22 | private $name; |
||
23 | |||
24 | /** @var int|null */ |
||
25 | private $version; |
||
26 | |||
27 | /** @var array Map of string encoded labels to label constants */ |
||
28 | private $labelMap = [ |
||
29 | 'alpha' => Label::PRECEDENCE_ALPHA, |
||
30 | 'beta' => Label::PRECEDENCE_BETA, |
||
31 | 'rc' => Label::PRECEDENCE_RC |
||
32 | ]; |
||
33 | |||
34 | |||
35 | /** |
||
36 | * Constructor. |
||
37 | * |
||
38 | * @param string $name |
||
39 | * @param int|null $version |
||
40 | */ |
||
41 | 17 | public function __construct($name = '', $version = null) |
|
42 | { |
||
43 | 17 | $this->name = $name; |
|
44 | 17 | $this->version = $version; |
|
45 | 17 | } |
|
46 | |||
47 | /** |
||
48 | * Set label name. |
||
49 | * |
||
50 | * @param string $name |
||
51 | * |
||
52 | * @return $this |
||
53 | */ |
||
54 | 8 | public function setName($name) |
|
55 | { |
||
56 | 8 | return new LabelBuilder( |
|
57 | $name, |
||
58 | 8 | $this->version |
|
59 | ); |
||
60 | } |
||
61 | |||
62 | /** |
||
63 | * Set label version. |
||
64 | * |
||
65 | * @param int|null $version |
||
66 | * |
||
67 | * @return $this |
||
68 | */ |
||
69 | 5 | public function setVersion($version) |
|
70 | { |
||
71 | 5 | return new LabelBuilder( |
|
72 | 5 | $this->name, |
|
73 | $version |
||
74 | ); |
||
75 | } |
||
76 | |||
77 | /** |
||
78 | * Build a label from the provided specification |
||
79 | * |
||
80 | * @return LabelInterface |
||
81 | */ |
||
82 | 11 | public function build() |
|
83 | { |
||
84 | // Default to miscellaneous 'dev' label |
||
85 | 11 | $label = new Label(Label::PRECEDENCE_DEV, $this->version, $this->name); |
|
86 | |||
87 | // No Label present or a dev label (these are a special-case for packagist branch versions - a version like |
||
88 | // 1.0.x-dev is equivalent to 1.0.* in conventional notation - there are additional semantics attached to this |
||
89 | // but they're not important for our purposes |
||
90 | 11 | if (!strlen($this->name) || 'dev' === $this->name) { |
|
91 | 7 | $label = new Label(Label::PRECEDENCE_ABSENT); |
|
92 | |||
93 | // Alpha, Beta & RC standard labels |
||
94 | 8 | } elseif (array_key_exists($this->name, $this->labelMap)) { |
|
95 | 7 | $label = new Label($this->labelMap[$this->name], $this->version); |
|
96 | } |
||
97 | |||
98 | 11 | return $label; |
|
99 | } |
||
100 | |||
101 | /** |
||
102 | * Build a label from a token list. |
||
103 | * |
||
104 | * @param Token[] $labelTokenList |
||
105 | * |
||
106 | * @return LabelInterface|null |
||
107 | */ |
||
108 | 6 | public function buildFromTokens(array $labelTokenList) |
|
140 | } |
||
141 |