Passed
Push — master ( 9a8256...ab52bb )
by Anton
02:11
created

src/JsonApiParser.php (3 issues)

Check that successive assignments are formatted to have their operators in a straight line

Coding Style Informational

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * @author Anton Tuyakhov <[email protected]>
4
 */
5
6
namespace tuyakhov\jsonapi;
7
8
use yii\base\InvalidConfigException;
9
use yii\helpers\ArrayHelper;
10
use yii\helpers\Inflector;
11
use \yii\web\JsonParser;
12
13
class JsonApiParser extends JsonParser
14
{
15
    /**
16
     * @var array|callable|null
17
     */
18
    protected $formNameCallback;
19
20
    public function __construct($formNameCallback = null)
21
    {
22
        if ($formNameCallback === null) {
23
            $formNameCallback = [$this, 'typeToFormName'];
24
        }
25
        if (!is_callable($formNameCallback, true)) {
26
            throw new InvalidConfigException('JsonApiParser::formNameCallback should be callable');
27
        }
28
29
        $this->formNameCallback = $formNameCallback;
30
    }
31
32
33
    /**
34
     * Parse resource object into the input data to populates the model
35
     * @inheritdoc
36
     */
37
    public function parse($rawBody, $contentType)
38
    {
39
        $array = parent::parse($rawBody, $contentType);
40
        if ($type = ArrayHelper::getValue($array, 'data.type')) {
41
            $formName = call_user_func($this->formNameCallback, $type);
42
            if ($attributes = ArrayHelper::getValue($array, 'data.attributes')) {
43
                $result[$formName] = $attributes;
44
            } elseif ($id = ArrayHelper::getValue($array, 'data.id')) {
45
                $result[$formName] = ['id' => $id, 'type' => $type];
46
            }
47
            if ($relationships = ArrayHelper::getValue($array, 'data.relationships')) {
48
                foreach ($relationships as $name => $relationship) {
49
                    if (isset($relationship[0])) {
50 View Code Duplication
                        foreach ($relationship as $item) {
51
                            if (isset($item['type']) && isset($item['id'])) {
52
                                $formName = call_user_func($this->formNameCallback, $item['type']);
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 19 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
53
                                $result[$name][$formName][] = $item;
54
                            }
55
                        }
56
                    } elseif (isset($relationship['type']) && isset($relationship['id'])) {
57
                        $formName = call_user_func($this->formNameCallback, $relationship['type']);
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 17 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
58
                        $result[$name][$formName] = $relationship;
59
                    }
60
                }
61
            }
62
        } else {
63
            $data = ArrayHelper::getValue($array, 'data', []);
64 View Code Duplication
            foreach ($data as $relationLink) {
65
                if (isset($relationLink['type']) && isset($relationLink['id'])) {
66
                    $formName = call_user_func($this->formNameCallback, $relationLink['type']);
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 12 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
67
                    $result[$formName][] = $relationLink;
68
                }
69
            }
70
        }
71
        return isset($result) ? $result : $array;
72
    }
73
74
    protected function typeToFormName($type)
75
    {
76
        return Inflector::id2camel(Inflector::singularize($type));
77
    }
78
}
79