Zone::setName()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Badcow DNS Library.
7
 *
8
 * (c) Samuel Williams <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Badcow\DNS;
15
16
class Zone implements \Countable, \IteratorAggregate, \ArrayAccess
17
{
18
    /**
19
     * @var string
20
     */
21
    protected $name;
22
23
    /**
24
     * @var int
25
     */
26
    protected $defaultTtl;
27
28
    /**
29
     * @var ResourceRecord[]
30
     */
31
    private $resourceRecords = [];
32
33
    /**
34
     * Zone constructor.
35
     */
36 44
    public function __construct(?string $name = null, ?int $defaultTtl = null, array $resourceRecords = [])
37
    {
38 44
        if (null !== $name) {
39 43
            $this->setName($name);
40
        }
41
42 44
        if (null !== $defaultTtl) {
43 11
            $this->setDefaultTtl($defaultTtl);
44
        }
45
46 44
        $this->fromArray($resourceRecords);
47 44
    }
48
49
    /**
50
     * @throws \InvalidArgumentException
51
     */
52 44
    public function setName(string $name): void
53
    {
54 44
        if (!Validator::fullyQualifiedDomainName($name)) {
55 1
            throw new \InvalidArgumentException(sprintf('Zone "%s" is not a fully qualified domain name.', $name));
56
        }
57
58 44
        $this->name = $name;
59 44
    }
60
61 35
    public function getName(): string
62
    {
63 35
        return $this->name;
64
    }
65
66
    /**
67
     * @return int
68
     */
69 18
    public function getDefaultTtl(): ?int
70
    {
71 18
        return $this->defaultTtl;
72
    }
73
74 25
    public function setDefaultTtl(int $defaultTtl): void
75
    {
76 25
        $this->defaultTtl = $defaultTtl;
77 25
    }
78
79
    /**
80
     * @return ResourceRecord[]
81
     */
82 20
    public function getResourceRecords(): array
83
    {
84 20
        return $this->resourceRecords;
85
    }
86
87
    /**
88
     * @param ResourceRecord[] $resourceRecords
89
     */
90 44
    public function fromArray(array $resourceRecords): void
91
    {
92 44
        foreach ($resourceRecords as $resourceRecord) {
93 13
            $this->addResourceRecord($resourceRecord);
94
        }
95 44
    }
96
97
    /**
98
     * @param ResourceRecord ...$resourceRecords
99
     */
100 2
    public function fromList(ResourceRecord ...$resourceRecords): void
101
    {
102 2
        $this->fromArray($resourceRecords);
103 2
    }
104
105 40
    public function addResourceRecord(ResourceRecord $resourceRecord): void
106
    {
107 40
        $this->resourceRecords[] = $resourceRecord;
108 40
    }
109
110 14
    public function getIterator(): \ArrayIterator
111
    {
112 14
        return new \ArrayIterator($this->resourceRecords);
113
    }
114
115 10
    public function count(): int
116
    {
117 10
        return \count($this->resourceRecords);
118
    }
119
120 1
    public function isEmpty(): bool
121
    {
122 1
        return empty($this->resourceRecords);
123
    }
124
125 1
    public function contains(ResourceRecord $resourceRecord): bool
126
    {
127 1
        foreach ($this->resourceRecords as $_item) {
128 1
            if ($_item === $resourceRecord) {
129 1
                return true;
130
            }
131
        }
132
133 1
        return false;
134
    }
135
136 2
    public function remove(ResourceRecord $resourceRecord): bool
137
    {
138 2
        foreach ($this->resourceRecords as $key => $_item) {
139 2
            if ($_item === $resourceRecord) {
140 2
                unset($this->resourceRecords[$key]);
141
142 2
                return true;
143
            }
144
        }
145
146 1
        return false;
147
    }
148
149
    /**
150
     * Return the class of the zone, defaults to 'IN'.
151
     */
152 2
    public function getClass(): string
153
    {
154 2
        foreach ($this->resourceRecords as $resourceRecord) {
155 2
            if (null !== $resourceRecord->getClass()) {
156 1
                return $resourceRecord->getClass();
157
            }
158
        }
159
160 1
        return Classes::INTERNET;
161
    }
162
163
    /**
164
     * @param mixed $offset
165
     */
166 2
    public function offsetExists($offset): bool
167
    {
168 2
        return array_key_exists($offset, $this->resourceRecords);
169
    }
170
171
    /**
172
     * @param mixed $offset
173
     */
174 7
    public function offsetGet($offset): ResourceRecord
175
    {
176 7
        return $this->resourceRecords[$offset];
177
    }
178
179
    /**
180
     * @param mixed $offset
181
     * @param mixed $value
182
     */
183 1
    public function offsetSet($offset, $value): void
184
    {
185 1
        $this->resourceRecords[$offset] = $value;
186 1
    }
187
188
    /**
189
     * @param mixed $offset
190
     */
191 1
    public function offsetUnset($offset): void
192
    {
193 1
        unset($this->resourceRecords[$offset]);
194 1
    }
195
}
196