Action-focused HTTP routing library for Crystal
Beryl aims to be a small HTTP routing library with focus on direct mapping between route paths and their respective actions.
Action design give certain flexibility for testing each
It leverages on Crystal's HTTP library and allows you to integrate it with other middleware to build your final stack.
Add it to your project's shard.yml file:
dependencies: beryl: github: luislavena/beryl
The following example presents a simpler
Router that maps the root element of
a request (
/) to a specific
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
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.
Changes to logic and optimizations have been made to take advantage of Crystal's features.
- [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)
- Fork it ( https://github.com/luislavena/crystal-beryl/fork )
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create a new Pull Request
- Luis Lavena - creator, maintainer