Passed
Push — master ( 99159c...091505 )
by zyt
05:08
created

GoogleFont::stringOrArraySetter()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 4
nop 2
dl 0
loc 7
ccs 6
cts 6
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace ZWF;
4
5
class GoogleFont
6
{
7
8
    protected $name = '';
9
10
    protected $sizes = [];
11
12
    protected $subsets = [];
13
14 5
    public function __construct($name, array $sizes = [], array $subsets = [])
15 5
    {
16 5
        $this->setName($name);
17 5
        $this->setSizes($sizes);
18 5
        $this->setSubsets($subsets);
19 5
    }
20
21 5
    public function setName($name)
22 5
    {
23 5
        $this->name = $name;
24 5
    }
25
26 5
    public function getName()
27 5
    {
28 5
        return $this->name;
29
    }
30
31
    /**
32
     * @param string|array $sizes
33
     */
34 5
    public function setSizes($sizes)
35 5
    {
36 5
        $this->stringOrArraySetter('sizes', $sizes);
37 5
    }
38
39 5
    public function getSizes()
40 5
    {
41 5
        return $this->sizes;
42
    }
43
44
    public function getSizesString()
45
    {
46
        return implode(',', $this->getSizes());
47
    }
48
49
    /**
50
     * @param string|array $subsets
51
     */
52 5
    public function setSubsets($subsets)
53 5
    {
54 5
        $this->stringOrArraySetter('subsets', $subsets);
55 5
    }
56
57 3
    public function getSubsets()
58 3
    {
59 3
        return $this->subsets;
60
    }
61
62 5
    public function getSubsetsString()
63 5
    {
64 5
        return implode(',', $this->subsets);
65
    }
66
67
68
69
    /**
70
     * @return string
71
     */
72
    public function __toString()
73
    {
74
        return implode(
75
            ':',
76
            [
77
                $this->getName(),
78
                $this->getSizesString(),
79
                $this->getSubsetsString()
80
            ]
81
        );
82
    }
83
84
    /**
85
     * Setter for given `$property` which makes sure that if a string `$value`
86
     * is given (in which multiple values can be separated by a comma) it ends
87
     * up being converted into an array.
88
     *
89
     * @param string $property
90
     * @param string|array $value
91
     *
92
     * @return void
93
     */
94 5
    private function stringOrArraySetter($property, $value)
95 5
    {
96 5
        if (is_array($value)) {
97 5
            $this->$property = $value;
98
        }
99 5
        if (is_string($value)) {
100 4
            $this->$property = array_map('trim', explode(',', $value));
101
        }
102 5
    }
103
104
    /**
105
     * Creates a new instance from a given $fontstring.
106
     *
107
     * @param string $fontstring
108
     *
109
     * @return GoogleFont
110
     */
111 5
    public static function fromString($fontstring)
112 5
    {
113 5
        $parts = explode(':', $fontstring);
114 5
        $font  = new self($parts[0]);
115
116 5
        if (isset($parts[1])) {
117 4
            $font->setSizes($parts[1]);
118
        }
119
120 5
        if (isset($parts[2])) {
121 4
            $font->setSubsets($parts[2]);
122
        }
123
124 5
        return $font;
125
    }
126
}
127