Passed
Push — master ( 9de83d...7f6306 )
by Andrey
33:39 queued 31:07
created

Search::toArray()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3.0416

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 3
eloc 5
nc 3
nop 1
dl 0
loc 9
ccs 5
cts 6
cp 0.8333
crap 3.0416
rs 10
c 1
b 1
f 0
1
<?php
2
3
namespace Helldar\Roles\Support\Database;
4
5
use Helldar\Roles\Models\BaseModel;
6
use Illuminate\Contracts\Support\Arrayable;
7
use Illuminate\Database\Eloquent\Builder;
8
use Illuminate\Support\Arr;
9
use Illuminate\Support\Collection;
10
11
class Search
12
{
13
    /**
14
     * @param  \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation  $builder
15
     * @param  \Helldar\Roles\Models\BaseModel|int|string  $values
16
     *
17
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation
18
     */
19 48
    public function by($builder, $values)
20
    {
21 48
        $value = $this->map($values);
22
23
        return $builder->where(function (Builder $builder) use ($value) {
24
            $builder
25 48
                ->whereIn('id', $value)
26 48
                ->orWhereIn('slug', $value);
27 48
        });
28
    }
29
30
    /**
31
     * @param  \Helldar\Roles\Models\BaseModel|int|string  $value
32
     *
33
     * @return int|string
34
     */
35 48
    public function getId($value)
36
    {
37 48
        return $value instanceof BaseModel
38
            ? $value->id
39 48
            : $value;
40
    }
41
42
    /**
43
     * @param  array|Arrayable|Collection|int|string  $values
44
     *
45
     * @return array
46
     */
47 48
    protected function map($values): array
48
    {
49
        return array_map(function ($value) {
50 48
            return $this->getId($value);
51 48
        }, $this->toArray($values));
52
    }
53
54 48
    protected function toArray($values): array
55
    {
56 48
        if ($this->isArrayable($values)) {
57
            $values = $values->toArray();
58 48
        } elseif (! $this->isArray($values)) {
59 36
            $values = Arr::wrap($values);
60
        }
61
62 48
        return Arr::flatten($values);
63
    }
64
65 48
    protected function isArray($values): bool
66
    {
67 48
        return is_array($values);
68
    }
69
70 48
    protected function isArrayable($values): bool
71
    {
72 48
        return $values instanceof Arrayable || $values instanceof Collection;
73
    }
74
}
75