This repository has been archived by the owner on Jun 4, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Configuration.php
90 lines (68 loc) · 2.01 KB
/
Configuration.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
/*
* This file is part of the NucleosUserBundle package.
*
* (c) Christian Gripp <mail@core23.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Nucleos\AutoMergeAction\Config;
use Webmozart\Assert\Assert;
/**
* @psalm-immutable
*/
final class Configuration
{
public const DEFAULT_LABEL = 'automerge';
public const DEFAULT_IGNORE_LABEL = 'wip';
private string $repository;
private string $label = self::DEFAULT_LABEL;
private string $ignoreLabel = self::DEFAULT_IGNORE_LABEL;
private bool $squash = false;
private bool $dryRun = false;
/**
* @param array<string, mixed> $options
*/
private function __construct(array $options)
{
Assert::keyExists($options, 'repository');
Assert::stringNotEmpty($options['repository']);
Assert::nullOrString($options['label']);
Assert::nullOrString($options['ignore-label']);
Assert::nullOrBoolean($options['squash']);
Assert::nullOrBoolean($options['dry-run']);
$this->repository = $options['repository'];
$this->label = $options['label'] ?? $this->label;
$this->ignoreLabel = $options['ignore-label'] ?? $this->ignoreLabel;
$this->squash = $options['squash'] ?? $this->squash;
$this->dryRun = $options['dry-run'] ?? $this->dryRun;
}
/**
* @param array<string, mixed> $options
*/
public static function fromInput(array $options): self
{
return new self($options);
}
public function repository(): string
{
return $this->repository;
}
public function label(): string
{
return $this->label;
}
public function ignoreLabel(): string
{
return $this->ignoreLabel;
}
public function isSquash(): bool
{
return $this->squash;
}
public function isDryRun(): bool
{
return $this->dryRun;
}
}