Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
Equals
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
3 / 3
8
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 validate
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
6
 getInverseError
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Verja\Validator;
4
5use Verja\Error;
6use Verja\Validator;
7
8class Equals extends Validator
9{
10    /** @var string */
11    protected $opposite;
12
13    /** @var bool */
14    protected $jsonEncode;
15
16    /**
17     * Equals constructor.
18     *
19     * @param string $opposite
20     * @param bool   $jsonEncode
21     */
22    public function __construct(string $opposite, bool $jsonEncode = true)
23    {
24        $this->opposite = $opposite;
25        $this->jsonEncode = $jsonEncode;
26    }
27
28    /** {@inheritdoc} */
29    public function validate($value, array $context = []): bool
30    {
31        $opposite = isset($context[$this->opposite]) ? $context[$this->opposite] : null;
32
33        // simple equality
34        if ($value == $opposite) {
35            return true;
36        }
37
38        // equality by json encode / decode
39        if ($this->jsonEncode) {
40            $valueJson = json_encode($value);
41            $oppositeJson = json_encode($opposite);
42            if ($valueJson === $oppositeJson || json_decode($valueJson) == json_decode($oppositeJson)) {
43                return true;
44            }
45        }
46
47        $this->error = new Error(
48            'NOT_EQUAL',
49            $value,
50            sprintf('value should be equal to contexts %s', $this->opposite),
51            [ 'opposite' => $this->opposite, 'jsonEncode' => $this->jsonEncode ]
52        );
53        return false;
54    }
55
56    /** {@inheritdoc} */
57    public function getInverseError($value)
58    {
59        return new Error(
60            'EQUALS',
61            $value,
62            sprintf('value should not be equal to contexts %s', $this->opposite),
63            [ 'opposite' => $this->opposite, 'jsonEncode' => $this->jsonEncode ]
64        );
65    }
66}