Completed
Push — master ( 509b14...929e7e )
by Barney
04:52 queued 03:02
created

Middleware::fromResponseTimeLogger()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * @codingStandardsIgnoreStart
4
 *
5
 * @author       Barney Hanlon <[email protected]>
6
 * @copyright    Barney Hanlon 2017
7
 * @license      https://opensource.org/licenses/MIT
8
 *
9
 * @codingStandardsIgnoreEnd
10
 */
11
12
namespace Shrikeh\GuzzleMiddleware\TimerLogger;
13
14
use Psr\Log\LoggerInterface;
15
use Shrikeh\GuzzleMiddleware\TimerLogger\Handler\StartTimer;
16
use Shrikeh\GuzzleMiddleware\TimerLogger\Handler\StopTimer;
17
use Shrikeh\GuzzleMiddleware\TimerLogger\ResponseTimeLogger\ResponseTimeLogger;
18
use Shrikeh\GuzzleMiddleware\TimerLogger\ResponseTimeLogger\ResponseTimeLoggerInterface;
19
20
/**
21
 * Class Middleware.
22
 */
23
class Middleware
24
{
25
    /**
26
     * @var callable
27
     */
28
    private $startHandler;
29
30
    /**
31
     * @var callable
32
     */
33
    private $stopHandler;
34
35
    /**
36
     * @param LoggerInterface $logger The PSR-3 LoggerInterface
37
     *
38
     * @return self
39
     */
40
    public static function quickStart(LoggerInterface $logger)
41
    {
42
        return self::fromResponseTimeLogger(ResponseTimeLogger::quickStart($logger));
43
    }
44
45
    /**
46
     * @param ResponseTimeLoggerInterface $responseTimeLogger A timer logger
47
     *
48
     * @return self
49
     */
50
    public static function fromResponseTimeLogger(ResponseTimeLoggerInterface $responseTimeLogger)
51
    {
52
        return new self(
53
            new StartTimer($responseTimeLogger),
54
            new StopTimer($responseTimeLogger)
55
        );
56
    }
57
58
    /**
59
     * Middleware constructor.
60
     *
61
     * @param callable $startHandler A start handler to register
62
     * @param callable $stopHandler  A stop handler to register
63
     */
64
    public function __construct(callable $startHandler, callable $stopHandler)
65
    {
66
        $this->startHandler = $startHandler;
67
        $this->stopHandler = $stopHandler;
68
    }
69
70
    /**
71
     * @return callable
72
     */
73
    public function __invoke()
74
    {
75
        return $this->tap();
76
    }
77
78
    /**
79
     * @return callable
80
     */
81
    public function tap()
82
    {
83
        return \GuzzleHttp\Middleware::tap($this->startHandler, $this->stopHandler);
84
    }
85
}
86