Adding method for doing browser redirection from inside any route.

Made some small changes
This commit is contained in:
Imran Latif 2015-12-05 02:20:49 +05:00
parent d25a611fbd
commit cd69a866d5
3 changed files with 27 additions and 0 deletions

View File

@ -119,6 +119,17 @@ Accessing the environment (query params, body, content_type, headers, status_cod
end
```
### Browser Redirect
Just like other things in `kemal`, browser redirection is super simple as well. Use `environment` variable in defined route's corresponding block and call `redirect` on it.
```ruby
# Redirect browser
get "/logout" do |env|
# important stuff like clearing session etc.
env.redirect "/login" # redirect to /login page
end
```
## Middlewares
You can create your own middlewares by inheriting from ```HTTP::Handler```

View File

@ -184,4 +184,15 @@ describe "Kemal::Handler" do
response.status_code.should eq(404)
end
it "redirects user to provided url" do
kemal = Kemal::Handler.new
kemal.add_route "GET", "/" do |env|
env.redirect("/login")
end
request = HTTP::Request.new("GET", "/")
response = kemal.call(request)
response.status_code.should eq(301)
response.headers.has_key?("Location").should eq(true)
end
end

View File

@ -22,6 +22,11 @@ class Kemal::Context
@response.content_type
end
def redirect(url)
@response.headers.add "Location", url
@response.status_code = 301
end
delegate headers, @request
delegate status_code, @response
delegate :"status_code=", @response