StaticSiteNamespaceOptionProvider::optionName()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Cocotte\Template\StaticSite;
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 StaticSiteNamespaceOptionProvider 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(StaticSiteNamespace::STATIC_SITE_NAMESPACE)
32
        );
33
    }
34
35
    public function validate(string $value)
36
    {
37
        StaticSiteNamespace::fromString($value);
38
    }
39
40
    public function helpMessage(): string
41
    {
42
        return $this->style->optionHelp(
43
            "Static site namespace",
44
            [
45
                "Allowed characters are lowercase letters, digits and -. ".
46
                "Must match ".StaticSiteNamespace::REGEX,
47
            ]
48
        );
49
    }
50
51
    public function question(): Question
52
    {
53
        return new Question(
54
            $this->style->quittableQuestion("Choose a <options=bold>namespace for the site</>")
55
        );
56
    }
57
58
    public function onCorrectAnswer(string $answer)
59
    {
60
61
    }
62
63
    public function optionName(): string
64
    {
65
        return StaticSiteNamespace::OPTION_NAME;
66
    }
67
68
}