GoogleFont::getSizesString()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

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