Completed
Push — master ( d20c76...77afbd )
by Nicolas
01:18
created

Response::basicStructure()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 1
rs 9.4285
1
<?php
2
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
4
/**
5
 * This file is part of the Gjson library.
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * PHP Version 5, 7
11
 *
12
 * LICENSE: This source file is subject to the MIT license that is available
13
 * through the world-wide-web at the following URI:
14
 * http://opensource.org/licenses/mit-license.php
15
 *
16
 * @category Src
17
 * @package  Normeno\Gjson
18
 * @author   Nicolas Ormeno <[email protected]>
19
 * @license  http://opensource.org/licenses/mit-license.php MIT License
20
 * @link     https://github.com/normeno/gjson
21
 */
22
23
namespace Normeno\Gjson;
24
25
/**
26
 * Tests for Format
27
 *
28
 * @category Src
29
 * @package  Normeno\Gjson
30
 * @author   Nicolas Ormeno <[email protected]>
31
 * @license  http://opensource.org/licenses/mit-license.php MIT License
32
 * @link     https://github.com/normeno/gjson
33
 */
34
class Response
35
{
36
    /**
37
     * Api Version
38
     *
39
     * @var string number of version
40
     */
41
    private $apiVersion;
42
43
    /**
44
     * Api Context
45
     *
46
     * @var string name of context
47
     */
48
    private $context;
49
50
    /**
51
     * Output Format
52
     *
53
     * @var string json|array|object
54
     */
55
    private $format;
56
57
    /**
58
     * Response constructor.
59
     *
60
     * @param string $apiVersion number of version
61
     * @param string $context    name of context
62
     * @param string $format     json|array|object
63
     */
64
    public function __construct($apiVersion = '1.0', $context = 'api', $format = 'json')
65
    {
66
        $this->apiVersion  = $apiVersion;
67
        $this->context     = $context;
68
        $this->format      = $format;
69
    }
70
71
    /**
72
     * Generate error response
73
     *
74
     * @param integer $code  number of error
75
     * @param string  $msg   message to identify error
76
     * @param array   $extra extra data
77
     *
78
     * @return array|object|string
79
     */
80 6
    public function error($code, $msg, $extra = [])
81
    {
82
        $error = [
83
            'error' => [
84 6
                'code'      => $code,
85 2
                'message'   => $msg
86 4
            ]
87 4
        ];
88
89 6
        if (!empty($extra)) {
90 3
            $extraErrors = (array_key_exists('errors', $extra)) ? $extra['errors'] : $extra;
91 3
            $error['error']['errors'] = $extraErrors;
92 2
        }
93
94 6
        $response = $this->basicStructure() + $error;
95 6
        return $this->output($response, JSON_FORCE_OBJECT);
0 ignored issues
show
Unused Code introduced by
The call to Response::output() has too many arguments starting with JSON_FORCE_OBJECT.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
96
    }
97
98
    /**
99
     * Generate basic structure
100
     *
101
     * This structure is used in all the responses
102
     *
103
     * @return array
104
     */
105 6
    private function basicStructure()
106
    {
107
        return [
108 6
            'apiVersion'    => $this->apiVersion,
109 6
            'context'       => $this->context
110 4
        ];
111
    }
112
113
    /**
114
     * Generate output
115
     *
116
     * @param array|object $data output data
117
     *
118
     * @return array|object|string
119
     */
120 6
    private function output($data)
121
    {
122 6
        switch ($this->format) {
123 6
            case 'array':
124
                return (array)$data;
125 6
            case 'object':
126
                return (object)$data;
127 6
            case 'json':
128 6
                return json_encode($data);
129
            default:
130
                return json_encode($data);
131
        }
132
    }
133
}
134