Passed
Push — master ( fe19f5...e72d52 )
by Sam
03:19 queued 10s
created

Zone::offsetExists()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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
     * @param string|null $name
37
     * @param int|null    $defaultTtl
38
     * @param array       $resourceRecords
39
     */
40 36
    public function __construct(?string $name = null, ?int $defaultTtl = null, array $resourceRecords = [])
41
    {
42 36
        if (null !== $name) {
43 35
            $this->setName($name);
44
        }
45
46 36
        if (null !== $defaultTtl) {
47 11
            $this->setDefaultTtl($defaultTtl);
48
        }
49
50 36
        $this->fromArray($resourceRecords);
51 36
    }
52
53
    /**
54
     * @param string $name
55
     *
56
     * @throws \InvalidArgumentException
57
     */
58 36
    public function setName(string $name): void
59
    {
60 36
        if (!Validator::fullyQualifiedDomainName($name)) {
61 1
            throw new \InvalidArgumentException(sprintf('Zone "%s" is not a fully qualified domain name.', $name));
62
        }
63
64 36
        $this->name = $name;
65 36
    }
66
67
    /**
68
     * @return string
69
     */
70 8
    public function getName(): string
71
    {
72 8
        return $this->name;
73
    }
74
75
    /**
76
     * @return int
77
     */
78 8
    public function getDefaultTtl(): ?int
79
    {
80 8
        return $this->defaultTtl;
81
    }
82
83
    /**
84
     * @param int $defaultTtl
85
     */
86 21
    public function setDefaultTtl(int $defaultTtl): void
87
    {
88 21
        $this->defaultTtl = $defaultTtl;
89 21
    }
90
91
    /**
92
     * @return ResourceRecord[]
93
     */
94 20
    public function getResourceRecords(): array
95
    {
96 20
        return $this->resourceRecords;
97
    }
98
99
    /**
100
     * @param ResourceRecord[] $resourceRecords
101
     */
102 36
    public function fromArray(array $resourceRecords): void
103
    {
104 36
        foreach ($resourceRecords as $resourceRecord) {
105 13
            $this->addResourceRecord($resourceRecord);
106
        }
107 36
    }
108
109
    /**
110
     * @param ResourceRecord ...$resourceRecords
111
     */
112 2
    public function fromList(ResourceRecord ...$resourceRecords): void
113
    {
114 2
        $this->fromArray($resourceRecords);
115 2
    }
116
117
    /**
118
     * @param ResourceRecord $resourceRecord
119
     */
120 32
    public function addResourceRecord(ResourceRecord $resourceRecord): void
121
    {
122 32
        $this->resourceRecords[] = $resourceRecord;
123 32
    }
124
125
    /**
126
     * @return \ArrayIterator
127
     */
128 11
    public function getIterator(): \ArrayIterator
129
    {
130 11
        return new \ArrayIterator($this->resourceRecords);
131
    }
132
133
    /**
134
     * @return int
135
     */
136 6
    public function count(): int
137
    {
138 6
        return \count($this->resourceRecords);
139
    }
140
141
    /**
142
     * @return bool
143
     */
144 1
    public function isEmpty(): bool
145
    {
146 1
        return empty($this->resourceRecords);
147
    }
148
149
    /**
150
     * @param ResourceRecord $resourceRecord
151
     *
152
     * @return bool
153
     */
154 1
    public function contains(ResourceRecord $resourceRecord): bool
155
    {
156 1
        foreach ($this->resourceRecords as $_item) {
157 1
            if ($_item === $resourceRecord) {
158 1
                return true;
159
            }
160
        }
161
162 1
        return false;
163
    }
164
165
    /**
166
     * @param ResourceRecord $resourceRecord
167
     *
168
     * @return bool
169
     */
170 2
    public function remove(ResourceRecord $resourceRecord): bool
171
    {
172 2
        foreach ($this->resourceRecords as $key => $_item) {
173 2
            if ($_item === $resourceRecord) {
174 2
                unset($this->resourceRecords[$key]);
175
176 2
                return true;
177
            }
178
        }
179
180 1
        return false;
181
    }
182
183
    /**
184
     * Return the class of the zone, defaults to 'IN'.
185
     *
186
     * @return string
187
     */
188 2
    public function getClass(): string
189
    {
190 2
        foreach ($this->resourceRecords as $resourceRecord) {
191 2
            if (null !== $resourceRecord->getClass()) {
192 2
                return $resourceRecord->getClass();
193
            }
194
        }
195
196 1
        return Classes::INTERNET;
197
    }
198
199 1
    public function offsetExists($offset): bool
200
    {
201 1
        return array_key_exists($offset, $this->resourceRecords);
202
    }
203
204 3
    public function offsetGet($offset): ResourceRecord
205
    {
206 3
        return $this->resourceRecords[$offset];
207
    }
208
209
    public function offsetSet($offset, $value): void
210
    {
211
        $this->resourceRecords[$offset] = $value;
212
    }
213
214 1
    public function offsetUnset($offset): void
215
    {
216 1
        unset($this->resourceRecords[$offset]);
217 1
    }
218
}
219