Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
HttpMethod
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
7 / 7
9
100.00% covered (success)
100.00%
1 / 1
 label
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
 isSafe
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isIdempotent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 allowsBody
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 labelList
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 toArrayWithLabels
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace DevToolbelt\Enums\Http;
6
7use DevToolbelt\Enums\EnumInterface;
8
9enum HttpMethod: string implements EnumInterface
10{
11    case GET = 'GET';
12    case POST = 'POST';
13    case PUT = 'PUT';
14    case PATCH = 'PATCH';
15    case DELETE = 'DELETE';
16    case HEAD = 'HEAD';
17    case OPTIONS = 'OPTIONS';
18    case CONNECT = 'CONNECT';
19    case TRACE = 'TRACE';
20
21    public function label(): string
22    {
23        return match ($this) {
24            self::GET => 'GET - Retrieve a resource',
25            self::POST => 'POST - Create a new resource',
26            self::PUT => 'PUT - Update/Replace a resource',
27            self::PATCH => 'PATCH - Partial update a resource',
28            self::DELETE => 'DELETE - Remove a resource',
29            self::HEAD => 'HEAD - Retrieve headers only',
30            self::OPTIONS => 'OPTIONS - Describe communication options',
31            self::CONNECT => 'CONNECT - Establish a tunnel',
32            self::TRACE => 'TRACE - Perform a message loop-back test',
33        };
34    }
35
36    public function isSafe(): bool
37    {
38        return in_array($this, [self::GET, self::HEAD, self::OPTIONS, self::TRACE], true);
39    }
40
41    public function isIdempotent(): bool
42    {
43        return in_array($this, [self::GET, self::HEAD, self::PUT, self::DELETE, self::OPTIONS, self::TRACE], true);
44    }
45
46    public function allowsBody(): bool
47    {
48        return in_array($this, [self::POST, self::PUT, self::PATCH, self::DELETE], true);
49    }
50
51    /**
52     * @return string[]
53     */
54    public function labelList(): array
55    {
56        return array_map(fn (self $case) => $case->label(), self::cases());
57    }
58
59    /**
60     * @return array<string, string>
61     */
62    public static function toArray(): array
63    {
64        $result = [];
65
66        foreach (self::cases() as $method) {
67            $result[$method->value] = $method->value;
68        }
69
70        return $result;
71    }
72
73    /**
74     * @return array<string, string>
75     */
76    public static function toArrayWithLabels(): array
77    {
78        $result = [];
79
80        foreach (self::cases() as $method) {
81            $result[$method->value] = $method->label();
82        }
83
84        return $result;
85    }
86}