Completed
Push — master ( 9792a6...aaaf86 )
by recca
10:22
created

RenderBar::reject()   B

Complexity

Conditions 10
Paths 6

Size

Total Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 10

Importance

Changes 0
Metric Value
cc 10
nc 6
nop 3
dl 0
loc 30
rs 7.6666
c 0
b 0
f 0
ccs 16
cts 16
cp 1
crap 10

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Recca0120\LaravelTracy\Middleware;
4
5
use Illuminate\Contracts\Events\Dispatcher;
6
use Illuminate\Http\Request;
7
use Recca0120\LaravelTracy\DebuggerManager;
8
use Recca0120\LaravelTracy\Events\BeforeBarRender;
9
use Symfony\Component\HttpFoundation\BinaryFileResponse;
10
use Symfony\Component\HttpFoundation\RedirectResponse;
11
use Symfony\Component\HttpFoundation\Response;
12
use Symfony\Component\HttpFoundation\StreamedResponse;
13
14
class RenderBar
15
{
16
    /**
17
     * $debuggerManager.
18
     *
19
     * @var \Recca0120\LaravelTracy\DebuggerManager
20
     */
21
    protected $debuggerManager;
22
23
    /**
24
     * $events.
25
     *
26
     * @var \Illuminate\Contracts\Events\Dispatcher
27
     */
28
    protected $events;
29
30
    /**
31
     * __construct.
32
     *
33
     *
34
     * @param \Recca0120\LaravelTracy\DebuggerManager $debuggerManager
35
     * @param \Illuminate\Contracts\Events\Dispatcher $events
36
     */
37 9
    public function __construct(DebuggerManager $debuggerManager, Dispatcher $events)
38
    {
39 9
        $this->debuggerManager = $debuggerManager;
40 9
        $this->events = $events;
41 9
    }
42
43
    /**
44
     * handle.
45
     *
46
     * @param \Illuminate\Http\Request $request
47
     * @param \Closure $next
48
     * @return \Symfony\Component\HttpFoundation\Response
49
     */
50 9
    public function handle($request, $next)
51
    {
52 9
        return $request->has('_tracy_bar') === true
53 1
            ? $this->keepFlashSession($request, $next)
54 9
            : $this->render($request, $next);
55
    }
56
57
    /**
58
     * keepFlashSession.
59
     *
60
     * @param \Illuminate\Http\Request $request
61
     * @param \Closure $next
62
     * @return \Symfony\Component\HttpFoundation\Response
63
     */
64 1
    protected function keepFlashSession($request, $next)
65
    {
66 1
        $type = $request->get('_tracy_bar');
67 1
        if ($request->hasSession() === true && in_array($type, ['js', 'css'], true) === false) {
68 1
            $request->session()->reflash();
0 ignored issues
show
Bug introduced by
The method reflash() does not seem to exist on object<Symfony\Component...ssion\SessionInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
69
        }
70
71 1
        return $next($request);
72
    }
73
74
    /**
75
     * render.
76
     *
77
     * @param \Illuminate\Http\Request $request
78
     * @param \Closure $next
79
     * @return \Symfony\Component\HttpFoundation\Response
80
     */
81 8
    protected function render($request, $next)
82
    {
83 8
        $this->debuggerManager->dispatch();
84
85 8
        $response = $next($request);
86
87 8
        $ajax = $request->ajax();
88
89 8
        if ($this->reject($response, $request, $ajax) === true) {
90 4
            return $response;
91
        }
92
93 4
        $method = method_exists($this->events, 'dispatch') ? 'dispatch' : 'fire';
94 4
        $this->events->{$method}(new BeforeBarRender($request, $response));
95
96 4
        $response->setContent(
97 4
            $this->debuggerManager->shutdownHandler(
98 4
                $response->getContent(), $ajax
99
            )
100
        );
101
102 4
        return $response;
103
    }
104
105
    /**
106
     * reject.
107
     *
108
     * @param \Symfony\Component\HttpFoundation\Response $response
109
     * @param \Illuminate\Http\Request $request
110
     * @param bool $ajax
111
     *
112
     * @return bool
113
     */
114 8
    protected function reject(Response $response, Request $request, $ajax)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
115
    {
116
        if (
117 8
            $response instanceof BinaryFileResponse ||
118 7
            $response instanceof StreamedResponse ||
119 8
            $response instanceof RedirectResponse
120
        ) {
121 3
            return true;
122
        }
123
124 5
        if ($ajax === true) {
125 1
            return false;
126
        }
127
128 4
        $contentType = strtolower($response->headers->get('Content-Type'));
129 4
        $accepts = $this->debuggerManager->accepts();
130 4
        if ((empty($contentType) === true && $response->getStatusCode() >= 400) ||
131 4
            count($accepts) === 0
132
        ) {
133 2
            return false;
134
        }
135
136 2
        foreach ($accepts as $accept) {
137 2
            if (strpos($contentType, $accept) !== false) {
138 1
                return false;
139
            }
140
        }
141
142 1
        return true;
143
    }
144
}
145