diff --git a/spec/route_spec.cr b/spec/route_spec.cr index e2b8e5b..f22220e 100644 --- a/spec/route_spec.cr +++ b/spec/route_spec.cr @@ -1,7 +1,7 @@ require "./spec_helper" describe "Route" do - describe "match" do + describe "match?" do it "doesn't match because of route" do route = Route.new("GET", "/foo/bar") { "" } request = HTTP::Request.new("GET", "/world?message=coco") @@ -20,5 +20,18 @@ describe "Route" do match = route.match?(request) match.should eq true end + + it "matches the correct route" do + kemal = Kemal::Handler.new + kemal.add_route "GET", "/route1" do |env| + "Route 1" + end + kemal.add_route "GET", "/route2" do |env| + "Route 2" + end + request = HTTP::Request.new("GET", "/route2") + response = kemal.call(request) + response.body.should eq("Route 2") + end end end diff --git a/src/kemal/handler.cr b/src/kemal/handler.cr index fc8ba05..f18e2bc 100644 --- a/src/kemal/handler.cr +++ b/src/kemal/handler.cr @@ -23,7 +23,7 @@ class Kemal::Handler < HTTP::Handler match = route.match?(request) if match params = Kemal::ParamParser.new(route, request).parse - context = Context.new(request, params.not_nil!) + context = Context.new(request, params) begin body = route.handler.call(context).to_s return HTTP::Response.new(context.status_code, body, context.response_headers) diff --git a/src/kemal/route.cr b/src/kemal/route.cr index 573dcae..205ce93 100644 --- a/src/kemal/route.cr +++ b/src/kemal/route.cr @@ -13,6 +13,11 @@ class Kemal::Route components = request.path.not_nil!.split "/" return nil unless request.method == @method return nil unless components.size == @components.size + @components.zip(components) do |route_component, req_component| + unless route_component.starts_with? ':' + return nil unless route_component == req_component + end + end true end end