1 | <?php |
---|
2 | |
---|
3 | class Spy_REST_Server extends WP_REST_Server { |
---|
4 | |
---|
5 | public $sent_headers = array(); |
---|
6 | public $sent_body = ''; |
---|
7 | public $last_request = null; |
---|
8 | public $override_by_default = false; |
---|
9 | public $status = null; |
---|
10 | |
---|
11 | /** |
---|
12 | * Gets the raw $endpoints data from the server. |
---|
13 | * |
---|
14 | * @return array |
---|
15 | */ |
---|
16 | public function get_raw_endpoint_data() { |
---|
17 | return $this->endpoints; |
---|
18 | } |
---|
19 | |
---|
20 | /** |
---|
21 | * Allow calling protected methods from tests. |
---|
22 | * |
---|
23 | * @param string $method Method to call. |
---|
24 | * @param array $args Arguments to pass to the method. |
---|
25 | * @return mixed |
---|
26 | */ |
---|
27 | public function __call( $method, $args ) { |
---|
28 | if ( ! method_exists( $this, $method ) ) { |
---|
29 | throw new Error( sprintf( 'Call to undefined method %s::%s()', get_class( $this ), $method ) ); |
---|
30 | } |
---|
31 | |
---|
32 | return call_user_func_array( array( $this, $method ), $args ); |
---|
33 | } |
---|
34 | |
---|
35 | /** |
---|
36 | * Adds a header to the list of sent headers. |
---|
37 | * |
---|
38 | * @param string $header Header name. |
---|
39 | * @param string $value Header value. |
---|
40 | */ |
---|
41 | public function send_header( $header, $value ) { |
---|
42 | $this->sent_headers[ $header ] = $value; |
---|
43 | } |
---|
44 | |
---|
45 | /** |
---|
46 | * Removes a header from the list of sent headers. |
---|
47 | * |
---|
48 | * @param string $header Header name. |
---|
49 | */ |
---|
50 | public function remove_header( $header ) { |
---|
51 | unset( $this->sent_headers[ $header ] ); |
---|
52 | } |
---|
53 | |
---|
54 | /** |
---|
55 | * Stores last set status. |
---|
56 | * |
---|
57 | * @param int $status HTTP status. |
---|
58 | */ |
---|
59 | public function set_status( $status ) { |
---|
60 | $this->status = $status; |
---|
61 | } |
---|
62 | |
---|
63 | /** |
---|
64 | * Overrides the dispatch method so we can get a handle on the request object. |
---|
65 | * |
---|
66 | * @param WP_REST_Request $request Request to attempt dispatching. |
---|
67 | * @return WP_REST_Response Response returned by the callback. |
---|
68 | */ |
---|
69 | public function dispatch( $request ) { |
---|
70 | $this->last_request = $request; |
---|
71 | return parent::dispatch( $request ); |
---|
72 | } |
---|
73 | |
---|
74 | /** |
---|
75 | * Overrides the register_route method so we can re-register routes internally if needed. |
---|
76 | * |
---|
77 | * @param string $route_namespace Namespace. |
---|
78 | * @param string $route The REST route. |
---|
79 | * @param array $route_args Route arguments. |
---|
80 | * @param bool $override Optional. Whether the route should be overridden if it already exists. |
---|
81 | * Default false. Also set `$GLOBALS['wp_rest_server']->override_by_default = true` |
---|
82 | * to set overrides when you don't have access to the caller context. |
---|
83 | */ |
---|
84 | public function register_route( $route_namespace, $route, $route_args, $override = false ) { |
---|
85 | parent::register_route( $route_namespace, $route, $route_args, $override || $this->override_by_default ); |
---|
86 | } |
---|
87 | |
---|
88 | /** |
---|
89 | * Serves the request and returns the result. |
---|
90 | * |
---|
91 | * @param string $path Optional. The request route. If not set, `$_SERVER['PATH_INFO']` will be used. |
---|
92 | * Default null. |
---|
93 | * @return null|false Null if not served and a HEAD request, false otherwise. |
---|
94 | */ |
---|
95 | public function serve_request( $path = null ) { |
---|
96 | |
---|
97 | ob_start(); |
---|
98 | $result = parent::serve_request( $path ); |
---|
99 | $this->sent_body = ob_get_clean(); |
---|
100 | return $result; |
---|
101 | } |
---|
102 | } |
---|