Completed
Pull Request — develop (#9)
by Daan van
10:15 queued 07:39
created

TelephoneNumberList::count()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace OpenConext\Value\Saml\Metadata\ContactPerson;
4
5
use ArrayIterator;
6
use Countable;
7
use IteratorAggregate;
8
use OpenConext\Value\Exception\IndexOutOfBoundsException;
9
use OpenConext\Value\Exception\InvalidArgumentException;
10
11
final class TelephoneNumberList implements Countable, IteratorAggregate
12
{
13
    /**
14
     * @var TelephoneNumber[]
15
     */
16
    private $telephoneNumbers;
17
18
    /**
19
     * @param TelephoneNumber[] $telephoneNumbers
20
     */
21
    public function __construct(array $telephoneNumbers)
22
    {
23
        foreach ($telephoneNumbers as $index => $telephoneNumber) {
24
            if (!$telephoneNumber instanceof TelephoneNumber) {
25
                throw new InvalidArgumentException(sprintf(
26
                    'Unexpected value found when creating TelephoneNumberList at index "%d": "%s"',
27
                    $index,
28
                    (is_object($telephoneNumber) ? get_class($telephoneNumber) : gettype($telephoneNumber))
29
                ));
30
            }
31
32
            $this->telephoneNumbers[] = $telephoneNumber;
33
        }
34
    }
35
36
    /**
37
     * @param TelephoneNumber $telephoneNumber
38
     * @return TelephoneNumberList
39
     */
40
    public function add(TelephoneNumber $telephoneNumber)
41
    {
42
        return new self(array_merge($this->telephoneNumbers, array($telephoneNumber)));
43
    }
44
45
    /**
46
     * @param TelephoneNumber $telephoneNumber
47
     * @return bool
48
     */
49
    public function contains(TelephoneNumber $telephoneNumber)
50
    {
51
        foreach ($this->telephoneNumbers as $number) {
52
            if ($number->equals($telephoneNumber)) {
53
                return true;
54
            }
55
        }
56
57
        return false;
58
    }
59
60
    /**
61
     * @param TelephoneNumber $telephoneNumber
62
     * @return int
63
     */
64
    public function indexOf(TelephoneNumber $telephoneNumber)
65
    {
66
        foreach ($this->telephoneNumbers as $index => $number) {
67
            if ($number->equals($telephoneNumber)) {
68
                return $index;
69
            }
70
        }
71
72
        return -1;
73
    }
74
75
    /**
76
     * @param int $index
77
     * @return TelephoneNumber
78
     */
79
    public function get($index)
80
    {
81
        if (!is_int($index)) {
82
            throw InvalidArgumentException::invalidType('integer', 'index', $index);
83
        }
84
85
        if ($index < 0) {
86
            throw IndexOutOfBoundsException::tooLow($index, 0);
87
        }
88
89
        if ($index > count($this->telephoneNumbers) - 1) {
90
            throw IndexOutOfBoundsException::tooHigh($index, count($this->telephoneNumbers) - 1);
91
        }
92
93
        return $this->telephoneNumbers[$index];
94
    }
95
96
    /**
97
     * @param TelephoneNumberList $other
98
     * @return bool
99
     */
100
    public function equals(TelephoneNumberList $other)
101
    {
102
        if (count($this->telephoneNumbers) !== count($other->telephoneNumbers)) {
103
            return false;
104
        }
105
106
        foreach ($this->telephoneNumbers as $index => $telephoneNumber) {
107
            if (!$telephoneNumber->equals($other->telephoneNumbers[$index])) {
108
                return false;
109
            }
110
        }
111
112
        return true;
113
    }
114
115
    /**
116
     * @return TelephoneNumber[]
117
     */
118
    public function toArray()
119
    {
120
        return $this->telephoneNumbers;
121
    }
122
123
    public function getIterator()
124
    {
125
        return new ArrayIterator($this->telephoneNumbers);
126
    }
127
128
    public function count()
129
    {
130
        return count($this->telephoneNumbers);
131
    }
132
133
    public function __toString()
134
    {
135
        return sprintf('TelephoneNumberList[%s]', implode(', ', $this->telephoneNumbers));
136
    }
137
}
138