ConvertToArray::__invoke()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
/**
4
 * Copyright (c) 2016-present Ganbaro Digital Ltd
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 *
11
 *   * Redistributions of source code must retain the above copyright
12
 *     notice, this list of conditions and the following disclaimer.
13
 *
14
 *   * Redistributions in binary form must reproduce the above copyright
15
 *     notice, this list of conditions and the following disclaimer in
16
 *     the documentation and/or other materials provided with the
17
 *     distribution.
18
 *
19
 *   * Neither the names of the copyright holders nor the names of his
20
 *     contributors may be used to endorse or promote products derived
21
 *     from this software without specific prior written permission.
22
 *
23
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
 * POSSIBILITY OF SUCH DAMAGE.
35
 *
36
 * @category  Libraries
37
 * @package   ArrayTools/ValueBuilders
38
 * @author    Stuart Herbert <[email protected]>
39
 * @copyright 2016-present Ganbaro Digital Ltd www.ganbarodigital.com
40
 * @license   http://www.opensource.org/licenses/bsd-license.php  BSD License
41
 * @link      http://code.ganbarodigital.com/php-array-tools
42
 */
43
44
namespace GanbaroDigital\ArrayTools\ValueBuilders;
45
46
use GanbaroDigital\Reflection\Maps\MapTypeToMethod;
47
use Traversable;
48
49
class ConvertToArray
50
{
51
    /**
52
     * convert a piece of data to be a real PHP array
53
     *
54
     * @param  mixed $data
55
     *         the data to convert
56
     * @return array
57
     */
58
    public function __invoke($data)
59
    {
60
        return self::from($data);
61
    }
62
63
    /**
64
     * convert a piece of data to be a real PHP array
65
     *
66
     * @param  mixed $data
67
     *         the data to convert
68
     * @return array
69
     */
70
    public static function from($data)
71
    {
72
        $method = MapTypeToMethod::using($data, self::$dispatchMap);
73
        return self::$method($data);
74
    }
75
76
    /**
77
     * convert a piece of data to be a real PHP array
78
     *
79
     * @param  array $data
80
     *         the data to convert
81
     * @return array
82
     */
83
    private static function fromArray($data)
84
    {
85
        // no conversion required :)
86
        return $data;
87
    }
88
89
    /**
90
     * convert a piece of data to be a real PHP array
91
     *
92
     * @param  null $data
93
     *         the data to convert
94
     * @return array
95
     */
96
    private static function fromNull($data)
0 ignored issues
show
Unused Code introduced by
The parameter $data is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
97
    {
98
        // we convert NULL into an empty array
99
        return [];
100
    }
101
102
    /**
103
     * convert a piece of data to be a real PHP array
104
     *
105
     * @param  Traversable $data
106
     *         the data to convert
107
     * @return array
108
     */
109
    private static function fromTraversable($data)
110
    {
111
        // we're going to convert our input data into a real PHP array
112
        $retval = [];
113
114
        // build our real array
115
        foreach ($data as $key => $item) {
116
            $retval[$key] = $item;
117
        }
118
119
        // all done :)
120
        return $retval;
121
    }
122
123
    /**
124
     * convert a piece of data to be a real PHP array
125
     *
126
     * @param  mixed $data
127
     *         the data to convert
128
     * @return array
129
     */
130
    private static function nothingMatchesTheInputType($data)
131
    {
132
        return [ $data ];
133
    }
134
135
    /**
136
     * lookup map of how to convert which data type
137
     *
138
     * @var array
139
     */
140
    private static $dispatchMap = [
141
        'Array' => 'fromArray',
142
        'NULL' => 'fromNull',
143
        'Traversable' => 'fromTraversable'
144
    ];
145
}
146