Completed
Branch proxy (a8ed88)
by leo
08:29
created

TicketGenerator::generate()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
cc 4
eloc 11
nc 6
nop 4
dl 0
loc 18
ccs 0
cts 12
cp 0
crap 20
rs 9.2
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: leo108
5
 * Date: 2016/10/26
6
 * Time: 10:22
7
 */
8
9
namespace Leo108\CAS\Services;
10
11
use Illuminate\Support\Str;
12
13
class TicketGenerator
14
{
15
16
    /**
17
     * @param integer  $totalLength
18
     * @param string   $prefix
19
     * @param callable $checkFunc
20
     * @param integer  $maxRetry
21
     * @return string|false
22
     */
23
    public function generate($totalLength, $prefix, callable $checkFunc, $maxRetry)
24
    {
25
        $ticket = false;
26
        $flag   = false;
27
        for ($i = 0; $i < $maxRetry; $i++) {
28
            $ticket = $this->generateOne($totalLength, $prefix);
29
            if (!call_user_func_array($checkFunc, [$ticket])) {
30
                $flag = true;
31
                break;
32
            }
33
        }
34
35
        if (!$flag) {
36
            return false;
37
        }
38
39
        return $ticket;
40
    }
41
42
    public function generateOne($totalLength, $prefix)
43
    {
44
        return $prefix.Str::random($totalLength - strlen($prefix));
45
    }
46
}
47