Completed
Pull Request — master (#39)
by Daniel
03:46
created

HttpLeagueFactory::createEmitter()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Jellyfish\HttpLeague;
4
5
use Http\Factory\Diactoros\ResponseFactory;
6
use League\Route\Router;
7
use League\Route\Strategy\JsonStrategy;
8
use League\Route\Strategy\StrategyInterface;
9
use Psr\Http\Message\ResponseFactoryInterface;
10
use Psr\Http\Message\ServerRequestInterface;
11
use Zend\Diactoros\ServerRequestFactory;
12
use Zend\HttpHandlerRunner\Emitter\EmitterInterface;
13
use Zend\HttpHandlerRunner\Emitter\SapiStreamEmitter;
14
15
class HttpLeagueFactory
16
{
17
    /**
18
     * @var \Psr\Http\Message\ServerRequestInterface
19
     */
20
    protected $request;
21
22
    /**
23
     * @var \League\Route\Router
24
     */
25
    protected $router;
26
27
    /**
28
     * @var \Zend\HttpHandlerRunner\Emitter\EmitterInterface
29
     */
30
    protected $emitter;
31
32
    /**
33
     * @SuppressWarnings(PHPMD.StaticAccess)
34
     *
35
     * @return \Psr\Http\Message\ServerRequestInterface
36
     */
37
    public function createRequest(): ServerRequestInterface
38
    {
39
        if ($this->request === null) {
40
            $this->request = ServerRequestFactory::fromGlobals();
41
        }
42
43
        return $this->request;
44
    }
45
46
    /**
47
     * @return \League\Route\Router
48
     */
49
    public function createRouter(): Router
50
    {
51
        if ($this->router === null) {
52
            $this->router = new Router();
53
            $this->router->setStrategy($this->createStrategy());
54
        }
55
56
        return $this->router;
57
    }
58
59
    /**
60
     * @return \League\Route\Strategy\StrategyInterface
61
     */
62
    protected function createStrategy(): StrategyInterface
63
    {
64
        return new JsonStrategy($this->createResponseFactory());
65
    }
66
67
    /**
68
     * @return \Psr\Http\Message\ResponseFactoryInterface
69
     */
70
    protected function createResponseFactory(): ResponseFactoryInterface
71
    {
72
        return new ResponseFactory();
73
    }
74
75
    /**
76
     * @return \Zend\HttpHandlerRunner\Emitter\EmitterInterface
77
     */
78
    public function createEmitter(): EmitterInterface
79
    {
80
        if ($this->emitter === null) {
81
            $this->emitter = new SapiStreamEmitter();
82
        }
83
84
        return $this->emitter;
85
    }
86
}
87