File tree Expand file tree Collapse file tree 4 files changed +120
-0
lines changed
Expand file tree Collapse file tree 4 files changed +120
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+ namespace Relay ;
3+
4+ class RelayFactory
5+ {
6+ protected $ queue ;
7+ protected $ resolver ;
8+
9+ public function __construct (array $ queue , $ resolver = null )
10+ {
11+ $ this ->queue = $ queue ;
12+ $ this ->resolver = $ resolver ;
13+ }
14+
15+ public function newInstance ()
16+ {
17+ return new Relay ($ this ->queue , $ this ->resolver );
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ namespace Relay ;
3+
4+ use Psr \Http \Message \RequestInterface as Request ;
5+ use Psr \Http \Message \ResponseInterface as Response ;
6+
7+ class ReusableRelay
8+ {
9+ protected $ relayFactory ;
10+
11+ public function __construct (RelayFactory $ relayFactory )
12+ {
13+ $ this ->relayFactory = $ relayFactory ;
14+ }
15+
16+ public function __invoke (Request $ request , Response $ response )
17+ {
18+ $ relay = $ this ->relayFactory ->newInstance ();
19+ return $ relay ($ request , $ response );
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ namespace Relay ;
3+
4+ use ArrayObject ;
5+ use InvalidArgumentException ;
6+
7+ class ReusableRelayBuilder
8+ {
9+ protected $ resolver ;
10+
11+ public function __construct ($ resolver = null )
12+ {
13+ $ this ->resolver = $ resolver ;
14+ }
15+
16+ public function newInstance ($ queue )
17+ {
18+ return new ReusableRelay ($ this ->newRelayFactory ($ queue ));
19+ }
20+
21+ protected function newRelayFactory ($ queue )
22+ {
23+ return new RelayFactory (
24+ $ this ->getArray ($ queue ),
25+ $ this ->resolver
26+ );
27+ }
28+
29+ protected function getArray ($ queue )
30+ {
31+ if (is_array ($ queue )) {
32+ return $ queue ;
33+ }
34+
35+ $ getArrayCopy = $ queue instanceof GetArrayCopyInterface
36+ || $ queue instanceof ArrayObject;
37+
38+ if ($ getArrayCopy ) {
39+ return $ queue ->getArrayCopy ();
40+ }
41+
42+ throw new InvalidArgumentException ();
43+ }
44+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ namespace Relay ;
3+
4+ use Zend \Diactoros \ServerRequestFactory ;
5+ use Zend \Diactoros \Response ;
6+
7+ class ReusableRelayTest extends \PHPUnit_Framework_TestCase
8+ {
9+ public function test ()
10+ {
11+ FakeMiddleware::$ count = 0 ;
12+
13+ $ queue [] = new FakeMiddleware ();
14+ $ queue [] = new FakeMiddleware ();
15+ $ queue [] = new FakeMiddleware ();
16+
17+ $ builder = new ReusableRelayBuilder ();
18+ $ relay = $ builder ->newInstance ($ queue );
19+
20+ // relay once
21+ $ response = $ relay (
22+ ServerRequestFactory::fromGlobals (),
23+ new Response ()
24+ );
25+ $ actual = (string ) $ response ->getBody ();
26+ $ this ->assertSame ('123456 ' , $ actual );
27+
28+ // relay again
29+ $ response = $ relay (
30+ ServerRequestFactory::fromGlobals (),
31+ new Response ()
32+ );
33+ $ actual = (string ) $ response ->getBody ();
34+ $ this ->assertSame ('789101112 ' , $ actual );
35+ }
36+ }
You can’t perform that action at this time.
0 commit comments