From fdaea85856a6a9c288b5df964a10800abaa2acaf Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Feb 2017 17:33:17 +0200 Subject: [PATCH] extended classes --- app/library/App/Mvc/ExtendedApiEndpoint.php | 402 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 386 insertions(+), 16 deletions(-) diff --git a/app/library/App/Mvc/ExtendedApiEndpoint.php b/app/library/App/Mvc/ExtendedApiEndpoint.php index 295808e..22de6c9 100644 --- a/app/library/App/Mvc/ExtendedApiEndpoint.php +++ b/app/library/App/Mvc/ExtendedApiEndpoint.php @@ -1,37 +1,407 @@ path = $path; + $this->httpMethod = $httpMethod; + $this->handlerMethod = $handlerMethod; + } + + /** + * Returns pre-configured all endpoint + * + * @return static + */ + public static function all() + { + return self::factory('/', HttpMethods::GET, 'all') + ->name(self::ALL) + ->description('Returns all items'); + } + + /** + * @param string $description Description for the endpoint + * + * @return static + */ + public function description($description) + { + $this->description = $description; + return $this; + } + + /** + * @param string $name Name for the endpoint + * + * @return static + */ + public function name($name) + { + $this->name = $name; + return $this; + } + + /** + * Returns endpoint with default values + * + * @param string $path + * @param string $httpMethod + * @param string $handlerMethod + * + * @return static + */ + public static function factory($path, $httpMethod = HttpMethods::GET, $handlerMethod = null) + { + return new ExtendedApiEndpoint($path, $httpMethod, $handlerMethod); + } + + /** + * Returns pre-configured find endpoint + * + * @return static + */ + public static function find() + { + return self::factory('/{id}', HttpMethods::GET, 'find') + ->name(self::FIND) + ->description('Returns the item identified by {id}'); + } + + /** + * Returns pre-configured create endpoint + * + * @return static + */ + public static function create() + { + return self::factory('/', HttpMethods::POST, 'create') + ->name(self::CREATE) + ->description('Creates a new item using the posted data'); + } + + /** + * Returns pre-configured update endpoint + * + * @return static + */ + public static function update() + { + return self::factory('/{id}', HttpMethods::PUT, 'update') + ->name(self::UPDATE) + ->description('Updates an existing item identified by {id}, using the posted data'); + } + + /** + * Returns pre-configured remove endpoint + * + * @return static + */ + public static function remove() + { + return self::factory('/{id}', HttpMethods::DELETE, 'remove') + ->name(self::REMOVE) + ->description('Removes the item identified by {id}'); + } + + /** + * Returns pre-configured GET endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function get($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::GET, $handlerMethod); + } + + /** + * Returns pre-configured POST endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function post($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::POST, $handlerMethod); + } + + /** + * Returns pre-configured PUT endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function put($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::PUT, $handlerMethod); + } + + /** + * Returns pre-configured DELETE endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function delete($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::DELETE, $handlerMethod); + } + + /** + * Returns pre-configured HEAD endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function head($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::HEAD, $handlerMethod); + } + + /** + * Returns pre-configured OPTIONS endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function options($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::OPTIONS, $handlerMethod); + } + + /** + * Returns pre-configured PATCH endpoint + * + * @param $path + * @param string $handlerMethod + * + * @return ExtendedApiEndpoint + */ + public static function patch($path, $handlerMethod = null) + { + return self::factory($path, HttpMethods::PATCH, $handlerMethod); + } + + /** + * @return string Unique identifier for this endpoint (returns a combination of the HTTP method and the path) + */ + public function getIdentifier() + { + return $this->getHttpMethod() . ' ' . $this->getPath(); + } + + /** + * @return string HTTP method of the endpoint + */ + public function getHttpMethod() + { + return $this->httpMethod; + } + + /** + * @return string Path of the endpoint, relative to the collection + */ + public function getPath() + { + return $this->path; + } /** - * @param string $exampleRequest Example of the request of the endpoint + * @param string $handlerMethod Name of controller-method to be called for the endpoint + * + * @return static + */ + public function handlerMethod($handlerMethod) + { + $this->handlerMethod = $handlerMethod; + return $this; + } + + /** + * @return string Name of controller-method to be called for the endpoint + */ + public function getHandlerMethod() + { + return $this->handlerMethod; + } + + /** + * @return string|null Name of the endpoint + */ + public function getName() + { + return $this->name; + } + + /** + * @return string Description for the endpoint + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $exampleResponse Example of the response of the endpoint * * @return $this */ - public function exampleRequest($exampleRequest) + public function exampleResponse($exampleResponse) { - $this->exampleRequest = $exampleRequest; + $this->exampleResponse = $exampleResponse; return $this; } /** - * @return string Example of the request of the endpoint + * @return string Example of the response of the endpoint + */ + public function getExampleResponse() + { + return $this->exampleResponse; + } + + /** + * @return string $method One of the method constants defined in PostedDataMethods */ - public function getExampleRequest() + public function getPostedDataMethod() { - return $this->exampleRequest; + return $this->postedDataMethod; } -} \ No newline at end of file + /** + * Sets the posted data method to POST + * + * @return static + */ + public function expectsPostData() + { + $this->postedDataMethod(PostedDataMethods::POST); + return $this; + } + + /** + * @param string $method One of the method constants defined in PostedDataMethods + * + * @return static + */ + public function postedDataMethod($method) + { + $this->postedDataMethod = $method; + return $this; + } + + /** + * Sets the posted data method to JSON_BODY + * + * @return static + */ + public function expectsJsonData() + { + $this->postedDataMethod(PostedDataMethods::JSON_BODY); + return $this; + } + + /** + * Allows access to this endpoint for role with the given names. + * + * @param ...array $roleNames Names of the roles to allow + * + * @return static + */ + public function allow() + { + $roleNames = func_get_args(); + + // Flatten array to allow array inputs + $roleNames = Core::array_flatten($roleNames); + + foreach ($roleNames as $role) { + + if (!in_array($role, $this->allowedRoles)) { + $this->allowedRoles[] = $role; + } + } + + return $this; + } + + /** + * @return string[] Array of allowed role-names + */ + public function getAllowedRoles() + { + return $this->allowedRoles; + } + + /** + * Denies access to this endpoint for role with the given names. + * + * @param ...array $roleNames Names of the roles to allow + * + * @return static + */ + public function deny() + { + $roleNames = func_get_args(); + + // Flatten array to allow array inputs + $roleNames = Core::array_flatten($roleNames); + + foreach ($roleNames as $role) { + + if (!in_array($role, $this->deniedRoles)) { + $this->deniedRoles[] = $role; + } + } + + return $this; + } + + /** + * @return string[] Array of denied role-names + */ + public function getDeniedRoles() + { + return $this->deniedRoles; + } +} -- libgit2 0.21.4