Completed
Pull Request — master (#10)
by ARCANEDEV
03:04
created

BreadcrumbItem::toArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
ccs 7
cts 7
cp 1
crap 1
1
<?php namespace Arcanedev\Breadcrumbs\Entities;
2
3
use Illuminate\Support\Arr;
4
use Illuminate\Support\Fluent;
5
6
/**
7
 * Class     BreadcrumbItem
8
 *
9
 * @package  Arcanedev\Breadcrumbs\Entities
10
 * @author   ARCANEDEV <[email protected]>
11
 *
12
 * @property  string  title
13
 * @property  string  url
14
 * @property  bool    first
15
 * @property  bool    last
16
 */
17
class BreadcrumbItem extends Fluent
18
{
19
    /* -----------------------------------------------------------------
20
     |  Constructor
21
     | -----------------------------------------------------------------
22
     */
23
24
    /**
25
     * Create a breadcrumb item instance.
26
     *
27
     * @param  array|object  $attributes
28
     */
29 22
    public function __construct($attributes = [])
30
    {
31 22
        $keys = ['title', 'url', 'icon'];
32
33 22
        parent::__construct(Arr::only($attributes, $keys) + [
0 ignored issues
show
Bug introduced by
It seems like $attributes defined by parameter $attributes on line 29 can also be of type object; however, Illuminate\Support\Arr::only() does only seem to accept array, maybe add an additional type check?

This check looks at variables that have been passed in as parameters and are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
34 22
            'extra' => Arr::except($attributes, $keys)
0 ignored issues
show
Bug introduced by
It seems like $attributes defined by parameter $attributes on line 29 can also be of type object; however, Illuminate\Support\Arr::except() does only seem to accept array, maybe add an additional type check?

This check looks at variables that have been passed in as parameters and are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
35
        ]);
36
37 22
        $this->resetPosition();
38 22
    }
39
40
    /* -----------------------------------------------------------------
41
     |  Getters & Setters
42
     | -----------------------------------------------------------------
43
     */
44
45
    /**
46
     * Get the title.
47
     *
48
     * @return string|null
49
     */
50 4
    public function getTitle()
51
    {
52 4
        return $this->get('title');
53
    }
54
55
    /**
56
     * Get the url.
57
     *
58
     * @return string|null
59
     */
60 4
    public function getUrl()
61
    {
62 4
        return $this->get('url');
63
    }
64
65
    /**
66
     * Set as first item.
67
     *
68
     * @return self
69
     */
70 14
    public function setFirst()
71
    {
72 14
        $this->attributes['first'] = true;
73
74 14
        return $this;
75
    }
76
77
    /**
78
     * Set as last item.
79
     *
80
     * @return self
81
     */
82 14
    public function setLast()
83
    {
84 14
        $this->attributes['last'] = true;
85
86 14
        return $this;
87
    }
88
89
    /**
90
     * Get the extra attribute.
91
     *
92
     * @param  string  $key
93
     * @param  mixed   $default
94
     *
95
     * @return mixed
96
     */
97 2
    public function extra($key, $default = null)
98
    {
99 2
        return Arr::get($this->attributes['extra'], $key, $default);
100
    }
101
102
    /* -----------------------------------------------------------------
103
     |  Main Methods
104
     | -----------------------------------------------------------------
105
     */
106
107
    /**
108
     * Make a breadcrumb item instance.
109
     *
110
     * @param  string  $title
111
     * @param  string  $url
112
     * @param  array   $data
113
     *
114
     * @return self
115
     */
116 16
    public static function make($title, $url, array $data = [])
117
    {
118 16
        return new self($data + compact('title', 'url'));
119
    }
120
121
    /**
122
     * Reset position.
123
     *
124
     * @return self
125
     */
126 22
    public function resetPosition()
127
    {
128 22
        $this->attributes['first'] = false;
129 22
        $this->attributes['last']  = false;
130
131 22
        return $this;
132
    }
133
134
    /* -----------------------------------------------------------------
135
     |  Check Methods
136
     | -----------------------------------------------------------------
137
     */
138
139
    /**
140
     * Check is first item.
141
     *
142
     * @return bool
143
     */
144 6
    public function isFirst()
145
    {
146 6
        return $this->get('first', false);
147
    }
148
149
    /**
150
     * Check is last item.
151
     *
152
     * @return bool
153
     */
154 6
    public function isLast()
155
    {
156 6
        return $this->get('last', false);
157
    }
158
}
159