Completed
Push — master ( b5f959...da0e5f )
by Costin
02:20
created

GluesAttributes::glueAttributes()   C

Complexity

Conditions 12
Paths 28

Size

Total Lines 42
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 1 Features 1
Metric Value
eloc 21
c 4
b 1
f 1
dl 0
loc 42
rs 6.9666
cc 12
nc 28
nop 1

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace SoareCostin\BladeFormComponents\Traits;
4
5
trait GluesAttributes
6
{
7
    public function glueAttributes($attributesList = null)
8
    {
9
        if (is_null($attributesList)) {
10
            $attributesList = $this->attributesList();
11
        }
12
13
        $pairs = [];
14
        foreach ($attributesList as $attr) {
15
            if (isset($this->{$attr})) {
16
17
                // Edge cases
18
                if ($attr == 'autocomplete') {
19
                    $pairs[] = sprintf('%s="%s"', $attr, $this->{$attr} ? 'on' : 'off');
20
                    continue;
21
                }
22
23
                if ($attr == 'class' && is_array($this->{$attr})) {
24
                    $pairs[] = sprintf('%s="%s"', $attr, implode(' ', $this->{$attr}));
25
                    continue;
26
                }
27
28
                // Required, disabled, readonly: true/false
29
                if (is_bool($this->{$attr})) {
30
                    if ($this->{$attr} == true) {
31
                        $pairs[] = $attr;
32
                    }
33
                    continue;
34
                }
35
36
                $pairs[] = sprintf('%s="%s"', $attr, $this->{$attr});
37
            }
38
        }
39
40
        $customAttributes = $this->customAttributes();
41
        
42
        if (!empty($customAttributes)) {
43
            foreach ($customAttributes as $attrName => $attrVal) {
44
                $pairs[] = sprintf('%s="%s"', $attrName, $attrVal);
45
            }
46
        }
47
48
        return implode(' ', $pairs);
49
    }
50
    
51
    protected function attributesList()
52
    {
53
        return [];
54
    }
55
    
56
    protected function customAttributes()
57
    {
58
        return [];
59
    }
60
}
61