beryl

Action-focused HTTP routing library
HEAD Latest release released
luislavena/beryl
20 2
Luis Lavena

Beryl

Build Status

Action-focused HTTP routing library for Crystal

Description

Beryl aims to be a small HTTP routing library with focus on direct mapping between route paths and their respective actions.

Both Router and Action design give certain flexibility for testing each component individually.

It leverages on Crystal's HTTP library and allows you to integrate it with other middleware to build your final stack.

Installation

Add it to your project's shard.yml file:

dependencies:
  beryl:
    github: luislavena/beryl

Usage

The following example presents a simpler Router that maps the root element of a request (/) to a specific Action.

class Hello < Beryl::Action
  def call(params)
    HTTP::Response.ok "text/plain", "Hello world!"
  end
end

class App < Beryl::Router
  routing do
    get "/", Hello
  end
end

We assume you understand how to use HTTP::Server and are comfortable with using and building HTTP::Request and HTTP::Response respectively.

You can now place an instance of App on your HTTP middleware or be the single one handler in your stack:

server = HTTP::Server.new(8080, App.new)
server.listen

Or combine with others:

stack = [
  HTTP::LogHandler.new,
  App.new
]

server = HTTP::Server.new(8080, stack)
server.listen

You can see other examples in the samples/ directory.

Radix Tree implementation

This project implement a Radix tree to perform route matching.

This has been inspired and adapted from julienschmidt/httprouter and spriet2000/vertx-http-router Go and Java implementations, respectively.

Changes to logic and optimizations have been made to take advantage of Crystal's features.

Development

  • [x] HTTP Handler integration
  • [x] Path/Query parameter extraction
  • [x] Router/Route/Action initial design
  • [ ] Nested routers (ie. resource specific mappings)
  • [ ] Optional Response helpers for Action (eg. html, json)
  • [ ] Optional conditional rendering (eg. stale, etag, last_modified)

Contributing

  1. Fork it ( https://github.com/luislavena/crystal-beryl/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

beryl:
  github: luislavena/beryl
  
License MIT
Crystal none

Authors

Dependencies 0

Development Dependencies 0

Dependents 0

Last synced .
search fire star recently