Completed
Push — master ( 8220db...099bc9 )
by BENOIT
04:07
created

HostnameExtractor::findSuffix()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 3
eloc 5
nc 3
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 Stringy\Stringy;
13
use function Stringy\create as s;
14
15
final class HostnameExtractor
16
{
17
    /**
18
     * @var SuffixProviderInterface
19
     */
20
    private $suffixProvider;
21
22
    /**
23
     * @var HostnameVisitorInterface[]
24
     */
25
    private $visitors = [];
26
27
    /**
28
     * @inheritDoc
29
     */
30
    public function __construct(SuffixProviderInterface $suffixProvider)
31
    {
32
        $this->suffixProvider = $suffixProvider;
33
        $this->visitors = [
34
            new IPv6Visitor(),
35
            new Ipv4Visitor(),
36
            new SuffixVisitor($suffixProvider),
37
            new TldVisitor(),
38
            new DomainVisitor(),
39
        ];
40
    }
41
42
    /**
43
     * @param string $hostname
44
     * @return ParsedHostname
45
     * @throws \InvalidArgumentException
46
     */
47
    public function extract(string $hostname): ParsedHostname
48
    {
49
        $hostname = s($hostname);
50
        $parsedHostname = ParsedHostname::new();
51
        foreach ($this->visitors as $visitor) {
52
            $visitor->visit($hostname, $parsedHostname);
53
        }
54
        return $parsedHostname;
55
    }
56
}
57