Completed
Push — master ( b99c3d...93c852 )
by Christian
01:45
created

Verb::equals()   D

Complexity

Conditions 9
Paths 8

Size

Total Lines 30
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 9

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 30
rs 4.909
c 1
b 0
f 0
ccs 12
cts 12
cp 1
cc 9
eloc 15
nc 8
nop 1
crap 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;
13
14
/**
15
 * The verb in a {@link Statement}.
16
 *
17
 * @author Christian Flothmann <[email protected]>
18
 */
19
final class Verb
20
{
21
    /**
22
     * Reference to the verb definition
23
     * @var IRI
24
     */
25
    private $id;
26
27
    /**
28
     * Human readable representation of the verb in one or more languages
29
     * @var LanguageMap|null
30
     */
31
    private $display;
32
33
    /**
34
     * @param IRI              $id
35
     * @param LanguageMap|null $display
36
     */
37 13
    public function __construct(IRI $id, LanguageMap $display = null)
38
    {
39 13
        $this->id = $id;
40 13
        $this->display = $display;
41 13
    }
42
43
    /**
44
     * Returns the verb definition reference.
45
     *
46
     * @return IRI The reference
47
     */
48 9
    public function getId()
49
    {
50 9
        return $this->id;
51
    }
52
53
    /**
54
     * Returns the human readable representation of the Verb in one or more languages.
55
     *
56
     * @return LanguageMap|null The language map
57
     */
58 6
    public function getDisplay()
59
    {
60 6
        return $this->display;
61
    }
62
63
    /**
64
     * Checks if another verb is equal.
65
     *
66
     * Two verbs are equal if and only if all of their properties are equal.
67
     *
68
     * @param Verb $verb The verb to compare with
69
     *
70
     * @return bool True if the verbs are equal, false otherwise
71
     */
72 7
    public function equals(Verb $verb)
73
    {
74 7
        if (!$this->id->equals($verb->id)) {
75 1
            return false;
76
        }
77
78 6
        if (null === $this->display && null === $verb->display) {
79 1
            return true;
80
        }
81
82 5
        if (null !== $this->display xor null !== $verb->display) {
83 5
            return false;
84 1
        }
85
86
        if (count($this->display) !== count($verb->getDisplay())) {
87 4
            return false;
88 4
        }
89
90
        foreach ($this->display as $language => $value) {
0 ignored issues
show
Bug introduced by
The expression $this->display of type object<Xabbuh\XApi\Model\LanguageMap>|null is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
91
            if (!isset($verb->display[$language])) {
92 3
                return false;
93
            }
94
95
            if ($value !== $verb->display[$language]) {
96
                return false;
97
            }
98
        }
99
100 3
        return true;
101
    }
102 3
103
    /**
104
     * Tests if the Verb can be used to void a Statement.
105
     *
106
     * @return bool True, if the Verb is a void Verb, false otherwise
107
     */
108
    public function isVoidVerb()
109
    {
110 2
        return $this->id->equals(IRI::fromString('http://adlnet.gov/expapi/verbs/voided'));
111
    }
112 2
113
    /**
114 2
     * Creates a Verb that can be used to void a {@link Statement}.
115
     *
116
     * @return Verb
117
     */
118
    public static function createVoidVerb()
119
    {
120
        return new Verb(IRI::fromString('http://adlnet.gov/expapi/verbs/voided'));
121
    }
122
}
123