Completed
Pull Request — master (#27)
by Christian
02:44
created

LikertInteractionDefinition   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 2
dl 0
loc 70
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A withScale() 0 7 1
A getScale() 0 4 1
D equals() 0 32 9
1
<?php
2
3
/*
4
 * This file is part of the xAPI package.
5
 *
6
 * (c) Christian Flothmann <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Xabbuh\XApi\Model\Interaction;
13
14
use Xabbuh\XApi\Model\Definition;
15
use Xabbuh\XApi\Model\LanguageMap;
16
17
final class LikertInteractionDefinition extends InteractionDefinition
18
{
19
    private $scale;
20
21
    /**
22
     * @param LanguageMap|null            $name
23
     * @param LanguageMap|null            $description
24
     * @param string|null                 $type
25
     * @param string|null                 $moreInfo
26
     * @param string[]|null               $correctResponsesPattern
27
     * @param InteractionComponent[]|null $scale
28
     */
29
    public function __construct(LanguageMap $name = null, LanguageMap $description = null, $type = null, $moreInfo = null, array $correctResponsesPattern = null, array $scale = null)
30
    {
31
        parent::__construct($name, $description, $type, $moreInfo, $correctResponsesPattern);
32
33
        $this->scale = $scale;
34
    }
35
36
    /**
37
     * @param InteractionComponent[]|null $scale
38
     *
39
     * @return static
40
     */
41
    public function withScale(array $scale = null)
42
    {
43
        $interaction = clone $this;
44
        $interaction->scale = $scale;
45
46
        return $interaction;
47
    }
48
49
    public function getScale()
50
    {
51
        return $this->scale;
52
    }
53
54
    public function equals(Definition $definition)
55
    {
56
        if (!parent::equals($definition)) {
57
            return false;
58
        }
59
60
        if (!$definition instanceof LikertInteractionDefinition) {
61
            return false;
62
        }
63
64
        if (null !== $this->scale xor null !== $definition->scale) {
65
            return false;
66
        }
67
68
        if (null !== $this->scale) {
69
            if (count($this->scale) !== count($definition->scale)) {
70
                return false;
71
            }
72
73
            foreach ($this->scale as $key => $scale) {
74
                if (!isset($definition->scale[$key])) {
75
                    return false;
76
                }
77
78
                if (!$scale->equals($definition->scale[$key])) {
79
                    return false;
80
                }
81
            }
82
        }
83
84
        return true;
85
    }
86
}
87