From b7366833102d544ae84968f369baa2c9494252e9 Mon Sep 17 00:00:00 2001 From: Dries Vints Date: Mon, 30 Sep 2019 18:19:53 +0200 Subject: [PATCH] Fix callback return for DurationLimiter The callback return value wasn't properly cascades back as a result. Fixes https://github.com/laravel/framework/issues/28729 --- src/Illuminate/Redis/Limiters/DurationLimiter.php | 2 +- tests/Redis/DurationLimiterTest.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Redis/Limiters/DurationLimiter.php b/src/Illuminate/Redis/Limiters/DurationLimiter.php index 764a6dcee8b3..687ae134241c 100644 --- a/src/Illuminate/Redis/Limiters/DurationLimiter.php +++ b/src/Illuminate/Redis/Limiters/DurationLimiter.php @@ -87,7 +87,7 @@ public function block($timeout, $callback = null) } if (is_callable($callback)) { - $callback(); + return $callback(); } return true; diff --git a/tests/Redis/DurationLimiterTest.php b/tests/Redis/DurationLimiterTest.php index c769fc32361e..3b10d092281f 100644 --- a/tests/Redis/DurationLimiterTest.php +++ b/tests/Redis/DurationLimiterTest.php @@ -83,6 +83,17 @@ public function testItFailsImmediatelyOrRetriesForAWhileBasedOnAGivenTimeout() $this->assertEquals([1, 3], $store); } + public function testItReturnsTheCallbackResult() + { + $limiter = new DurationLimiter($this->redis(), 'key', 1, 1); + + $result = $limiter->block(1, function () { + return 'foo'; + }); + + $this->assertEquals('foo', $result); + } + private function redis() { return $this->redis['phpredis']->connection();