Completed
Branch v2 (ec0e33)
by Sam
02:09
created

Zone::remove()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 3
nc 3
nop 1
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
    public function __construct(string $name = null, int $defaultTtl = null, array $resourceRecords = [])
41
    {
42
        $this->name = $name;
43
        $this->defaultTtl = $defaultTtl;
44
        $this->fromArray($resourceRecords);
45
    }
46
47
    /**
48
     * @param string $name
49
     *
50
     * @throws \InvalidArgumentException
51
     */
52
    public function setName(string $name): void
53
    {
54
        if (!Validator::fullyQualifiedDomainName($name)) {
55
            throw new \InvalidArgumentException(sprintf('Zone "%s" is not a fully qualified domain name.', $name));
56
        }
57
58
        $this->name = $name;
59
    }
60
61
    /**
62
     * @return string
63
     */
64
    public function getName(): string
65
    {
66
        return $this->name;
67
    }
68
69
    /**
70
     * @return int
71
     */
72
    public function getDefaultTtl(): int
73
    {
74
        return $this->defaultTtl;
75
    }
76
77
    /**
78
     * @param int $defaultTtl
79
     */
80
    public function setDefaultTtl(int $defaultTtl): void
81
    {
82
        $this->defaultTtl = $defaultTtl;
83
    }
84
85
    /**
86
     * @return ResourceRecord[]
87
     */
88
    public function getResourceRecords(): array
89
    {
90
        return $this->resourceRecords;
91
    }
92
93
    /**
94
     * @param array $resourceRecords
95
     */
96
    public function fromArray(array $resourceRecords)
97
    {
98
        foreach ($resourceRecords as $resourceRecord) {
99
            $this->addResourceRecord($resourceRecord);
100
        }
101
    }
102
103
    /**
104
     * @param ResourceRecord ...$resourceRecords
105
     */
106
    public function fromList(ResourceRecord ...$resourceRecords): void
107
    {
108
        $this->fromArray($resourceRecords);
109
    }
110
111
    /**
112
     * @param ResourceRecord $resourceRecord
113
     */
114
    public function addResourceRecord(ResourceRecord $resourceRecord): void
115
    {
116
        $this->resourceRecords[] = $resourceRecord;
117
    }
118
119
    /**
120
     * @return \ArrayIterator
121
     */
122
    public function getIterator(): \ArrayIterator
123
    {
124
        return new \ArrayIterator($this->resourceRecords);
125
    }
126
127
    /**
128
     * @return int
129
     */
130
    public function count(): int
131
    {
132
        return \count($this->resourceRecords);
133
    }
134
135
    /**
136
     * @return bool
137
     */
138
    public function isEmpty(): bool
139
    {
140
        return empty($this->resourceRecords);
141
    }
142
143
    /**
144
     * @param ResourceRecord $resourceRecord
145
     *
146
     * @return bool
147
     */
148
    public function contains(ResourceRecord $resourceRecord): bool
149
    {
150
        foreach ($this->resourceRecords as $_item) {
151
            if ($_item === $resourceRecord) {
152
                return true;
153
            }
154
        }
155
156
        return false;
157
    }
158
159
    /**
160
     * @param ResourceRecord $resourceRecord
161
     *
162
     * @return bool
163
     */
164
    public function remove(ResourceRecord $resourceRecord): bool
165
    {
166
        foreach ($this->resourceRecords as $key => $_item) {
167
            if ($_item === $resourceRecord) {
168
                unset($this->resourceRecords[$key]);
169
170
                return true;
171
            }
172
        }
173
174
        return false;
175
    }
176
}
177