/
RulerManager.php
65 lines (57 loc) · 1.43 KB
/
RulerManager.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace HoaThis\LaravelHoaRuler\Manager;
use \Hoa\Ruler\Ruler as HoaRuler;
use \Hoa\Ruler\Context as HoaContext;
use \Illuminate\Contracts\Cache\Factory as CacheFactory;
use \HoaThis\LaravelHoaRuler\Contracts\RuleProvider;
class RulerManager
{
protected $_cache;
protected $_ruleProvider;
public function __construct(CacheFactory $cacheFactory, RuleProvider $ruleProvider, array $config)
{
$this->_cache = $cacheFactory->store($config['cache']);
$this->_ruleProvider = $ruleProvider;
}
/**
* @return HoaRuler
*/
public function getNewRuler()
{
return new HoaRuler();
}
/**
* @return HoaContext
*/
public function getNewContext()
{
return new HoaContext();
}
/**
* @param HoaRuler $ruler
* @param HoaContext $context
* @param string $ruleSpace
* @param string $ruleName
*
* @return bool
*/
public function isRespectingTheRule(HoaRuler $ruler, HoaContext $context, $ruleSpace, $ruleName)
{
$model = $this->getRuleFromCache($ruleSpace, $ruleName);
return $ruler->assert($model, $context);
}
/**
* @param string $ruleSpace
* @param string $ruleName
*
* @return \Hoa\Ruler\Model\Model
*/
public function getRuleFromCache($ruleSpace, $ruleName)
{
// 7200 minutes = 5 days
return $this->_cache->remember('ruler' . '_' . $ruleSpace . '-' . $ruleName, '7200', function() use ($ruleSpace, $ruleName)
{
return $this->_ruleProvider->loadRuleModel($ruleSpace, $ruleName);
});
}
}