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

CollectToMapOperation   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 34
c 1
b 0
f 1
wmc 4
lcom 1
cbo 1
ccs 12
cts 12
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 2
A apply() 0 13 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