Route_Factory::patch()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Factory to create routes for a namespace
7
 *
8
 * @package PinkCrab\Route\Route
9
 * @author Glynn Quelch [email protected]
10
 * @since 0.0.1
11
 */
12
13
namespace PinkCrab\Route;
14
15
use PinkCrab\Route\Route\Route;
16
use PinkCrab\Route\Route\Route_Group;
17
18
19
class Route_Factory {
20
21
	protected string $namespace;
22
23
	public function __construct( string $namespace ) {
24
		$this->namespace = $namespace;
25
	}
26
27
	/**
28
	 * Static constructor.
29
	 *
30
	 * @param string $namespace
31
	 * @return Route_Factory
32
	 */
33
	public static function for( string $namespace ): Route_Factory {
34
		return new self( $namespace );
35
	}
36
37
	/**
38
	 * Creates a request
39
	 *
40
	 * @param string $method
41
	 * @param string $route
42
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
43
	 * @return Route
44
	 */
45
	protected function request( string $method, string $route, callable $callback ): Route {
46
		$route = new Route( $method, $route );
47
		return $route
48
			->callback( $callback )
49
			->namespace( $this->namespace );
50
	}
51
52
	/**
53
	 * Creates a get request route with the defined namespace.
54
	 *
55
	 * @param string $route
56
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
57
	 * @return Route
58
	 */
59
	public function get( string $route, callable $callback ): Route {
60
		return $this->request( Route::GET, $route, $callback );
61
	}
62
63
	/**
64
	 * Creates a post request route with the defined namespace.
65
	 *
66
	 * @param string $route
67
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
68
	 * @return Route
69
	 */
70
	public function post( string $route, callable $callback ): Route {
71
		return $this->request( Route::POST, $route, $callback );
72
	}
73
74
	/**
75
	 * Creates a put request route with the defined namespace.
76
	 *
77
	 * @param string $route
78
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
79
	 * @return Route
80
	 */
81
	public function put( string $route, callable $callback ): Route {
82
		return $this->request( Route::PUT, $route, $callback );
83
	}
84
85
	/**
86
	 * Creates a patch request route with the defined namespace.
87
	 *
88
	 * @param string $route
89
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
90
	 * @return Route
91
	 */
92
	public function patch( string $route, callable $callback ): Route {
93
		return $this->request( Route::PATCH, $route, $callback );
94
	}
95
96
	/**
97
	 * Creates a delete request route with the defined namespace.
98
	 *
99
	 * @param string $route
100
	 * @param callable(\WP_REST_Request): (\WP_HTTP_Response|\WP_Error) $callback
101
	 * @return Route
102
	 */
103
	public function delete( string $route, callable $callback ): Route {
104
		return $this->request( Route::DELETE, $route, $callback );
105
	}
106
107
	/**
108
	 * Allows the building of a group.
109
	 *
110
	 * @param string $route
111
	 * @param ?callable(Route_Group): void $config
112
	 * @return Route_Group
113
	 */
114
	public function group_builder( string $route, ?callable $config ): Route_Group {
115
		$group = new Route_Group( $this->namespace, $route );
116
117
		// Apply the callback.
118
		if ( ! is_null( $config ) ) {
119
			$config( $group );
120
		}
121
122
		return $group;
123
	}
124
}
125