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); + } +}