Collection   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 204
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 204
rs 10
c 1
b 0
f 0
wmc 19
lcom 1
cbo 0

16 Methods

Rating   Name   Duplication   Size   Complexity  
A getFieldNames() 0 4 1
A getProperty() 0 4 1
A getPropertyNames() 0 4 1
A __construct() 0 4 1
A getField() 0 8 2
A all() 0 4 1
A asArray() 0 6 2
A map() 0 4 1
A asJson() 0 4 1
A count() 0 4 1
A getIterator() 0 4 1
A offsetExists() 0 4 1
A offsetGet() 0 4 1
A offsetSet() 0 8 2
A offsetUnset() 0 4 1
A __toString() 0 4 1
1
<?php
2
/**
3
 * Copyright 2016 Facebook, Inc.
4
 *
5
 * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
 * use, copy, modify, and distribute this software in source code or binary
7
 * form for use in connection with the web services and APIs provided by
8
 * Facebook.
9
 *
10
 * As with any software that integrates with the Facebook platform, your use
11
 * of this software is subject to the Facebook Developer Principles and
12
 * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
 * shall be included in all copies or substantial portions of the software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * DEALINGS IN THE SOFTWARE.
22
 *
23
 */
24
namespace Facebook\GraphNodes;
25
26
/**
27
 * Class Collection
28
 *
29
 * Modified version of Collection in "illuminate/support" by Taylor Otwell
30
 *
31
 * @package Facebook
32
 */
33
34
use ArrayAccess;
35
use ArrayIterator;
36
use Countable;
37
use IteratorAggregate;
38
39
class Collection implements ArrayAccess, Countable, IteratorAggregate
40
{
41
    /**
42
     * The items contained in the collection.
43
     *
44
     * @var array
45
     */
46
    protected $items = [];
47
48
    /**
49
     * Create a new collection.
50
     *
51
     * @param array $items
52
     */
53
    public function __construct(array $items = [])
54
    {
55
        $this->items = $items;
56
    }
57
58
    /**
59
     * Gets the value of a field from the Graph node.
60
     *
61
     * @param string $name    The field to retrieve.
62
     * @param mixed  $default The default to return if the field doesn't exist.
63
     *
64
     * @return mixed
65
     */
66
    public function getField($name, $default = null)
67
    {
68
        if (isset($this->items[$name])) {
69
            return $this->items[$name];
70
        }
71
72
        return $default;
73
    }
74
75
    /**
76
     * Gets the value of the named property for this graph object.
77
     *
78
     * @param string $name    The property to retrieve.
79
     * @param mixed  $default The default to return if the property doesn't exist.
80
     *
81
     * @return mixed
82
     *
83
     * @deprecated 5.0.0 getProperty() has been renamed to getField()
84
     * @todo v6: Remove this method
85
     */
86
    public function getProperty($name, $default = null)
87
    {
88
        return $this->getField($name, $default);
89
    }
90
91
    /**
92
     * Returns a list of all fields set on the object.
93
     *
94
     * @return array
95
     */
96
    public function getFieldNames()
97
    {
98
        return array_keys($this->items);
99
    }
100
101
    /**
102
     * Returns a list of all properties set on the object.
103
     *
104
     * @return array
105
     *
106
     * @deprecated 5.0.0 getPropertyNames() has been renamed to getFieldNames()
107
     * @todo v6: Remove this method
108
     */
109
    public function getPropertyNames()
110
    {
111
        return $this->getFieldNames();
112
    }
113
114
    /**
115
     * Get all of the items in the collection.
116
     *
117
     * @return array
118
     */
119
    public function all()
120
    {
121
        return $this->items;
122
    }
123
124
    /**
125
     * Get the collection of items as a plain array.
126
     *
127
     * @return array
128
     */
129
    public function asArray()
130
    {
131
        return array_map(function ($value) {
132
            return $value instanceof Collection ? $value->asArray() : $value;
133
        }, $this->items);
134
    }
135
136
    /**
137
     * Run a map over each of the items.
138
     *
139
     * @param \Closure $callback
140
     *
141
     * @return static
142
     */
143
    public function map(\Closure $callback)
144
    {
145
        return new static(array_map($callback, $this->items, array_keys($this->items)));
146
    }
147
148
    /**
149
     * Get the collection of items as JSON.
150
     *
151
     * @param int $options
152
     *
153
     * @return string
154
     */
155
    public function asJson($options = 0)
156
    {
157
        return json_encode($this->asArray(), $options);
158
    }
159
160
    /**
161
     * Count the number of items in the collection.
162
     *
163
     * @return int
164
     */
165
    public function count()
166
    {
167
        return count($this->items);
168
    }
169
170
    /**
171
     * Get an iterator for the items.
172
     *
173
     * @return ArrayIterator
174
     */
175
    public function getIterator()
176
    {
177
        return new ArrayIterator($this->items);
178
    }
179
180
    /**
181
     * Determine if an item exists at an offset.
182
     *
183
     * @param mixed $key
184
     *
185
     * @return bool
186
     */
187
    public function offsetExists($key)
188
    {
189
        return array_key_exists($key, $this->items);
190
    }
191
192
    /**
193
     * Get an item at a given offset.
194
     *
195
     * @param mixed $key
196
     *
197
     * @return mixed
198
     */
199
    public function offsetGet($key)
200
    {
201
        return $this->items[$key];
202
    }
203
204
    /**
205
     * Set the item at a given offset.
206
     *
207
     * @param mixed $key
208
     * @param mixed $value
209
     *
210
     * @return void
211
     */
212
    public function offsetSet($key, $value)
213
    {
214
        if (is_null($key)) {
215
            $this->items[] = $value;
216
        } else {
217
            $this->items[$key] = $value;
218
        }
219
    }
220
221
    /**
222
     * Unset the item at a given offset.
223
     *
224
     * @param string $key
225
     *
226
     * @return void
227
     */
228
    public function offsetUnset($key)
229
    {
230
        unset($this->items[$key]);
231
    }
232
233
    /**
234
     * Convert the collection to its string representation.
235
     *
236
     * @return string
237
     */
238
    public function __toString()
239
    {
240
        return $this->asJson();
241
    }
242
}
243