Completed
Push — master ( 09063a...21ed69 )
by Marco
02:26
created

Model   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 93.75%

Importance

Changes 0
Metric Value
wmc 19
lcom 1
cbo 0
dl 0
loc 89
ccs 30
cts 32
cp 0.9375
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __get() 0 11 2
A __set() 0 9 4
A __unset() 0 9 4
A __isset() 0 5 1
A export() 0 5 1
A import() 0 13 4
A setRaw() 0 7 1
A merge() 0 9 2
1
<?php namespace Comodojo\Foundation\DataAccess;
2
3
use \UnexpectedValueException;
4
use \BadMethodCallException;
5
6
/**
7
 * @package     Comodojo Foundation
8
 * @author      Marco Giovinazzi <[email protected]>
9
 * @license     MIT
10
 *
11
 * LICENSE:
12
 *
13
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
 * THE SOFTWARE.
20
 */
21
22
23
abstract class Model {
24
25
    const READWRITE = 1;
26
27
    const PROTECTDATA = 2;
28
29
    const READONLY = 3;
30
31
    protected $mode;
32
33
    protected $data = [];
34
35 5
    public function __get($name) {
36
37 5
        if ( array_key_exists($name, $this->data) ) {
38
39 5
            return $this->data[$name];
40
41
        }
42
43 1
        return null;
44
45
    }
46
47 6
    public function __set($name, $value) {
48
49 6
        if ( $this->mode === self::READONLY ) throw new BadMethodCallException("Cannot set item $name in readonly data mode");
50
51 5
        if ( $this->mode === self::PROTECTDATA && !array_key_exists($name, $this->data) ) throw new UnexpectedValueException("Cannot add item $name in protected data mode");
52
53 3
        $this->data[$name] = $value;
54
55 3
    }
56
57 3
    public function __unset($name) {
58
59 3
        if ( $this->mode === self::READONLY ) throw new BadMethodCallException("Cannot unset item $name in readonly data mode");
60
61 2
        if ( $this->mode === self::PROTECTDATA ) throw new BadMethodCallException("Cannot unset item $name in protected data mode");
62
63 1
        if ( isset($this->$name) ) unset($this->data[$name]);
64
65 1
    }
66
67 4
    public function __isset($name) {
68
69 4
        return array_key_exists($name, $this->data);
70
71
    }
72
73 3
    public function merge($data) {
74
75 3
        foreach ($data as $key => $value) {
76 3
            $this->$key = $value;
77 2
        }
78
79 1
        return $this;
80
81
    }
82
83
    public function export() {
84
85
        return $this->data;
86
87
    }
88
89 1
    public function import($data) {
90
91 1
        if ( $this->mode === self::READONLY ) throw new BadMethodCallException("Cannot import items in readonly data mode");
92
93 1
        $diff = array_diff_key($this->data, $data);
94
95 1
        if ( $this->mode === self::PROTECTDATA && !empty($diff) ) throw new UnexpectedValueException("Cannot import new items [".implode(", ", $diff)."] in protected data mode");
96
97 1
        $this->data = $data;
98
99 1
        return $this;
100
101
    }
102
103 2
    protected function setRaw($name, $value) {
104
105 2
        $this->data[$name] = $value;
106
107 2
        return $this;
108
109
    }
110
111
}
112