Completed
Push — master ( ddc7b5...479f51 )
by Sam
01:38
created

Zone::getClass()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

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