HostnameExtractor::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace BenTools\HostnameExtractor;
4
5
use BenTools\HostnameExtractor\SuffixProvider\SuffixProviderInterface;
6
use BenTools\HostnameExtractor\Visitor\DomainVisitor;
7
use BenTools\HostnameExtractor\Visitor\HostnameVisitorInterface;
8
use BenTools\HostnameExtractor\Visitor\Ipv4Visitor;
9
use BenTools\HostnameExtractor\Visitor\IPv6Visitor;
10
use BenTools\HostnameExtractor\Visitor\SuffixVisitor;
11
use BenTools\HostnameExtractor\Visitor\TldVisitor;
12
use function BenTools\Violin\string;
13
14
final class HostnameExtractor
15
{
16
    /**
17
     * @var HostnameVisitorInterface[]
18
     */
19
    private $visitors;
20
21
    /**
22
     * HostnameExtractor constructor.
23
     *
24
     * @param SuffixProviderInterface|null $suffixProvider
25
     */
26
    public function __construct(SuffixProviderInterface $suffixProvider = null)
27
    {
28
        $this->visitors = [
29
            new IPv6Visitor(),
30
            new Ipv4Visitor(),
31
            new SuffixVisitor($suffixProvider),
32
            new TldVisitor(),
33
            new DomainVisitor(),
34
        ];
35
    }
36
37
    /**
38
     * @param string $hostname
39
     * @return ParsedHostname
40
     * @throws \InvalidArgumentException
41
     */
42
    public function extract(string $hostname): ParsedHostname
43
    {
44
        $hostname = string($hostname);
45
        $parsedHostname = ParsedHostname::new();
46
        foreach ($this->visitors as $visitor) {
47
            $visitor->visit($hostname, $parsedHostname);
48
        }
49
        return $parsedHostname;
50
    }
51
}
52