Skip to content

Commit a4c08dc

Browse files
authored
Merge pull request #104 from DimionX/patch-1
Upgrade Guzzle Promises Function API to Static API
2 parents add74da + 2b7d59b commit a4c08dc

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

src/Ganesha/GuzzleMiddleware.php

+34-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ class GuzzleMiddleware
2626
*/
2727
private $failureDetector;
2828

29+
/**
30+
* Function name to be used for returning a rejected promise.
31+
*
32+
* @var string
33+
*/
34+
private string $rejectionForFunction;
35+
36+
/**
37+
* Function name to be used for returning a promise.
38+
*
39+
* @var string
40+
*/
41+
private string $promiseForFunction;
42+
2943
public function __construct(
3044
Ganesha $ganesha,
3145
ServiceNameExtractorInterface $serviceNameExtractor = null,
@@ -34,6 +48,16 @@ public function __construct(
3448
$this->ganesha = $ganesha;
3549
$this->serviceNameExtractor = $serviceNameExtractor ?: new ServiceNameExtractor();
3650
$this->failureDetector = $failureDetector ?: new AlwaysSuccessFailureDetector();
51+
52+
// We need to support both the static and function API of `guzzle/promises` for the time being.
53+
// https://github.com/guzzle/promises#upgrading-from-function-api
54+
if (class_exists('\GuzzleHttp\Promise\Create')) {
55+
$this->rejectionForFunction = '\GuzzleHttp\Promise\Create::rejectionFor';
56+
$this->promiseForFunction = '\GuzzleHttp\Promise\Create::promiseFor';
57+
} else {
58+
$this->rejectionForFunction = '\GuzzleHttp\Promise\rejection_for';
59+
$this->promiseForFunction = '\GuzzleHttp\Promise\promise_for';
60+
}
3761
}
3862

3963
/**
@@ -46,7 +70,8 @@ public function __invoke(callable $handler): \Closure
4670
$serviceName = $this->serviceNameExtractor->extract($request, $options);
4771

4872
if (!$this->ganesha->isAvailable($serviceName)) {
49-
return \GuzzleHttp\Promise\rejection_for(
73+
return call_user_func(
74+
$this->rejectionForFunction,
5075
new RejectedException(
5176
sprintf('"%s" is not available', $serviceName)
5277
)
@@ -62,11 +87,17 @@ function ($value) use ($serviceName) {
6287
} else {
6388
$this->ganesha->success($serviceName);
6489
}
65-
return \GuzzleHttp\Promise\promise_for($value);
90+
return call_user_func(
91+
$this->promiseForFunction,
92+
$value
93+
);
6694
},
6795
function ($reason) use ($serviceName) {
6896
$this->ganesha->failure($serviceName);
69-
return \GuzzleHttp\Promise\rejection_for($reason);
97+
return call_user_func(
98+
$this->rejectionForFunction,
99+
$reason
100+
);
70101
}
71102
);
72103
};

0 commit comments

Comments
 (0)