Skip to content

Commit 021ab4e

Browse files
authored
Merge pull request #4 from renoki-co/refactor/methods
[refactor] Refactored the way the methods are being called
2 parents a323424 + 84e6020 commit 021ab4e

File tree

5 files changed

+57
-196
lines changed

5 files changed

+57
-196
lines changed

src/Http/Controllers/CloudwatchWebhook.php

+9-45
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace RenokiCo\AwsWebhooks\Http\Controllers;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Support\Str;
67
use Rennokki\LaravelSnsEvents\Http\Controllers\SnsController;
78

89
class CloudwatchWebhook extends SnsController
@@ -18,52 +19,15 @@ protected function onNotification(array $snsMessage, Request $request): void
1819
{
1920
$decodedMessage = json_decode($snsMessage['Message'], true);
2021

21-
$state = $decodedMessage['NewStateValue'] ?? null;
22+
$state = Str::studly($decodedMessage['NewStateValue'] ?? null);
2223

23-
switch ($state) {
24-
case 'OK': $this->onOkState($decodedMessage, $snsMessage, $request); break;
25-
case 'ALARM': $this->onAlarmState($decodedMessage, $snsMessage, $request); break;
26-
case 'INSUFFICIENT_DATA': $this->onInsufficientData($decodedMessage, $snsMessage, $request); break;
27-
default: break;
28-
}
29-
}
24+
$methodToCall = "on{$state}State";
3025

31-
/**
32-
* Handle the event when an alarm transitioned to OK.
33-
*
34-
* @param array $message
35-
* @param array $originalMessage
36-
* @param \Illuminate\Http\Request $request
37-
* @return void
38-
*/
39-
protected function onOkState(array $message, array $originalMessage, Request $request)
40-
{
41-
//
42-
}
43-
44-
/**
45-
* Handle the event when an alarm transitioned to ALARM.
46-
*
47-
* @param array $message
48-
* @param array $originalMessage
49-
* @param \Illuminate\Http\Request $request
50-
* @return void
51-
*/
52-
protected function onAlarmState(array $message, array $originalMessage, Request $request)
53-
{
54-
//
55-
}
56-
57-
/**
58-
* Handle the event when an alarm transitioned to INSUFFICIENT_DATA.
59-
*
60-
* @param array $message
61-
* @param array $originalMessage
62-
* @param \Illuminate\Http\Request $request
63-
* @return void
64-
*/
65-
protected function onInsufficientData(array $message, array $originalMessage, Request $request)
66-
{
67-
//
26+
if (method_exists($this, $methodToCall)) {
27+
call_user_func(
28+
[$this, $methodToCall],
29+
$decodedMessage, $snsMessage, $request
30+
);
31+
}
6832
}
6933
}

src/Http/Controllers/SesWebhook.php

+8-142
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,11 @@
33
namespace RenokiCo\AwsWebhooks\Http\Controllers;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Support\Str;
67
use Rennokki\LaravelSnsEvents\Http\Controllers\SnsController;
78

