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

GoogleFont   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Test Coverage

Coverage 82.14%

Importance

Changes 0
Metric Value
dl 0
loc 120
ccs 46
cts 56
cp 0.8214
rs 10
c 0
b 0
f 0
wmc 16

12 Methods

Rating   Name   Duplication   Size   Complexity  
A setName() 0 3 1
A getName() 0 3 1
A __construct() 0 5 1
A getSizesString() 0 3 1
A fromString() 0 14 3
A getSubsets() 0 3 1
A setSubsets() 0 3 1
A getSizes() 0 3 1
A __toString() 0 8 1
A setSizes() 0 3 1
A getSubsetsString() 0 3 1
A stringOrArraySetter() 0 7 3
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