lucky_router

The router for the Lucky framework, can be used outside Lucky
0.1.8 Yanked release released
luckyframework/router
22 8 3
Lucky

route.cr

Build Status Dependency Status devDependency Status GitHub release

The default web server of the Crystal is quite good but it weak at routing. Kemal is an awesome defacto standard web framework for Crystal, but it's too fat for some purpose.

route.cr is a minimum but powerful High Performance middleware for Crystal web server. See the amazing performance of route.cr here

Installation

Add this to your application's shard.yml:

dependencies:
  route:
    github: tbrand/route.cr

Usage

Basic usage

require "route"

Include Route to utilize this.

class WebServer
  include Route
end

In the following sample codes, class WebServer ... end will be omitted. Initialize RouteHandler

@route_handler = RouteHandler.new

To define API, call API.new with context and params(optional) where context is HTTP::Server::Context and params is Hash(String, String). All APIs have to return the context. In this example, params is omitted. (The usage of params is later)

@index = API.new do |context|
  context.response.print "Hello route.cr"
  context
end

Define your routes in a draw block.

draw(@route_handler) do
  get "/", @index
end

To activate the routes

def run
  server = HTTP::Server.new(3000, @route_handler)
  server.listen
end

Finally, run your server.

web_server = WebServer.new
web_server.run

See sample for details.

Path parameters

params is a Hash(String, String) that is used when you define a path including parameters such as "/user/:id" (:id is a parameters). Here is an example.

class WebServer
  @route_handler = RouteHandler.new

  @user = API.new do |context, params|
    context.response.print params["id"] # get :id in url from params
    context
  end

  def initialize
    draw(@route_handler) do
      get "/user/:id", @user
    end
  end
end

See sample for details.

Rendering views(.ecr)

route.cr also support simple rendering function to render .ecr file with parameters. First, define your view like

def_view :view_sample, "sample/public/hello.ecr", name: String, num: Int32

where "sample/public/hello.ecr" is

My name is <%= @name %>. The number is <%= @num %>.

:view_sample is an identifier of the view. "sample/public/hello.ecr" is a relative path to the file. name and num are parameters used in "sample/public/hello.ecr". Note that these parameters have to be class variables in the file. See here. When you render them, just call render_view like

context.response.print render_view(:view_sample, "tbrand", 10)

See sample for details.

Get profiles

route.cr also serves ProfileHandler. By using this, you can easily get the access data like

[ GET /one ]        Access: 10          Total: 704.0µs      Ave: 70.4µs
[ GET /two ]        Access: 9           Total: 309.0µs      Ave: 34.3µs
[ GET /three ]      Access: 9           Total: 262.0µs      Ave: 29.1µs

For this, just set ProfileHandler to your server like

server = HTTP::Server.new(3000, [ProfileHandler.new, @route_handler])

After running your server, try accessing "/profile".

See sample for details.

Contributing

  1. Fork it ( https://github.com/tbrand/route.cr/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • tbrand Taichiro Suzuki - creator, maintainer
lucky_router:
  github: luckyframework/router
  version: ~> 0.1.8
License MIT
Crystal 0.21.1

Authors

Dependencies 1

  • radix
    {'github' => 'luislavena/radix'}

Development Dependencies 0

Dependents 2

Last synced .
search fire star recently