TraefikHostnameOptionProvider   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 60
rs 10
c 0
b 0
f 0
wmc 7

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A helpMessage() 0 5 1
A onCorrectAnswer() 0 4 1
A question() 0 5 1
A validate() 0 5 1
A option() 0 8 1
A optionName() 0 3 1
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
}