Completed
Pull Request — master (#348)
by
unknown
13:10
created

MessageParser   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 3
dl 0
loc 100
ccs 30
cts 30
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getMessage() 0 11 1
A fakeValidationData() 0 9 1
A fakeRequiredIfData() 0 10 2
A fakeFileData() 0 10 2
A createUploadedFile() 0 4 1
1
<?php
2
3
namespace Isrenato\JsValidation\Javascript;
4
5
use Isrenato\JsValidation\Support\DelegatedValidator;
6
use Isrenato\JsValidation\Support\UseDelegatedValidatorTrait;
7
use Symfony\Component\HttpFoundation\File\UploadedFile;
8
9
class MessageParser
10
{
11
    use UseDelegatedValidatorTrait;
12
13
    /**
14
     * Create a new JsValidation instance.
15
     *
16
     * @param \Proengsoft\JsValidation\Support\DelegatedValidator $validator
17
     */
18 156
    public function __construct(DelegatedValidator $validator)
19
    {
20 156
        $this->validator = $validator;
21 156
    }
22
23
    /**
24
     *  Replace javascript error message place-holders with actual values.
25
     *
26
     * @param string $attribute
27
     * @param string $rule
28
     * @param array  $parameters
29
     * @return mixed
30
     */
31
    public function getMessage($attribute, $rule, $parameters)
32 36
    {
33
        $data = $this->fakeValidationData($attribute, $rule, $parameters);
34 36
35
        $message = $this->validator->getMessage($attribute, $rule);
36 36
        $message = $this->validator->makeReplacements($message, $attribute, $rule, $parameters);
37 36
38
        $this->validator->setData($data);
39 36
40
        return $message;
41 36
    }
42
43
    /**
44
     * Creates fake data needed to parse messages
45
     * Returns original data.
46
     *
47
     * @param string $attribute
48
     * @param string $rule
49
     * @param $parameters
50
     * @return array
51
     */
52
    protected function fakeValidationData($attribute, $rule, $parameters)
53
    {
54 36
        $data = $this->validator->getData();
55
56 36
        $this->fakeFileData($data, $attribute);
57
        $this->fakeRequiredIfData($data, $rule, $parameters);
58 36
59 36
        return $data;
60
    }
61 36
62
    /**
63
     * Generate fake data to get RequiredIf message.
64
     *
65
     * @param $data
66
     * @param $rule
67
     * @param $parameters
68
     * @return void
69
     */
70
    private function fakeRequiredIfData($data, $rule, $parameters)
71 36
    {
72
        if ($rule !== 'RequiredIf') {
73 36
            return;
74 24
        }
75
76
        $newData = $data;
77 12
        $newData[$parameters[0]] = $parameters[1];
78 12
        $this->validator->setData($newData);
79 12
    }
80 12
81
    /**
82
     * Generate fake data to get file type messages.
83
     *
84
     * @param $data
85
     * @param $attribute
86
     * @return void
87
     */
88 36
    private function fakeFileData($data, $attribute)
89
    {
90 36
        if (! $this->validator->hasRule($attribute, ['Mimes', 'Image'])) {
91 24
            return;
92
        }
93
94 12
        $newFiles = $data;
95 12
        $newFiles[$attribute] = $this->createUploadedFile();
96 12
        $this->validator->setData($newFiles);
97 12
    }
98
99
    /**
100
     * Create fake UploadedFile to generate file messages.
101
     *
102
     * @return UploadedFile
103
     */
104 12
    protected function createUploadedFile()
105
    {
106 12
        return new UploadedFile('fakefile', 'fakefile', null, null, UPLOAD_ERR_NO_FILE, true);
107
    }
108
}
109