mirror of
https://gitea.invidious.io/iv-org/shard-kemal.git
synced 2024-08-15 00:53:36 +00:00
Only / Exclude Paths in Middleware (#245)
Add only / exclude paths in Middlewares
This commit is contained in:
parent
7688bd13a5
commit
ec11698ab1
3 changed files with 159 additions and 1 deletions
|
@ -1,12 +1,52 @@
|
|||
require "./spec_helper"
|
||||
|
||||
class CustomTestHandler < HTTP::Handler
|
||||
class CustomTestHandler < Kemal::Handler
|
||||
def call(env)
|
||||
env.response << "Kemal"
|
||||
call_next env
|
||||
end
|
||||
end
|
||||
|
||||
class OnlyHandler < Kemal::Handler
|
||||
only ["/only"]
|
||||
|
||||
def call(env)
|
||||
return call_next(env) unless only_match?(env)
|
||||
env.response.print "Only"
|
||||
call_next env
|
||||
end
|
||||
end
|
||||
|
||||
class ExcludeHandler < Kemal::Handler
|
||||
exclude ["/exclude"]
|
||||
|
||||
def call(env)
|
||||
return call_next(env) if exclude_match?(env)
|
||||
env.response.print "Exclude"
|
||||
call_next env
|
||||
end
|
||||
end
|
||||
|
||||
class PostOnlyHandler < Kemal::Handler
|
||||
only ["/only", "/route1", "/route2"], "POST"
|
||||
|
||||
def call(env)
|
||||
return call_next(env) unless only_match?(env)
|
||||
env.response.print "Only"
|
||||
call_next env
|
||||
end
|
||||
end
|
||||
|
||||
class PostExcludeHandler < Kemal::Handler
|
||||
exclude ["/exclude"], "POST"
|
||||
|
||||
def call(env)
|
||||
return call_next(env) if exclude_match?(env)
|
||||
env.response.print "Exclude"
|
||||
call_next env
|
||||
end
|
||||
end
|
||||
|
||||
describe "Handler" do
|
||||
it "adds custom handler before before_*" do
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
|
@ -27,4 +67,57 @@ describe "Handler" do
|
|||
client_response.status_code.should eq(200)
|
||||
client_response.body.should eq("Kemal is so Great")
|
||||
end
|
||||
|
||||
it "runs specified only_routes in middleware" do
|
||||
get "/only" do |env|
|
||||
"Get"
|
||||
end
|
||||
add_handler OnlyHandler.new
|
||||
request = HTTP::Request.new("GET", "/only")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq "OnlyGet"
|
||||
end
|
||||
|
||||
it "doesn't run specified exclude_routes in middleware" do
|
||||
get "/" do |env|
|
||||
"Get"
|
||||
end
|
||||
get "/exclude" do
|
||||
"Exclude"
|
||||
end
|
||||
add_handler ExcludeHandler.new
|
||||
request = HTTP::Request.new("GET", "/")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq "ExcludeGet"
|
||||
end
|
||||
|
||||
it "runs specified only_routes with method in middleware" do
|
||||
post "/only" do
|
||||
"Post"
|
||||
end
|
||||
get "/only" do
|
||||
"Get"
|
||||
end
|
||||
add_handler PostOnlyHandler.new
|
||||
request = HTTP::Request.new("POST", "/only")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq "OnlyPost"
|
||||
end
|
||||
|
||||
it "doesn't run specified exclude_routes with method in middleware" do
|
||||
post "/exclude" do
|
||||
"Post"
|
||||
end
|
||||
post "/only" do
|
||||
"Post"
|
||||
end
|
||||
add_handler PostOnlyHandler.new
|
||||
request = HTTP::Request.new("POST", "/only")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq "OnlyPost"
|
||||
add_handler PostExcludeHandler.new
|
||||
request = HTTP::Request.new("POST", "/only")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq "OnlyExcludePost"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue