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

DetachAsset::detachAll()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 3
Bugs 0 Features 1
Metric Value
cc 2
eloc 5
c 3
b 0
f 1
nc 2
nop 2
dl 0
loc 9
ccs 6
cts 6
cp 1
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