Completed
Push — master ( 2927d0...968590 )
by zyt
08:18 queued 13s
created

GoogleFont::__toString()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3

Importance

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