SymfonyExpression   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 90.48%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 60
ccs 19
cts 21
cp 0.9048
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 2
A getExpression() 0 11 2
A checkCondition() 0 8 1
1
<?php
2
3
namespace Metabor\Statemachine\Condition;
4
5
use Metabor\Named;
6
use MetaborStd\Statemachine\ConditionInterface;
7
use Symfony\Component\ExpressionLanguage\Expression;
8
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
9
10
/**
11
 * @author otischlinger
12
 */
13
class SymfonyExpression extends Named implements ConditionInterface
14
{
15
    /**
16
     * @var ExpressionLanguage
17
     */
18
    private $expressionLanguage;
19
20
    /**
21
     * @var Expression
22
     */
23
    private $expression;
24
25
    /**
26
     * @var array
27
     */
28
    private $values;
29
30
    /**
31
     * @param string             $name
32
     * @param array              $values
33
     * @param ExpressionLanguage $expressionLanguage
34
     */
35 6
    public function __construct($name, array $values = array(), ExpressionLanguage $expressionLanguage = null)
36
    {
37 6
        parent::__construct($name);
38 6
        $this->values = $values;
39 6
        if ($expressionLanguage) {
40
            $this->expressionLanguage = $expressionLanguage;
41
        } else {
42 6
            $this->expressionLanguage = new ExpressionLanguage();
43
        }
44 6
    }
45
46
    /**
47
     * @return \Symfony\Component\ExpressionLanguage\Expression
48
     */
49 2
    protected function getExpression()
50
    {
51 2
        if (!$this->expression) {
52 2
            $keys = array_keys($this->values);
53 2
            $keys[] = 'subject';
54 2
            $keys[] = 'context';
55 2
            $this->expression = $this->expressionLanguage->parse($this->getName(), $keys);
56 2
        }
57
58 2
        return $this->expression;
59
    }
60
61
    /**
62
     * @see MetaborStd\Statemachine.ConditionInterface::checkCondition()
63
     */
64 2
    public function checkCondition($subject, \ArrayAccess $context)
65
    {
66 2
        $values = $this->values;
67 2
        $values['subject'] = $subject;
68 2
        $values['context'] = $context;
69
70 2
        return (bool) $this->expressionLanguage->evaluate($this->getExpression(), $values);
71
    }
72
}
73