PalettesBuilder   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 44.74%

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 3
dl 0
loc 106
ccs 17
cts 38
cp 0.4474
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A create() 0 4 1
A addPalette() 0 8 1
A importPalettes() 0 14 2
A getNamedPalette() 0 5 1
A getRandomPalette() 0 18 5
A getPalette() 0 6 1
A getPalettes() 0 4 1
1
<?php
2
3
namespace SixtyNine\Cloud\Builder;
4
5
use SixtyNine\Cloud\Model\Palette;
6
use Symfony\Component\Yaml\Yaml;
7
use Webmozart\Assert\Assert;
8
9
class PalettesBuilder
10
{
11
    protected $palettes = array();
12
13
    /**
14
     * Disallow direct instantiation
15
     */
16 3
    protected function __construct()
17
    {
18 3
    }
19
20
    /**
21
     * @return PalettesBuilder
22
     */
23 3
    public static function create()
24
    {
25 3
        return new self();
26
    }
27
28
    /**
29
     * @param string $name
30
     * @param array $colors
31
     * @return PalettesBuilder
32
     */
33
    public function addPalette($name, array $colors)
34
    {
35
        $palette = new Palette();
36
        $palette->setName($name)->setColors($colors);
37
        $this->palettes[$name] = $palette;
38
39
        return $this;
40
    }
41
42
    /**
43
     * @param string $file
44
     * @return PalettesBuilder
45
     * @throws \InvalidArgumentException
46
     */
47
    public function importPalettes($file)
48
    {
49
        Assert::fileExists($file, 'File not found: ' . $file);
50
51
        $yml = Yaml::parse(file_get_contents($file));
52
53
        Assert::keyExists($yml, 'palettes', 'Invalid palettes YAML');
54
55
        foreach ($yml['palettes'] as $name => $colors) {
56
            $this->addPalette($name, $colors);
57
        }
58
59
        return $this;
60
    }
61
62
    /**
63
     * @param string $name
64
     * @return Palette
65
     * @throws \InvalidArgumentException
66
     */
67
    public function getNamedPalette($name)
68
    {
69
        Assert::keyExists($this->palettes, $name, 'Palette not found: ' . $name);
70
        return $this->palettes[$name];
71
    }
72
73
    /**
74
     * @param int $count
75
     * @return Palette
76
     */
77 3
    public function getRandomPalette($count = 5)
78
     {
79 3
         $colors = array();
80 3
         for ($i = 0; $i < $count; $i++) {
81 3
             $part1 = dechex(rand(0, 255));
82 3
             $part2 = dechex(rand(0, 255));
83 3
             $part3 = dechex(rand(0, 255));
84
             $color = '#'
85 3
                . (strlen($part1) >= 2 ? $part1 : '0' . $part1)
86 3
                . (strlen($part2) >= 2 ? $part2 : '0' . $part2)
87 3
                . (strlen($part3) >= 2 ? $part3 : '0' . $part3)
88
             ;
89 3
             $colors[] = $color;
90
         }
91 3
         $palette = new Palette();
92 3
         $palette->setName('random')->setColors($colors);
93 3
         return $palette;
94
     }
95
96
    /**
97
     * @param array $colors
98
     * @return \SixtyNine\Cloud\Model\Palette
99
     */
100
    public function getPalette(array $colors)
101
    {
102
        $palette = new Palette();
103
        $palette->setName('palette')->setColors($colors);
104
        return $palette;
105
    }
106
107
    /**
108
     * @return array
109
     */
110
    public function getPalettes()
111
    {
112
        return $this->palettes;
113
    }
114
}
115