Completed
Push — feature/more-metadata-values ( ebbb14...11e9d5 )
by Daan van
04:21 queued 02:24
created

EmailAddressList::__toString()   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 EmailAddressList implements Countable, IteratorAggregate
12
{
13
    /**
14
     * @var EmailAddress[]
15
     */
16
    private $emailAddresses;
17
18
    public function __construct(array $emailAddresses)
19
    {
20
        foreach ($emailAddresses as $index => $emailAddress) {
21
            if (!$emailAddress instanceof EmailAddress) {
22
                throw new InvalidArgumentException(sprintf(
23
                    'Unexpected value found when creating EmailAddressList at index "%d": "%s"',
24
                    $index,
25
                    (is_object($emailAddress) ? get_class($emailAddress) : gettype($emailAddress))
26
                ));
27
            }
28
29
            $this->emailAddresses[] = $emailAddress;
30
        }
31
    }
32
33
    /**
34
     * @param EmailAddress $emailAddress
35
     * @return EmailAddressList
36
     */
37
    public function add(EmailAddress $emailAddress)
38
    {
39
        return new self(array_merge($this->emailAddresses, array($emailAddress)));
40
    }
41
42
    /**
43
     * @param EmailAddress $emailAddress
44
     * @return bool
45
     */
46
    public function contains(EmailAddress $emailAddress)
47
    {
48
        foreach ($this->emailAddresses as $address) {
49
            if ($address->equals($emailAddress)) {
50
                return true;
51
            }
52
        }
53
54
        return false;
55
    }
56
57
    /**
58
     * @param EmailAddress $emailAddress
59
     * @return int
60
     */
61
    public function indexOf(EmailAddress $emailAddress)
62
    {
63
        foreach ($this->emailAddresses as $index => $address) {
64
            if ($address->equals($emailAddress)) {
65
                return $index;
66
            }
67
        }
68
69
        return -1;
70
    }
71
72
    /**
73
     * @param int $index
74
     * @return EmailAddress
75
     */
76
    public function get($index)
77
    {
78
        if (!is_int($index)) {
79
            throw InvalidArgumentException::invalidType('integer', 'index', $index);
80
        }
81
82
        if ($index < 0) {
83
            throw IndexOutOfBoundsException::tooLow($index, 0);
84
        }
85
86
        if ($index > count($this->emailAddresses) - 1) {
87
            throw IndexOutOfBoundsException::tooHigh($index, count($this->emailAddresses) - 1);
88
        }
89
90
        return $this->emailAddresses[$index];
91
    }
92
93
    /**
94
     * @param EmailAddressList $other
95
     * @return bool
96
     */
97
    public function equals(EmailAddressList $other)
98
    {
99
        if (count($this->emailAddresses) !== count($other->emailAddresses)) {
100
            return false;
101
        }
102
103
        foreach ($this->emailAddresses as $index => $emailAddress) {
104
            if (!$emailAddress->equals($other->emailAddresses[$index])) {
105
                return false;
106
            }
107
        }
108
109
        return true;
110
    }
111
112
    /**
113
     * @return EmailAddress[]
114
     */
115
    public function toArray()
116
    {
117
        return $this->emailAddresses;
118
    }
119
120
    public function getIterator()
121
    {
122
        return new ArrayIterator($this->emailAddresses);
123
    }
124
125
    public function count()
126
    {
127
        return count($this->emailAddresses);
128
    }
129
130
    public function __toString()
131
    {
132
        return sprintf('EmailAddressList[%s]', implode(', ', $this->emailAddresses));
133
    }
134
}
135