Test Setup Failed
Push — master ( befa7d...6805d0 )
by Ben
03:12
created

DetachAsset::ensureIdsArePassedAsString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
ccs 0
cts 0
cp 0
crap 2
rs 10
1
<?php
2
3
namespace Thinktomorrow\AssetLibrary\Application;
4
5
use Thinktomorrow\AssetLibrary\HasAsset;
6
7
class DetachAsset
8
{
9
    /**
10
     * Detaches an asset from a model.
11
     *
12
     * @param $ids
13
     */
14 5
    public function detach(HasAsset $model, $ids, $type, $locale): void
15
    {
16 5
        if (! is_array($ids)) {
17 4
            $ids = (array) $ids;
18
        }
19
20 5
        $ids = $this->ensureIdsArePassedAsString($ids);
21 5
22
        foreach ($ids as $id) {
23 5
            $model->assetRelation()->where('asset_pivots.type', $type)->where('asset_pivots.locale', $locale)->detach($id);
24
        }
25
    }
26
27
    /**
28
     * Detaches all assets or for a specific type from a model.
29
     *
30 2
     * @param $ids
31
     */
32 2
    public function detachAll(HasAsset $model, ?string $type = null): void
33
    {
34 2
        $assetIds = $type
35 1
            ? $model->assetRelation()->where('asset_pivots.type', $type)->get()->pluck('id')
36 1
            : $model->assetRelation()->get()->pluck('id');
37
38 1
        $assetIds = $this->ensureIdsArePassedAsString($assetIds);
39
40 2
        $model->assetRelation()->detach($assetIds);
41
    }
42
43
    /**
44
     * @param mixed $ids
45
     * @return string[]
46
     */
47
    public function ensureIdsArePassedAsString(mixed $ids): array
48
    {
49
        return array_map(fn($id) => (string)$id, $ids);
50
    }
51
}
52