IteratorTools::fromGenerator()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RulerZ\Result;
6
7
use ArrayIterator;
8
9
/**
10
 * Set of utility methods to create traversable objects from various inputs.
11
 */
12
class IteratorTools
13
{
14
    /**
15
     * Ensures that the given items are \Traversable.
16
     *
17
     * Usage:
18
     *
19
     * ```
20
     * IteratorTools::ensureTraversable([1, 2, 3]);
21
     * IteratorTools::ensureTraversable(new \ArrayIterator([1, 2, 3]));
22
     * ```
23
     *
24
     * @param mixed $items
25
     *
26
     * @throws \InvalidArgumentException
27
     */
28
    public static function ensureTraversable($items): \Traversable
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
    public static function fromArray(array $results): \Traversable
53
    {
54
        return new ArrayIterator($results);
55
    }
56
57
    /**
58
     * Creates an iterator from a generator.
59
     *
60
     * Example of valid usage:
61
     *
62
     * ```
63
     * IteratorTools::fromGenerator(function() {
64
     *     yield 1;
65
     *     yield 2;
66
     *     yield 3;
67
     * });
68
     * ```
69
     *
70
     * @param callable $generatorCallable A callable, which will return a generator once called.
71
     */
72
    public static function fromGenerator(callable $generatorCallable): \Traversable
73
    {
74
        return $generatorCallable();
75
    }
76
}
77