ListMapper::slumber()   A
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 21
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 5

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 21
c 0
b 0
f 0
rs 9.6111
ccs 11
cts 11
cp 1
cc 5
nc 4
nop 2
crap 5
1
<?php
2
/**
3
 * File was created 30.09.2015 07:46
4
 */
5
6
namespace PeekAndPoke\Component\Slumber\Core\Codec\Property;
7
8
use PeekAndPoke\Component\Collections\Collection;
9
use PeekAndPoke\Component\Slumber\Annotation\Slumber\AsList;
10
use PeekAndPoke\Component\Slumber\Core\Codec\Awaker;
11
use PeekAndPoke\Component\Slumber\Core\Codec\Slumberer;
12
13
/**
14
 * @method AsList getOptions()
15
 *
16
 * @author Karsten J. Gerber <[email protected]>
17
 */
18
class ListMapper extends AbstractCollectionMapper
19
{
20
    /**
21
     * @param Slumberer          $slumberer
22
     * @param array|\Traversable $value
23
     *
24
     * @return array|null
25
     */
26 20
    public function slumber(Slumberer $slumberer, $value)
27
    {
28 20
        if (false === $this->isIterable($value)) {
29 11
            return null;
30
        }
31
32 12
        $result    = [];
33 12
        $nested    = $this->nested;
34 12
        $keepNulls = $nested->getOptions()->keepNullValuesInCollections();
35
36 12
        foreach ($value as $v) {
37
38 8
            $slumbering = $nested->slumber($slumberer, $v);
39
40
            // check if we should keep nulls
41 8
            if ($slumbering !== null || $keepNulls) {
42 8
                $result[] = $slumbering;
43
            }
44
        }
45
46 12
        return $result;
47
    }
48
49
    /**
50
     * @param Awaker             $awaker
51
     * @param array|\Traversable $value
52
     *
53
     * @return array|Collection
54
     */
55 20
    public function awake(Awaker $awaker, $value)
56
    {
57 20
        if (false === $this->isIterable($value)) {
58 12
            return $this->createAwakeResult([]);
59
        }
60
61
        // handle the input
62 8
        $result    = [];
63 8
        $nested    = $this->nested;
64 8
        $keepNulls = $nested->getOptions()->keepNullValuesInCollections();
65
66 8
        foreach ($value as $v) {
67
68 6
            $awoken = $nested->awake($awaker, $v);
69
70
            // check if we should keep nulls
71 6
            if ($awoken !== null || $keepNulls) {
72 6
                $result[] = $awoken;
73
            }
74
        }
75
76
        // do we need to instantiate a collection class ?
77 8
        return $this->createAwakeResult($result);
78
    }
79
}
80