AssetMap::addAsset()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Dmitrynaum\SAM\Component;
4
5
/**
6
 * Класс для работы с картой Asset`ов
7
 *
8
 * @author Naumov Dmitry <[email protected]>
9
 */
10
class AssetMap
11
{
12
    /**
13
     * Путь до файла с картой скомпилированных asset`ов
14
     * @var string
15
     */
16
    protected $mapPath;
17
    
18
    /**
19
     * Список скомпилированных ассетов
20
     * ['asset.name' => 'public-asset.file']
21
     * @var mixed|array
22
     */
23
    protected $assets;
24
    
25
    /**
26
     * Флаг говоряций о том, что файл карты был загружен
27
     * @var bool
28
     */
29
    protected $loaded;
30
31
    /**
32
     * @param string $mapPath - Путь до файла с картой скомпилированных asset`ов
33
     */
34
    public function __construct($mapPath)
35
    {
36
        $this->mapPath = $mapPath;
37
        $this->assets  = [];
38
    }
39
40
    /**
41
     * Добавить asset в карту
42
     * @param string $assetName - название asset`а
43
     * @param string $assetPath - путь до файла в котором сохранен asset
44
     */
45
    public function addAsset($assetName, $assetPath)
46
    {
47
        $this->assets[$assetName] = $assetPath;
48
    }
49
50
    /**
51
     * Сохранить карту
52
     */
53
    public function save()
54
    {
55
        $json = json_encode($this->assets);
56
        
57
        file_put_contents($this->mapPath, $json);
58
    }
59
60
    /**
61
     * Получить путь до файла asset`а по его имени
62
     * @param string $assetName
63
     * @return string
64
     * @throws \Exception
65
     */
66
    public function getAssetPath($assetName)
67
    {
68
        if (!$this->loaded) {
69
            $this->load();
70
        }
71
        
72
        if (isset($this->assets[$assetName])) {
73
            return $this->assets[$assetName];
74
        }
75
        
76
        throw new \Exception("Asset '{$assetName}' not found");
77
    }
78
    
79
    /**
80
     * Загрузить карту
81
     */
82
    protected function load()
83
    {
84
        $json = file_get_contents($this->mapPath);
85
        
86
        $this->assets = array_merge($this->assets, json_decode($json, true));
87
    }
88
}
89