AttributeMapper   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 129
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 129
rs 10
c 0
b 0
f 0
wmc 15
lcom 1
cbo 1

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A delete() 0 8 2
A copy() 0 13 3
A value() 0 11 3
A set() 0 6 1
A rename() 0 7 1
A has() 0 4 1
A only() 0 6 1
A toArray() 0 4 1
A toObject() 0 4 1
1
<?php
2
3
/**
4
 * This file is part of GitterBot package.
5
 *
6
 * @author Serafim <[email protected]>
7
 * @date 24.09.2015 16:04
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12
13
namespace Interfaces\Gitter\Support;
14
15
use Illuminate\Contracts\Support\Arrayable;
16
use Illuminate\Support\Arr;
17
18
/**
19
 * Class AttributeMapper
20
 */
21
class AttributeMapper implements Arrayable
22
{
23
    /**
24
     * @var array
25
     */
26
    protected $attributes = [];
27
28
    /**
29
     * @param array $attributes
30
     */
31
    public function __construct(array $attributes)
32
    {
33
        $this->attributes = $attributes;
34
    }
35
36
    /**
37
     * @param $key
38
     * @return AttributeMapper
39
     */
40
    public function delete($key): AttributeMapper
41
    {
42
        if ($this->has($key)) {
43
            unset($this->attributes[$key]);
44
        }
45
46
        return $this;
47
    }
48
49
    /**
50
     * @param $from
51
     * @param $to
52
     * @return AttributeMapper
53
     * @throws \InvalidArgumentException
54
     */
55
    public function copy($from, $to): AttributeMapper
56
    {
57
        if ($this->has($from)) {
58
            if ($this->has($to)) {
59
                $message = sprintf('Can not rename %s. %s already exists.', $from, $to);
60
                throw new \InvalidArgumentException($message);
61
            }
62
63
            $this->attributes[$to] = $this->attributes[$from];
64
        }
65
66
        return $this;
67
    }
68
69
    /**
70
     * @param $key
71
     * @param callable $callback
72
     * @param null|string $newName
73
     * @return AttributeMapper
74
     * @throws \InvalidArgumentException
75
     */
76
    public function value($key, callable $callback, $newName = null): AttributeMapper
77
    {
78
        if ($this->has($key)) {
79
            $this->attributes[$key] = $callback($this->attributes[$key]);
80
            if ($newName !== null) {
81
                $this->rename($key, $newName);
82
            }
83
        }
84
85
        return $this;
86
    }
87
88
    /**
89
     * @param $key
90
     * @param $value
91
     * @return AttributeMapper
92
     */
93
    public function set($key, $value): AttributeMapper
94
    {
95
        $this->attributes[$key] = $value;
96
97
        return $this;
98
    }
99
100
    /**
101
     * @param $from
102
     * @param $to
103
     * @return AttributeMapper
104
     * @throws \InvalidArgumentException
105
     */
106
    public function rename($from, $to): AttributeMapper
107
    {
108
        $this->copy($from, $to);
109
        $this->delete($from);
110
111
        return $this;
112
    }
113
114
    /**
115
     * @param $key
116
     * @return mixed|bool
117
     */
118
    public function has($key): bool
119
    {
120
        return array_key_exists($key, $this->attributes);
121
    }
122
123
    /**
124
     * @param array $values
125
     * @return AttributeMapper
126
     */
127
    public function only(array $values): AttributeMapper
128
    {
129
        $this->attributes = Arr::only($this->attributes, $values);
130
131
        return $this;
132
    }
133
134
    /**
135
     * @return array
136
     */
137
    public function toArray()
138
    {
139
        return $this->attributes;
140
    }
141
142
    /**
143
     * @return object
144
     */
145
    public function toObject()
146
    {
147
        return (object)$this->toArray();
148
    }
149
}
150