Passed
Push — master ( 7de9ea...5e4ab8 )
by Vasyl
03:26
created

VariableManager::getCollection()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Fomvasss\Variable;
4
5
/**
6
 * Class VariableManager
7
 *
8
 * @package \Fomvasss\Variable
9
 */
10
class VariableManager implements VariableManagerContract
11
{
12
    protected $app;
13
14
    protected $variableModel;
15
16
    protected $cacheRepository;
17
18
    protected $locale = null;
19
20
    protected $variables = null;
21
22
    /**
23
     * VariableManager constructor.
24
     * @param $cacheRepository
25
     * @param null $app
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $app is correct as it would always require null to be passed?
Loading history...
26
     */
27
    public function __construct($variableModel, $cacheRepository, $app = null)
28
    {
29
        if (! $app) {
0 ignored issues
show
introduced by
$app is of type null, thus it always evaluated to false.
Loading history...
30
            $app = app();   //Fallback when $app is not given
0 ignored issues
show
Bug introduced by
The function app was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

30
            $app = /** @scrutinizer ignore-call */ app();   //Fallback when $app is not given
Loading history...
31
        }
32
        $this->app = $app;
33
34
        $this->config = $this->app['config']->get('variables');
0 ignored issues
show
Bug Best Practice introduced by
The property config does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
35
36
        $this->variableModel = $variableModel;
37
38
        $this->cacheRepository = $cacheRepository;
39
    }
40
41
    /**
42
     * @param string $key
43
     * @param null $default
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $default is correct as it would always require null to be passed?
Loading history...
44
     * @return mixed|null
45
     */
46
    public function get(string $key, $default = null)
47
    {
48
       if (isset($this->all()[$key])) {
49
           return $this->all()[$key];
50
       }
51
       
52
       return $default;
53
        
54
    }
55
56
    /**
57
     * @return array
58
     */
59
    public function all(): array
60
    {
61
        if ($this->variables === null) {
62
63
            $all = $this->cacheRepository->remember($this->config['cache']['name'], $this->config['cache']['time'], function () {
64
                return $this->getCollection();
65
            });
66
67
            if ($all) {
68
                $allByLocale = $this->locale ? $all->where('locale', $this->locale) : $all;
69
                $this->variables = $allByLocale->pluck('value', 'key')->toArray();
70
            } else {
71
                $this->variables = [];
72
            }
73
74
        }
75
76
        return $this->variables;
77
    }
78
79
    /**
80
     * @param string $locale
81
     * @return $this
82
     */
83
    public function locale(string $locale = null)
84
    {
85
        $this->locale = $locale;
86
87
        return $this;
88
    }
89
90
    /**
91
     * @return \Illuminate\Support\Collection | null
92
     */
93
    protected function getCollection()
94
    {
95
        try {
96
            return $this->variableModel->select('key', 'value', 'locale')->get();
97
        } catch (\Exception $exception) {
98
            $this->app['log']->info(__CLASS__ . ' - ' . $exception->getMessage());
99
100
            return null;
101
        }
102
    }
103
}
104