TraefikUsernameOptionProvider::helpMessage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Cocotte\Template\Traefik;
4
5
use Cocotte\Console\OptionProvider;
6
use Cocotte\Console\Style;
7
use Cocotte\Console\StyledInputOption;
8
use Cocotte\Environment\EnvironmentState;
9
use Symfony\Component\Console\Input\InputOption;
10
use Symfony\Component\Console\Question\Question;
11
12
class TraefikUsernameOptionProvider implements OptionProvider
13
{
14
    /**
15
     * @var Style
16
     */
17
    private $style;
18
19
    public function __construct(Style $style)
20
    {
21
        $this->style = $style;
22
    }
23
24
    public function option(EnvironmentState $environmentState): InputOption
25
    {
26
        return new StyledInputOption(
27
            $this->optionName(),
28
            null,
29
            InputOption::VALUE_REQUIRED,
30
            $this->helpMessage(),
31
            $environmentState->defaultValue(TraefikUsername::TRAEFIK_UI_USERNAME)
32
        );
33
    }
34
35
    public function helpMessage(): string
36
    {
37
        return $this->style->optionHelp(
38
            "Traefik UI username",
39
            [
40
                "Alphanumeric characters. ".
41
                "Must match ".TraefikUsername::REGEX,
42
            ]
43
        );
44
    }
45
46
    public function validate(string $value)
47
    {
48
        TraefikUsername::fromString($value);
49
    }
50
51
    public function optionName(): string
52
    {
53
        return TraefikUsername::OPTION_NAME;
54
    }
55
56
    public function question(): Question
57
    {
58
        return new Question(
59
            $this->style->quittableQuestion("Choose a <options=bold>username for your Traefik UI</>"),
60
            TraefikUsername::SUGGESTED_VALUE
61
        );
62
    }
63
64
    public function onCorrectAnswer(string $answer)
65
    {
66
        // do nothing
67
    }
68
69
}