Completed
Push — master ( c9a923...7591c0 )
by Karsten
03:22
created

CollectToMapOperation::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 5
c 0
b 0
f 0
ccs 4
cts 4
cp 1
rs 9.4285
cc 2
eloc 3
nc 2
nop 2
crap 2
1
<?php
2
/**
3
 * File was created 07.05.2015 09:11
4
 *
5
 * @author Karsten J. Gerber <[email protected]>
6
 */
7
8
namespace PeekAndPoke\Component\Psi\Operation\Terminal;
9
10
use PeekAndPoke\Component\Psi\BinaryFunction;
11
use PeekAndPoke\Component\Psi\Psi\Map\Identity;
12
use PeekAndPoke\Component\Psi\TerminalOperation;
13
use PeekAndPoke\Component\Psi\UnaryFunction;
14
15
/**
16
 * CollectToMapOperation
17
 *
18
 * @author Karsten J. Gerber <[email protected]>
19
 */
20
class CollectToMapOperation implements TerminalOperation
21
{
22
    /** @var \Closure|UnaryFunction|BinaryFunction */
23
    private $keyMapper;
24
    /** @var \Closure|UnaryFunction|BinaryFunction */
25
    private $valueMapper;
26
27
    /**
28
     * @param \Closure|UnaryFunction|BinaryFunction $keyMapper
29
     * @param \Closure|UnaryFunction|BinaryFunction $valueMapper
30
     */
31 16
    public function __construct($keyMapper, $valueMapper = null)
32
    {
33 16
        $this->keyMapper   = $keyMapper;
34 16
        $this->valueMapper = $valueMapper ?: new Identity();
35 16
    }
36
37
    /**
38
     * {@inheritdoc}
39
     */
40 16
    public function apply(\Iterator $set)
41
    {
42 16
        $result = [];
43
44 16
        $keyMapper   = $this->keyMapper;
45 16
        $valueMapper = $this->valueMapper;
46
47 16
        foreach ($set as $key => $item) {
48 12
            $result[$keyMapper($item, $key)] = $valueMapper($item, $key);
49 16
        }
50
51 16
        return $result;
52
    }
53
}
54