CollectToMapOperation::apply()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 12
c 0
b 0
f 0
ccs 7
cts 7
cp 1
rs 10
cc 2
nc 2
nop 1
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
        }
50
51 16
        return $result;
52
    }
53
}
54