Passed
Push — master ( 76636e...a7cce5 )
by Kevin
03:12
created

PingHandler   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Test Coverage

Coverage 97.06%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 15
eloc 16
c 1
b 0
f 0
dl 0
loc 86
ccs 33
cts 34
cp 0.9706
rs 10

11 Methods

Rating   Name   Duplication   Size   Complexity  
A supports() 0 3 1
A beforeTask() 0 3 1
A onScheduleFailure() 0 3 1
A onTaskFailure() 0 3 1
A afterSchedule() 0 3 1
A beforeSchedule() 0 3 1
A afterTask() 0 3 1
A pingIf() 0 4 2
A __construct() 0 7 4
A onTaskSuccess() 0 3 1
A onScheduleSuccess() 0 3 1
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Schedule\Extension\Handler;
4
5
use Symfony\Component\HttpClient\HttpClient;
6
use Symfony\Contracts\HttpClient\HttpClientInterface;
7
use Zenstruck\ScheduleBundle\Schedule;
8
use Zenstruck\ScheduleBundle\Schedule\Exception\MissingDependency;
9
use Zenstruck\ScheduleBundle\Schedule\Extension\ExtensionHandler;
10
use Zenstruck\ScheduleBundle\Schedule\Extension\PingExtension;
11
use Zenstruck\ScheduleBundle\Schedule\ScheduleRunContext;
12
use Zenstruck\ScheduleBundle\Schedule\Task;
13
use Zenstruck\ScheduleBundle\Schedule\Task\TaskRunContext;
14
15
/**
16
 * @author Kevin Bond <[email protected]>
17
 */
18
final class PingHandler extends ExtensionHandler
19
{
20
    private $httpClient;
21
22 2
    public function __construct(HttpClientInterface $httpClient = null)
23
    {
24 2
        if (null === $httpClient && !\class_exists(HttpClient::class)) {
25
            throw new MissingDependency(PingExtension::getMissingDependencyMessage());
26
        }
27
28 2
        $this->httpClient = $httpClient ?: HttpClient::create();
29 2
    }
30
31
    /**
32
     * @param PingExtension $extension
33
     */
34 2
    public function beforeSchedule(ScheduleRunContext $context, object $extension): void
35
    {
36 2
        $this->pingIf($extension, Schedule::BEFORE);
37 2
    }
38
39
    /**
40
     * @param PingExtension $extension
41
     */
42 2
    public function afterSchedule(ScheduleRunContext $context, object $extension): void
43
    {
44 2
        $this->pingIf($extension, Schedule::AFTER);
45 2
    }
46
47
    /**
48
     * @param PingExtension $extension
49
     */
50 1
    public function onScheduleSuccess(ScheduleRunContext $context, object $extension): void
51
    {
52 1
        $this->pingIf($extension, Schedule::SUCCESS);
53 1
    }
54
55
    /**
56
     * @param PingExtension $extension
57
     */
58 1
    public function onScheduleFailure(ScheduleRunContext $context, object $extension): void
59
    {
60 1
        $this->pingIf($extension, Schedule::FAILURE);
61 1
    }
62
63
    /**
64
     * @param PingExtension $extension
65
     */
66 2
    public function beforeTask(TaskRunContext $context, object $extension): void
67
    {
68 2
        $this->pingIf($extension, Task::BEFORE);
69 2
    }
70
71
    /**
72
     * @param PingExtension $extension
73
     */
74 2
    public function afterTask(TaskRunContext $context, object $extension): void
75
    {
76 2
        $this->pingIf($extension, Task::AFTER);
77 2
    }
78
79
    /**
80
     * @param PingExtension $extension
81
     */
82 1
    public function onTaskSuccess(TaskRunContext $context, object $extension): void
83
    {
84 1
        $this->pingIf($extension, Task::SUCCESS);
85 1
    }
86
87
    /**
88
     * @param PingExtension $extension
89
     */
90 1
    public function onTaskFailure(TaskRunContext $context, object $extension): void
91
    {
92 1
        $this->pingIf($extension, Task::FAILURE);
93 1
    }
94
95 2
    public function supports(object $extension): bool
96
    {
97 2
        return $extension instanceof PingExtension;
98
    }
99
100 2
    private function pingIf(PingExtension $extension, string $expectedHook): void
101
    {
102 2
        if ($expectedHook === $extension->getHook()) {
103 2
            $this->httpClient->request($extension->getMethod(), $extension->getUrl(), $extension->getOptions())->getStatusCode();
104
        }
105 2
    }
106
}
107