GeneralDecoder   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 14
c 2
b 0
f 0
lcom 1
cbo 1
dl 0
loc 73
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getKeys() 0 4 1
A decodeData() 0 6 3
A isValid() 0 4 2
A arrayEquals() 0 3 3
B checkTypes() 0 15 5
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: claudio
5
 * Date: 17/09/15
6
 * Time: 14.43
7
 * This program is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License
9
 * as published by the Free Software Foundation; either version 2
10
 * of the License, or (at your option) any later version.
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
 */
19
20
namespace it\thecsea\api_reflection;
21
22
/**
23
 * Class GeneralDecoder
24
 * @package it\thecsea\api_reflection
25
 * @author Claudio Cardinale <[email protected]>
26
 * @copyright 2015 Claudio Cardinale
27
 * @version 1.0.0
28
 */
29
class GeneralDecoder
30
{
31
    /**
32
     * standard keys, the type is indicated as value
33
     * @var string[]
34
     */
35
    static private $keys = array('apiKey'=>"string", "class"=>"string", "method"=>"string", "parameters"=>"array");
36
37
    /**
38
     * get the array of return keys
39
     * @return \string[]
40
     */
41
    final static protected function getKeys()
0 ignored issues
show
Coding Style introduced by
As per PSR2, the static declaration should come after the visibility declaration.
Loading history...
42
    {
43
        return self::$keys;
44
    }
45
46
    /**
47
     * Decode the data into a standard array that contains apiKey, class and method name and array of paramters
48
     * @param mixed $data
49
     * @return array
50
     * @throws ApiReflectionException
51
     */
52
    public function decodeData($data)
53
    {
54
        if(is_array($data) || $data == "")
55
            throw new ApiReflectionException("Decode error (data)");
56
        return array('apiKey'=>"", "class"=>"", "method"=>$data, "parameters" =>array());
57
    }
58
59
60
    /**
61
     * check if the keys of an array for return is valid
62
     * @param array $data
63
     * @return bool true if and only if the array is standard
64
     */
65
    protected static function isValid($data)
66
    {
67
        return self::arrayEquals(array_keys($data),array_keys(self::getKeys())) && self::checkTypes($data, self::$keys);
68
    }
69
70
    /**
71
     * check if two array are equals even if the elements order is different
72
     * @param array $a
73
     * @param array $b
74
     * @return bool true if the two array are equals
75
     */
76
    final protected static function arrayEquals($a, $b) {
77
        return (is_array($a) && is_array($b) && array_diff($a, $b) === array_diff($b, $a));
78
    }
79
80
    /**
81
     * check if data follow the types indicated in $types
82
     * @param array $data
83
     * @param array $types
84
     * @return bool true if the check is ok
85
     */
86
    final protected static function checkTypes($data, $types)
87
    {
88
        foreach($data as $key=>$value) {
89
            if ($types[$key] == "array") {
90
                if (!is_array($value)) {
91
                    return false;
92
                }
93
            } else {
94
                if (is_array($value)) {
95
                    return false;
96
                }
97
            }
98
        }
99
        return true;
100
    }
101
}