Passed
Pull Request — master (#1647)
by
11:06
created

data_get()   B

Complexity

Conditions 8
Paths 7

Size

Total Lines 17
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 8

Importance

Changes 0
Metric Value
cc 8
eloc 15
nc 7
nop 3
dl 0
loc 17
ccs 13
cts 13
cp 1
crap 8
rs 8.4444
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the overtrue/wechat.
5
 *
6
 * (c) overtrue <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace EasyWeChat\Kernel;
13
14
use EasyWeChat\Kernel\Contracts\Arrayable;
15
use EasyWeChat\Kernel\Exceptions\RuntimeException;
16
use EasyWeChat\Kernel\Support\Arr;
17
use EasyWeChat\Kernel\Support\Collection;
18
19
function data_get($data, $key, $default = null)
20
{
21
    switch (true) {
22 1
        case is_array($data):
23 1
            return Arr::get($data, $key, $default);
24 1
        case $data instanceof Collection:
25 1
            return $data->get($key, $default);
26 1
        case $data instanceof Arrayable:
27 1
            return Arr::get($data->toArray(), $key, $default);
28 1
        case $data instanceof \ArrayIterator:
29 1
            return $data->getArrayCopy()[$key] ?? $default;
30 1
        case $data instanceof \ArrayAccess:
31 1
            return $data[$key] ?? $default;
32 1
        case $data instanceof \IteratorAggregate && $data->getIterator() instanceof \ArrayIterator:
33 1
            return $data->getIterator()->getArrayCopy()[$key] ?? $default;
34
        default:
35 1
            throw new RuntimeException(sprintf('Can\'t access data with key "%s"', $key));
36
    }
37
}
38
39
function data_to_array($data)
40
{
41
    switch (true) {
42 1
        case is_array($data):
43 1
            return $data;
44 1
        case $data instanceof Collection:
45 1
            return $data->all();
46 1
        case $data instanceof Arrayable:
47 1
            return $data->toArray();
48 1
        case $data instanceof \IteratorAggregate && $data->getIterator() instanceof \ArrayIterator:
49 1
            return $data->getIterator()->getArrayCopy();
50 1
        case $data instanceof \ArrayIterator:
51 1
            return $data->getArrayCopy();
52
        default:
53 1
            throw new RuntimeException(sprintf('Can\'t transform data to array'));
54
    }
55
}
56