Model::getFields()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * Copyright (c) 2017 Salah Alkhwlani <[email protected]>
5
 *
6
 * For the full copyright and license information, please view
7
 * the LICENSE file that was distributed with this source code.
8
 */
9
10
namespace Yemenifree\PickServices\Base;
11
12
use InvalidArgumentException;
13
use Yemenifree\Validation\Traits\HasValidator;
14
15
abstract class Model
16
{
17
    use HasValidator;
18
19
    /** @var array */
20
    protected $rules = [];
21
    /** @var array */
22
    protected $fields = [];
23
24
    /**
25
     * Valid current model & return data array.
26
     *
27
     * @return array
28
     */
29
    public function getModel()
30
    {
31
        $this->valid($this->getData(), $this->getRules());
32
33
        return $this->getData();
34
    }
35
36
    /**
37
     * Get data of model.
38
     *
39
     * @return array
40
     */
41
    public function getData(): array
42
    {
43
        return collect(\get_object_vars($this))->filter(function ($value, $name) {
44
            return \in_array($name, $this->getFields()) && !empty($value);
45
        })->map(function ($value, $name) {
46
            $methodName = $this->getCamelMethodName($name);
47
48
            return \method_exists($this, $methodName) ? $this->$methodName() : $value;
49
        })->toArray();
50
    }
51
52
    /**
53
     * Get model fields.
54
     *
55
     * @return array
56
     */
57
    public function getFields(): array
58
    {
59
        return $this->fields;
60
    }
61
62
    /**
63
     * Get camel method name.
64
     *
65
     * @param $name
66
     *
67
     * @return string
68
     */
69
    protected function getCamelMethodName($name): string
70
    {
71
        return \lcfirst(\str_replace(' ', '', \ucwords(\str_replace(['-', '_'], ' ', 'get_' . $name))));
72
    }
73
74
    /**
75
     * Get list of rules array.
76
     *
77
     * @return array
78
     */
79
    private function getRules(): array
80
    {
81
        return $this->rules;
82
    }
83
84
    /**
85
     * In valid function.
86
     *
87
     * @param array $errors
88
     *
89
     * @throws InvalidArgumentException
90
     */
91
    public function InValidCallback(array $errors)
92
    {
93
        throw new InvalidArgumentException($errors[0]);
94
    }
95
96
    /**
97
     * Set Rules of current model.
98
     *
99
     * @param array $rules
100
     *
101
     * @return self
102
     */
103
    public function setRules(array $rules): self
104
    {
105
        $this->rules = $rules;
106
107
        return $this;
108
    }
109
}
110