TraefikHostnameOptionProvider::validate()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
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\DigitalOcean\DnsValidated;
9
use Cocotte\DigitalOcean\DnsValidator;
10
use Cocotte\DigitalOcean\Hostname;
11
use Cocotte\Environment\EnvironmentState;
12
use Symfony\Component\Console\Input\InputOption;
13
use Symfony\Component\Console\Question\Question;
14
15
class TraefikHostnameOptionProvider implements OptionProvider, DnsValidated
16
{
17
    /**
18
     * @var Style
19
     */
20
    private $style;
21
22
    /**
23
     * @var DnsValidator
24
     */
25
    private $dnsValidator;
26
27
    public function __construct(Style $style, DnsValidator $dnsValidator)
28
    {
29
        $this->style = $style;
30
        $this->dnsValidator = $dnsValidator;
31
    }
32
33
    public function option(EnvironmentState $environmentState): InputOption
34
    {
35
        return new StyledInputOption(
36
            $this->optionName(),
37
            null,
38
            InputOption::VALUE_REQUIRED,
39
            $this->helpMessage(),
40
            $environmentState->defaultValue(TraefikHostname::TRAEFIK_UI_HOSTNAME)
41
        );
42
    }
43
44
    public function helpMessage(): string
45
    {
46
        return $this->style->optionHelp(
47
            "Traefik UI hostname",
48
            $this->style->hostnameHelp('Traefik UI', 'traefik')
49
        );
50
    }
51
52
    public function validate(string $value)
53
    {
54
        $traefikHostname = new TraefikHostname(Hostname::parse($value));
55
56
        $this->dnsValidator->validateHost($traefikHostname->toHostname());
57
    }
58
59
    public function onCorrectAnswer(string $answer)
60
    {
61
        $this->style->success("Traefik UI hostname '$answer' is valid.");
62
        $this->style->pause();
63
    }
64
65
    public function optionName(): string
66
    {
67
        return TraefikHostname::OPTION_NAME;
68
    }
69
70
    public function question(): Question
71
    {
72
        return new Question(
73
            $this->style->quittableQuestion(
74
                "Enter the <options=bold>Traefik UI hostname</> (e.g., traefik.mydomain.com)"
75
            )
76
        );
77
    }
78
79
}