Completed
Push — master ( 7105b6...cd12e3 )
by Kévin
02:18
created

IteratorTools::fromArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace RulerZ\Result;
4
5
use ArrayIterator;
6
7
/**
8
 * Set of utility methods to create traversable objects from various inputs.
9
 */
10
class IteratorTools
11
{
12
    /**
13
     * Ensures that the given items are \Traversable.
14
     *
15
     * Usage:
16
     *
17
     * ```
18
     * IteratorTools::ensureTraversable([1, 2, 3]);
19
     * IteratorTools::ensureTraversable(new \ArrayIterator([1, 2, 3]));
20
     * ```
21
     *
22
     * @param $items
23
     *
24
     * @return \Traversable
25
     *
26
     * @throws \InvalidArgumentException
27
     */
28
    public static function ensureTraversable($items)
29
    {
30
        if ($items instanceof \Traversable) {
31
            return $items;
32
        }
33
34
        if (is_array($items)) {
35
            return self::fromArray($items);
36
        }
37
38
        throw new \InvalidArgumentException('Un-handled argument of type: '.get_class($items));
39
    }
40
41
    /**
42
     * Creates an iterator from an array.
43
     *
44
     * Usage:
45
     *
46
     * ```
47
     * IteratorTools::fromArray([1, 2, 3]);
48
     * ```
49
     *
50
     * @param array $results
51
     *
52
     * @return \ArrayIterator
53
     */
54
    public static function fromArray(array $results)
55
    {
56
        return new ArrayIterator($results);
57
    }
58
59
    /**
60
     * Creates an iterator from a generator.
61
     *
62
     * Example of valid usage:
63
     *
64
     * ```
65
     * IteratorTools::fromGenerator(function() {
66
     *     yield 1;
67
     *     yield 2;
68
     *     yield 3;
69
     * });
70
     * ```
71
     *
72
     * @param callable $generatorCallable A callable, which will return a generator once called.
73
     *
74
     * @return \Iterator
75
     */
76
    public static function fromGenerator(callable $generatorCallable)
77
    {
78
        return $generatorCallable();
79
    }
80
}
81