Completed
Push — master ( 495169...b31514 )
by Changwan
10:11
created

CookieJar::get()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 2
nop 3
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php
2
namespace Wandu\Http\Parameters;
3
4
use DateTime;
5
use Psr\Http\Message\ResponseInterface;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Wandu\Http\Contracts\CookieJarInterface;
8
use Wandu\Http\Contracts\ParameterInterface;
9
use Wandu\Http\Cookie\Cookie;
10
11
class CookieJar extends Parameter implements CookieJarInterface
12
{
13
    /** @var \Wandu\Http\Cookie\Cookie[] */
14
    protected $setCookies = [];
15
16
    /**
17
     * @param \Psr\Http\Message\ServerRequestInterface $request
18
     * @param \Wandu\Http\Contracts\ParameterInterface $fallback
19
     */
20 22
    public function __construct(ServerRequestInterface $request, ParameterInterface $fallback = null)
21
    {
22 22
        parent::__construct($request->getCookieParams(), $fallback);
23 22
    }
24
25
    /**
26
     * {@inheritdoc}
27
     */
28 5
    public function toArray()
29
    {
30 5
        $resultToReturn = parent::toArray();
31 5
        foreach ($this->setCookies as $name => $setCookie) {
32 2
            if ($value = $setCookie->getValue()) {
33 1
                $resultToReturn[$name] = $value;
34
            } else {
35 2
                unset($resultToReturn[$name]);
36
            }
37
        }
38 5
        return $resultToReturn;
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44 12
    public function get($name, $default = null, $isStrict = false)
45
    {
46 12
        if (isset($this->setCookies[$name]) && $this->setCookies[$name]->getValue()) {
47 2
            return $this->setCookies[$name]->getValue();
48
        }
49 12
        return parent::get($name, $default, $isStrict);
50
    }
51
52
    /**
53
     * {@inheritdoc}
54
     */
55 4
    public function set($name, $value, DateTime $expire = null)
56
    {
57 4
        $this->setCookies[$name] = new Cookie($name, $value, isset($expire) ? $expire : null);
58 4
        return $this;
59
    }
60
61
    /**
62
     * {@inheritdoc}
63
     */
64 9
    public function has($name)
65
    {
66 9
        if (isset($this->setCookies[$name]) && $this->setCookies[$name]->getValue()) {
67 2
            return true;
68
        }
69 9
        return parent::has($name);
70
    }
71
72
    /**
73
     * {@inheritdoc}
74
     */
75 3
    public function remove($name)
76
    {
77 3
        $this->setCookies[$name] = new Cookie($name);
78 3
        unset($this->params[$name]);
79 3
        return $this;
80
    }
81
82
    /**
83
     * {@inheritdoc}
84
     */
85 1
    public function offsetSet($offset, $value)
86
    {
87 1
        $this->set($offset, $value);
88 1
    }
89
90
    /**
91
     * {@inheritdoc}
92
     */
93 1
    public function offsetUnset($offset)
94
    {
95 1
        $this->remove($offset);
96 1
    }
97
98
    /**
99
     * @param \Psr\Http\Message\ResponseInterface $response
100
     * @return \Psr\Http\Message\ResponseInterface
101
     */
102
    public function applyToResponse(ResponseInterface $response)
103
    {
104
        foreach ($this->setCookies as $cookie) {
105
            $response = $response->withAddedHeader('Set-Cookie', $cookie->__toString());
106
        }
107
        return $response;
108
    }
109
}
110