mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	More docs
This commit is contained in:
		
							parent
							
								
									7a772a9301
								
							
						
					
					
						commit
						596452f838
					
				
					 5 changed files with 57 additions and 54 deletions
				
			
		|  | @ -1,4 +1,7 @@ | |||
| require "http" | ||||
| require "json" | ||||
| require "uri" | ||||
| require "tempfile" | ||||
| require "./kemal/*" | ||||
| require "./kemal/helpers/*" | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,65 +1,70 @@ | |||
| class Kemal::Handler | ||||
|   include HTTP::Handler | ||||
|   @@only_routes_tree = Radix::Tree(String).new | ||||
|   @@exclude_routes_tree = Radix::Tree(String).new | ||||
| module Kemal | ||||
|   # `Kemal::Handler` is a subclass of `HTTP::Handler`. | ||||
|   # It adds `only`, `only_match?`, `exclude`, `exclude_match?`. | ||||
|   # These methods are useful for custom handlers for conditional execution. | ||||
|   class Handler | ||||
|     include HTTP::Handler | ||||
|     @@only_routes_tree = Radix::Tree(String).new | ||||
|     @@exclude_routes_tree = Radix::Tree(String).new | ||||
| 
 | ||||
|   macro only(paths, method = "GET") | ||||
|     macro only(paths, method = "GET") | ||||
|     class_name = {{@type.name}} | ||||
|     {{paths}}.each do |path| | ||||
|       @@only_routes_tree.add "#{class_name}/#{{{method}}.downcase}#{path}", "/#{{{method}}.downcase}#{path}" | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   macro exclude(paths, method = "GET") | ||||
|     macro exclude(paths, method = "GET") | ||||
|     class_name = {{@type.name}} | ||||
|     {{paths}}.each do |path| | ||||
|       @@exclude_routes_tree.add "#{class_name}/#{{{method}}.downcase}#{path}", "/#{{{method}}.downcase}#{path}" | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def call(env) | ||||
|     call_next(env) | ||||
|   end | ||||
|     def call(env) | ||||
|       call_next(env) | ||||
|     end | ||||
| 
 | ||||
|   # Processes the path based on `only` paths which is a `Array(String)`. | ||||
|   # If the path is not found on `only` conditions the handler will continue processing. | ||||
|   # If the path is found in `only` conditions it'll stop processing and will pass the request | ||||
|   # to next handler. | ||||
|   # | ||||
|   # However this is not done automatically. All handlers must inherit from `Kemal::Handler`. | ||||
|   # | ||||
|   #     class OnlyHandler < Kemal::Handler | ||||
|   #       only ["/"] | ||||
|   # | ||||
|   #       def call(env) | ||||
|   #         return call_next(env) unless only_match?(env) | ||||
|   #         puts "If the path is / i will be doing some processing here." | ||||
|   #       end | ||||
|   #     end | ||||
|   def only_match?(env) | ||||
|     @@only_routes_tree.find(radix_path(env.request.method, env.request.path)).found? | ||||
|   end | ||||
|     # Processes the path based on `only` paths which is a `Array(String)`. | ||||
|     # If the path is not found on `only` conditions the handler will continue processing. | ||||
|     # If the path is found in `only` conditions it'll stop processing and will pass the request | ||||
|     # to next handler. | ||||
|     # | ||||
|     # However this is not done automatically. All handlers must inherit from `Kemal::Handler`. | ||||
|     # | ||||
|     #     class OnlyHandler < Kemal::Handler | ||||
|     #       only ["/"] | ||||
|     # | ||||
|     #       def call(env) | ||||
|     #         return call_next(env) unless only_match?(env) | ||||
|     #         puts "If the path is / i will be doing some processing here." | ||||
|     #       end | ||||
|     #     end | ||||
|     def only_match?(env) | ||||
|       @@only_routes_tree.find(radix_path(env.request.method, env.request.path)).found? | ||||
|     end | ||||
| 
 | ||||
|   # Processes the path based on `exclude` paths which is a `Array(String)`. | ||||
|   # If the path is not found on `exclude` conditions the handler will continue processing. | ||||
|   # If the path is found in `exclude` conditions it'll stop processing and will pass the request | ||||
|   # to next handler. | ||||
|   # | ||||
|   # However this is not done automatically. All handlers must inherit from `Kemal::Handler`. | ||||
|   # | ||||
|   #     class ExcludeHandler < Kemal::Handler | ||||
|   #       exclude ["/"] | ||||
|   # | ||||
|   #       def call(env) | ||||
|   #         return call_next(env) if exclude_match?(env) | ||||
|   #         puts "If the path is not / i will be doing some processing here." | ||||
|   #       end | ||||
|   #     end | ||||
|   def exclude_match?(env) | ||||
|     @@exclude_routes_tree.find(radix_path(env.request.method, env.request.path)).found? | ||||
|   end | ||||
|     # Processes the path based on `exclude` paths which is a `Array(String)`. | ||||
|     # If the path is not found on `exclude` conditions the handler will continue processing. | ||||
|     # If the path is found in `exclude` conditions it'll stop processing and will pass the request | ||||
|     # to next handler. | ||||
|     # | ||||
|     # However this is not done automatically. All handlers must inherit from `Kemal::Handler`. | ||||
|     # | ||||
|     #     class ExcludeHandler < Kemal::Handler | ||||
|     #       exclude ["/"] | ||||
|     # | ||||
|     #       def call(env) | ||||
|     #         return call_next(env) if exclude_match?(env) | ||||
|     #         puts "If the path is not / i will be doing some processing here." | ||||
|     #       end | ||||
|     #     end | ||||
|     def exclude_match?(env) | ||||
|       @@exclude_routes_tree.find(radix_path(env.request.method, env.request.path)).found? | ||||
|     end | ||||
| 
 | ||||
|   private def radix_path(method : String, path) | ||||
|     "#{self.class}/#{method.downcase}#{path}" | ||||
|     private def radix_path(method : String, path) | ||||
|       "#{self.class}/#{method.downcase}#{path}" | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| module Kemal | ||||
|   # Kemal::InitHandler is the first handler thus initializes the context with default values such as | ||||
|   # Content-Type, X-Powered-By. | ||||
|   # Kemal::InitHandler is the first handler thus initializes the context with default values. | ||||
|   # Such as *Content-Type*, *X-Powered-By* headers. | ||||
|   class InitHandler | ||||
|     include HTTP::Handler | ||||
|     INSTANCE = new | ||||
|  |  | |||
|  | @ -1,7 +1,3 @@ | |||
| require "json" | ||||
| require "uri" | ||||
| require "tempfile" | ||||
| 
 | ||||
| module Kemal | ||||
|   # ParamParser parses the request contents including query_params and body | ||||
|   # and converts them into a params hash which you can within the environment | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # Opening HTTP::Request to add override_method property | ||||
| class HTTP::Request | ||||
|   property override_method | ||||
|   property url_params : Hash(String, String)? | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue