Completed
Push — develop ( 2bfb76...2f90e1 )
by Kirill
04:03
created

KarmaCounterMiddleware::handle()   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 28
rs 6.7272
c 2
b 0
f 0
cc 7
eloc 15
nc 12
nop 2
1
<?php
2
/**
3
 * This file is part of GitterBot package.
4
 *
5
 * @author Serafim <[email protected]>
6
 * @date 27.01.2016 14:41
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
namespace App\Gitter\Middlewares;
12
13
use App\Gitter\Response;
14
use App\Message;
15
use Illuminate\Support\Collection;
16
use App\Gitter\Middlewares\KarmaCounter\Status;
17
use App\Gitter\Extensions\Middlewares\MessageBus;
18
use App\Gitter\Middlewares\KarmaCounter\Validator;
19
use App\Gitter\Extensions\Middlewares\MiddlewareInterface;
20
21
/**
22
 * This middleware count words like `@username thanks`
23
 *
24
 * Class KarmaCounterMiddleware
25
 * @package App\Bot\Middlewares
26
 */
27
class KarmaCounterMiddleware implements MiddlewareInterface
28
{
29
    /**
30
     * @var MessageBus
31
     */
32
    protected $bus;
33
34
    /**
35
     * @var Validator
36
     */
37
    protected $validator;
38
39
    /**
40
     * KarmaCounterMiddleware constructor.
41
     * @param MessageBus $bus
42
     */
43
    public function __construct(MessageBus $bus)
44
    {
45
        $this->bus = $bus;
46
        $this->validator = new Validator();
47
    }
48
49
    /**
50
     * @param Message $message
51
     * @param \Closure $next
52
     * @return string|null
53
     */
54
    public function handle(Message $message, \Closure $next)
55
    {
56
        /** @var Collection $karmaResponses */
57
        $karmaResponses = $this->validator->validate($message);
58
        $response       = new Response();
59
60
        /** @var Status $status */
61
        foreach ($karmaResponses as $status) {
62
            if ($status->isIncrement()) {
63
                $response->append('inc');
64
65
            } elseif ($status->isNoUser()) {
66
                $response->append('nouser');
67
68
            } elseif ($status->isSelf()) {
69
                $response->append('self');
70
71
            } elseif ($status->isTimeout()) {
72
                $response->append('timeout');
73
            }
74
        }
75
76
        if ($karmaResponses->count()) {
77
            $this->bus->send($response);
78
        }
79
80
        return $next($message);
81
    }
82
}
83
84