89
class SesWebhook extends SnsController
910
{
10-
/**
11-
* Associate each SNS `eventType` value
12-
* with a callable method from this class.
13-
*
14-
* @var array
15-
*/
16-
public static $eventTypesWithCalledMethod = [
17-
'Bounce' => 'onBounce',
18-
'Complaint' => 'onComplaint',
19-
'Delivery' => 'onDelivery',
20-
'Send' => 'onSend',
21-
'Reject' => 'onReject',
22-
'Open' => 'onOpen',
23-
'Click' => 'onClick',
24-
'Rendering Failure' => 'onRenderingFailure',
25-
'DeliveryDelay' => 'onDeliveryDelay',
26-
];
27-
2811
/**
2912
* Handle logic at the controller level on notification.
3013
*
@@ -38,130 +21,13 @@ protected function onNotification(array $snsMessage, Request $request): void
3821

3922
$eventType = $decodedMessage['eventType'] ?? null;
4023

41-
foreach (static::$eventTypesWithCalledMethod as $callableEventType => $methodToCall) {
42-
if ($eventType === $callableEventType) {
43-
call_user_func(
44-
[$this, $methodToCall],
45-
$decodedMessage, $snsMessage, $request
46-
);
47-
}
48-
}
49-
}
50-
51-
/**
52-
* Handle the Bounce event.
53-
*
54-
* @param array $message
55-
* @param array $originalMessage
56-
* @param \Illuminate\Http\Request $request
57-
* @return void
58-
*/
59-
protected function onBounce(array $message, array $originalMessage, Request $request)
60-
{
61-
//
62-
}
24+
$methodToCall = 'on'.Str::studly($eventType);
6325

64-
/**
65-
* Handle the Complaint event.
66-
*
67-
* @param array $message
68-
* @param array $originalMessage
69-
* @param \Illuminate\Http\Request $request
70-
* @return void
71-
*/
72-
protected function onComplaint(array $message, array $originalMessage, Request $request)
73-
{
74-
//
75-
}
76-
77-
/**
78-
* Handle the Delivery event.
79-
*
80-
* @param array $message
81-
* @param array $originalMessage
82-
* @param \Illuminate\Http\Request $request
83-
* @return void
84-
*/
85-
protected function onDelivery(array $message, array $originalMessage, Request $request)
86-
{
87-
//
88-
}
89-
90-
/**
91-
* Handle the Send event.
92-
*
93-
* @param array $message
94-
* @param array $originalMessage
95-
* @param \Illuminate\Http\Request $request
96-
* @return void
97-
*/
98-
protected function onSend(array $message, array $originalMessage, Request $request)
99-
{
100-
//
101-
}
102-
103-
/**
104-
* Handle the Reject event.
105-
*
106-
* @param array $message
107-
* @param array $originalMessage
108-
* @param \Illuminate\Http\Request $request
109-
* @return void
110-
*/
111-
protected function onReject(array $message, array $originalMessage, Request $request)
112-
{
113-
//
114-
}
115-
116-
/**
117-
* Handle the Open event.
118-
*
119-
* @param array $message
120-
* @param array $originalMessage
121-
* @param \Illuminate\Http\Request $request
122-
* @return void
123-
*/
124-
protected function onOpen(array $message, array $originalMessage, Request $request)
125-
{
126-
//
127-
}
128-
129-
/**
130-
* Handle the Click event.
131-
*
132-
* @param array $message
133-
* @param array $originalMessage
134-
* @param \Illuminate\Http\Request $request
135-
* @return void
136-
*/
137-
protected function onClick(array $message, array $originalMessage, Request $request)
138-
{
139-
//
140-
}
141-
142-
/**
143-
* Handle the Rendering Failure event.
144-
*
145-
* @param array $message
146-
* @param array $originalMessage
147-
* @param \Illuminate\Http\Request $request
148-
* @return void
149-
*/
150-
protected function onRenderingFailure(array $message, array $originalMessage, Request $request)
151-
{
152-
//
153-
}
154-
155-
/**
156-
* Handle the DeliveryDelay event.
157-
*
158-
* @param array $message
159-
* @param array $originalMessage
160-
* @param \Illuminate\Http\Request $request
161-
* @return void
162-
*/
163-
protected function onDeliveryDelay(array $message, array $originalMessage, Request $request)
164-
{
165-
//
26+
if (method_exists($this, $methodToCall)) {
27+
call_user_func(
28+
[$this, $methodToCall],
29+
$decodedMessage, $snsMessage, $request
30+
);
31+
}
16632
}
16733
}

tests/Controllers/CloudwatchController.php

+13
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,17 @@ protected function getMessageValidator(Request $request)
2020
return $request->certificate ?: $url;
2121
});
2222
}
23+
24+
/**
25+
* Handle the event when an alarm transitioned to OK.
26+
*
27+
* @param array $message
28+
* @param array $originalMessage
29+
* @param \Illuminate\Http\Request $request
30+
* @return void
31+
*/
32+
protected function onOkState(array $message, array $originalMessage, Request $request)
33+
{
34+
//
35+
}
2336
}

tests/Controllers/SesController.php

+13
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,17 @@ protected function getMessageValidator(Request $request)
2020
return $request->certificate ?: $url;
2121
});
2222
}
23+
24+
/**
25+
* Handle the Rendering Failure event.
26+
*
27+
* @param array $message
28+
* @param array $originalMessage
29+
* @param \Illuminate\Http\Request $request
30+
* @return void
31+
*/
32+
protected function onRenderingFailure(array $message, array $originalMessage, Request $request)
33+
{
34+
//
35+
}
2336
}

tests/SesTest.php

+14-9
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@
22

33
namespace RenokiCo\AwsWebhooks\Test;
44

5-
use RenokiCo\AwsWebhooks\Http\Controllers\SesWebhook;
6-
75
class SesTest extends TestCase
86
{
9-
public function test_callable_methods()
7+
public function test_calling_existing_method()
8+
{
9+
$payload = $this->getSesMessage('Rendering Failure');
10+
11+
$this->withHeaders($this->getHeadersForMessage($payload))
12+
->json('GET', route('ses', ['certificate' => static::$certificate]), $payload)
13+
->assertSee('OK');
14+
}
15+
16+
public function test_calling_inexisting_method()
1017
{
11-
foreach (SesWebhook::$eventTypesWithCalledMethod as $callableEventType => $methodToCall) {
12-
$payload = $this->getSesMessage($callableEventType);
18+
$payload = $this->getSesMessage('Bounce');
1319

14-
$this->withHeaders($this->getHeadersForMessage($payload))
15-
->json('GET', route('ses', ['certificate' => static::$certificate]), $payload)
16-
->assertSee('OK');
17-
}
20+
$this->withHeaders($this->getHeadersForMessage($payload))
21+
->json('GET', route('ses', ['certificate' => static::$certificate]), $payload)
22+
->assertSee('OK');
1823
}
1924
}

0 commit comments

Comments
 (0)