Solver::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 1 Features 4
Metric Value
c 6
b 1
f 4
dl 0
loc 5
rs 9.4285
cc 2
eloc 3
nc 2
nop 2
1
<?php
2
/**
3
 * @author  Alexander Getmansky <[email protected]>
4
 * @package GetSky\RandomWinner
5
 */
6
namespace GetSky\RandomWinner;
7
8
use RandomLib\Generator;
9
10
class Solver
11
{
12
    /**
13
     * @var Generator
14
     */
15
    protected $generator;
16
17
    /**
18
     * @var MembersStorageInterface
19
     */
20
    protected $storage;
21
22
    /**
23
     * @var int
24
     */
25
    protected $upperLimit = 0;
26
27
    /**
28
     * @param Generator $generator
29
     * @param MembersStorageInterface $storage
30
     */
31
    public function __construct(Generator $generator, MembersStorageInterface $storage = null)
32
    {
33
        $this->generator = $generator;
34
        $this->storage = $storage != null ? $storage : new DefaultStorage();
35
    }
36
37
    /**
38
     * Generate a winner.
39
     * @throws SolverException
40
     * @return mixed|object
41
     */
42
    public function run()
43
    {
44
        $random = $this->generator->generateInt(1, $this->storage->getUpperLimit());
45
        foreach ($this->storage->getAll() as $member) {
46
            $range = $this->storage->getRange($member);
47
            if ($random >= $range[0] && $random <= $range[1]) {
48
                return $member;
49
            }
50
        }
51
52
        throw new SolverException();
53
    }
54
55
    /**
56
     * Return members storage.
57
     * @return MembersStorageInterface
58
     */
59
    public function getStorage()
60
    {
61
        return $this->storage;
62
    }
63
64
65
    /**
66
     * Set new members storage.
67
     * @param MembersStorageInterface $membersStorage
68
     */
69
    public function setStorage(MembersStorageInterface $membersStorage)
70
    {
71
        $this->storage = $membersStorage;
72
    }
73
}
74