From 9983a30195158fc87eec240e358710545cff43a4 Mon Sep 17 00:00:00 2001 From: lotyp Date: Thu, 10 Aug 2023 15:28:46 +0300 Subject: [PATCH] feat: support multiple http methods --- .../Providers/WebhookClientServiceProvider.php | 11 +++++++++-- src/Exceptions/InvalidMethod.php | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/Exceptions/InvalidMethod.php diff --git a/src/Bridge/Laravel/Providers/WebhookClientServiceProvider.php b/src/Bridge/Laravel/Providers/WebhookClientServiceProvider.php index cbc60798..60bf7b65 100644 --- a/src/Bridge/Laravel/Providers/WebhookClientServiceProvider.php +++ b/src/Bridge/Laravel/Providers/WebhookClientServiceProvider.php @@ -15,8 +15,10 @@ use WayOfDev\WebhookClient\ConfigRepository; use WayOfDev\WebhookClient\Contracts\WebhookCallRepository; use WayOfDev\WebhookClient\Exceptions\InvalidConfig; +use WayOfDev\WebhookClient\Exceptions\InvalidMethod; use WayOfDev\WebhookClient\Persistence\ORMWebhookCallRepository; +use function in_array; use function is_null; final class WebhookClientServiceProvider extends ServiceProvider @@ -34,8 +36,13 @@ public function boot(): void public function register(): void { - Route::macro('webhooks', function (string $url, string $name = 'default') { - return Route::post($url, WebhookController::class)->name("webhook-client-{$name}"); + Route::macro('webhooks', function (string $url, string $name = 'default', $method = 'post') { + if (! in_array($method, ['get', 'post', 'put', 'patch', 'delete'], true)) { + throw InvalidMethod::make($method); + } + + // @phpstan-ignore-next-line + return Route::{$method}($url, WebhookController::class)->name("webhook-client-{$name}"); }); $this->app->scoped(ConfigRepository::class, function () { diff --git a/src/Exceptions/InvalidMethod.php b/src/Exceptions/InvalidMethod.php new file mode 100644 index 00000000..22d26a25 --- /dev/null +++ b/src/Exceptions/InvalidMethod.php @@ -0,0 +1,15 @@ +