Completed
Pull Request — master (#50)
by Frederik
02:25
created

HeaderName::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Genkgo\Mail\Header;
5
6
final class HeaderName
7
{
8
    /**
9
     * @var string
10
     */
11
    private $name;
12
13
    /**
14
     * @param string $name
15
     */
16 183
    public function __construct(string $name)
17
    {
18 183
        $this->assert($name);
19
20 176
        $this->name = $name;
21 176
    }
22
23
    /**
24
     * @param HeaderName $headerName
25
     * @return bool
26
     */
27 5
    public function equals(self $headerName): bool
28
    {
29 5
        return \strcasecmp($this->name, $headerName->name) === 0;
30
    }
31
32
    /**
33
     * @param string $name
34
     */
35 183
    private function assert(string $name)
36
    {
37 183
        if ($this->validate($name) === false) {
38 7
            throw new \InvalidArgumentException(
39 7
                'Invalid header name ' . $name . '. Wrong characters used or length too long (max 74)'
40
            );
41
        }
42 176
    }
43
44
    /**
45
     * @param string $name
46
     * @return bool
47
     */
48 183
    private function validate(string $name): bool
49
    {
50 183
        $tot = \strlen($name);
51
52 183
        if ($tot > 74) {
53
            return false;
54
        }
55
56 183
        for ($i = 0; $i < $tot; $i += 1) {
57 183
            $ord = \ord($name[$i]);
58 183
            if ($ord < 33 || $ord > 126 || $ord === 58) {
59 7
                return false;
60
            }
61
        }
62 176
        return true;
63
    }
64
65
    /**
66
     * @return string
67
     */
68 171
    public function __toString(): string
69
    {
70 171
        return $this->name;
71
    }
72
}
73