From 662f2c9186d3b37469ee147c0a27dbde9bd0fd27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rk=20S=C3=A1gi-Kaz=C3=A1r?= Date: Fri, 19 Feb 2016 20:45:33 +0100 Subject: [PATCH] Add callback request matcher --- .../CallbackRequestMatcherSpec.php | 43 +++++++++++++++++++ src/RequestMatcher/CallbackRequestMatcher.php | 35 +++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 spec/RequestMatcher/CallbackRequestMatcherSpec.php create mode 100644 src/RequestMatcher/CallbackRequestMatcher.php diff --git a/spec/RequestMatcher/CallbackRequestMatcherSpec.php b/spec/RequestMatcher/CallbackRequestMatcherSpec.php new file mode 100644 index 0000000..6aa27df --- /dev/null +++ b/spec/RequestMatcher/CallbackRequestMatcherSpec.php @@ -0,0 +1,43 @@ +beConstructedWith(function () {}); + } + + function it_is_initializable() + { + $this->shouldHaveType('Http\Message\RequestMatcher\CallbackRequestMatcher'); + } + + function it_is_a_request_matcher() + { + $this->shouldImplement('Http\Message\RequestMatcher'); + } + + function it_matches_a_request(RequestInterface $request) + { + $callback = function () { return true; }; + + $this->beConstructedWith($callback); + + $this->matches($request)->shouldReturn(true); + } + + function it_does_not_match_a_request(RequestInterface $request) + { + $callback = function () { return false; }; + + $this->beConstructedWith($callback); + + $this->matches($request)->shouldReturn(false); + } +} diff --git a/src/RequestMatcher/CallbackRequestMatcher.php b/src/RequestMatcher/CallbackRequestMatcher.php new file mode 100644 index 0000000..4d45e32 --- /dev/null +++ b/src/RequestMatcher/CallbackRequestMatcher.php @@ -0,0 +1,35 @@ + + */ +final class CallbackRequestMatcher implements RequestMatcher +{ + /** + * @var callable + */ + private $callback; + + /** + * @param callable $callback + */ + public function __construct(callable $callback) + { + $this->callback = $callback; + } + + /** + * {@inheritdoc} + */ + public function matches(RequestInterface $request) + { + return (bool) call_user_func($this->callback, $request); + } +}