Completed
Push — master ( 939f61...d39d6a )
by Todd
11s
created

ValidationException   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 40%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 1
dl 0
loc 48
ccs 6
cts 15
cp 0.4
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getValidation() 0 3 1
A __construct() 0 4 1
A jsonSerialize() 0 15 2
1
<?php
2
/**
3
 * @author Todd Burry <[email protected]>
4
 * @copyright 2009-2017 Vanilla Forums Inc.
5
 * @license MIT
6
 */
7
8
namespace Garden\Schema;
9
10
/**
11
 * An exception that was built from a {@link Validation} object.
12
 *
13
 * The validation object collects errors and is mutable. Once it's ready to be thrown as an exception it gets converted
14
 * to an instance of the immutable {@link ValidationException} class.
15
 */
16
class ValidationException extends \Exception implements \JsonSerializable {
17
    /**
18
     * @var Validation
19
     */
20
    private $validation;
21
22
    /**
23
     * Initialize an instance of the {@link ValidationException} class.
24
     *
25
     * @param Validation $validation The {@link Validation} object for the exception.
26
     */
27 52
    public function __construct(Validation $validation) {
28 52
        $this->validation = $validation;
29 52
        parent::__construct($validation->getMessage(), (int)$validation->getStatus());
30 52
    }
31
32
    /**
33
     * Specify data which should be serialized to JSON.
34
     *
35
     * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
36
     * @return mixed data which can be serialized by <b>json_encode</b>,
37
     * which is a value of any type other than a resource.
38
     */
39
    public function jsonSerialize() {
40
        $errors = $this->validation->getErrors();
41
        if (count($errors) === 1) {
42
            $message = $errors[0]['message'];
43
        } else {
44
            $message = $this->getValidation()->translate('Validation failed.');
45
        }
46
47
        $result = [
48
            'message' => $message,
49
            'status' => $this->getCode(),
50
            'errors' => $errors
51
        ];
52
        return $result;
53
    }
54
55
    /**
56
     * Get the validation object that contain specific errors.
57
     *
58
     * @return Validation Returns a validation object.
59
     */
60 37
    public function getValidation() {
61 37
        return $this->validation;
62
    }
63
}
64