Removed env from redirect and changed redirect from method to macro.
Removed `env.redirect` in-favor of `redirect` in-order to make Kemal's API look more like Sinatra. Thanks @sdogruyol and @f for introducing me to macros :-). Binding HTTP::Server to 0.0.0.0
This commit is contained in:
parent
d825b2316a
commit
4d1e31cb41
|
@ -128,9 +128,10 @@ Just like other things in `kemal`, browser redirection is super simple as well.
|
||||||
# Redirect browser
|
# Redirect browser
|
||||||
get "/logout" do |env|
|
get "/logout" do |env|
|
||||||
# important stuff like clearing session etc.
|
# important stuff like clearing session etc.
|
||||||
env.redirect "/login" # redirect to /login page
|
redirect "/login" # redirect to /login page
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
_Make sure to receive `env` as param in defined route's block or you might end-up having compile-time errors._
|
||||||
|
|
||||||
## Middlewares
|
## Middlewares
|
||||||
|
|
||||||
|
|
|
@ -187,7 +187,7 @@ describe "Kemal::Handler" do
|
||||||
it "redirects user to provided url" do
|
it "redirects user to provided url" do
|
||||||
kemal = Kemal::Handler.new
|
kemal = Kemal::Handler.new
|
||||||
kemal.add_route "GET", "/" do |env|
|
kemal.add_route "GET", "/" do |env|
|
||||||
env.redirect("/login")
|
redirect "/login"
|
||||||
end
|
end
|
||||||
request = HTTP::Request.new("GET", "/")
|
request = HTTP::Request.new("GET", "/")
|
||||||
response = kemal.call(request)
|
response = kemal.call(request)
|
||||||
|
|
12
src/kemal.cr
12
src/kemal.cr
|
@ -9,6 +9,9 @@ at_exit do
|
||||||
opts.on("-e ", "--environment ", "environment") do |env|
|
opts.on("-e ", "--environment ", "environment") do |env|
|
||||||
Kemal.config.env = env
|
Kemal.config.env = env
|
||||||
end
|
end
|
||||||
|
opts.on("-w VALUE", "--workers", "workers") do |workers|
|
||||||
|
Kemal.config.workers = workers.to_i
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
config = Kemal.config
|
config = Kemal.config
|
||||||
|
@ -23,7 +26,6 @@ at_exit do
|
||||||
|
|
||||||
Signal::INT.trap {
|
Signal::INT.trap {
|
||||||
logger.write "Kemal is going to take a rest!\n"
|
logger.write "Kemal is going to take a rest!\n"
|
||||||
logger.write "#{Time.now} - Bye Bye!\n\n"
|
|
||||||
logger.handler.close
|
logger.handler.close
|
||||||
server.close
|
server.close
|
||||||
exit
|
exit
|
||||||
|
@ -37,5 +39,11 @@ at_exit do
|
||||||
File.read(file_path)
|
File.read(file_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
server.listen
|
workers = Kemal.config.workers
|
||||||
|
if workers > 1
|
||||||
|
logger.write "Kemal is starting with #{workers} workers!"
|
||||||
|
server.listen_fork workers: workers
|
||||||
|
else
|
||||||
|
server.listen
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,10 +5,12 @@ module Kemal
|
||||||
property ssl
|
property ssl
|
||||||
property port
|
property port
|
||||||
property env
|
property env
|
||||||
|
property workers
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@port = 3000
|
@port = 3000
|
||||||
@env = "development" unless @env
|
@env = "development" unless @env
|
||||||
|
@workers = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
def scheme
|
def scheme
|
||||||
|
|
|
@ -22,11 +22,6 @@ class Kemal::Context
|
||||||
@response.content_type
|
@response.content_type
|
||||||
end
|
end
|
||||||
|
|
||||||
def redirect(url)
|
|
||||||
@response.headers.add "Location", url
|
|
||||||
@response.status_code = 301
|
|
||||||
end
|
|
||||||
|
|
||||||
delegate headers, @request
|
delegate headers, @request
|
||||||
delegate status_code, @response
|
delegate status_code, @response
|
||||||
delegate :"status_code=", @response
|
delegate :"status_code=", @response
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
macro redirect(url)
|
||||||
|
env.response.headers.add "Location", {{url}}
|
||||||
|
env.response.status_code = 301
|
||||||
|
end
|
|
@ -11,7 +11,6 @@ class Kemal::Route
|
||||||
|
|
||||||
def match?(request)
|
def match?(request)
|
||||||
check_for_method_override!(request)
|
check_for_method_override!(request)
|
||||||
|
|
||||||
return nil unless request.override_method == @method
|
return nil unless request.override_method == @method
|
||||||
components = request.path.not_nil!.split "/"
|
components = request.path.not_nil!.split "/"
|
||||||
return nil unless components.size == @components.size
|
return nil unless components.size == @components.size
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Kemal render uses built-in ECR to render methods.
|
# Kemal render uses built-in ECR to render methods.
|
||||||
|
|
||||||
## Usage
|
# # Usage
|
||||||
# get '/' do
|
# get '/' do
|
||||||
# render 'hello.ecr'
|
# render 'hello.ecr'
|
||||||
# end
|
# end
|
||||||
|
|
Loading…
Reference in New Issue