Popularity
7.2
Declining
Activity
0.0
Stable
55
2
4
Programming language: Crystal
License: MIT License
Tags:
Framework Components
crouter alternatives and similar shards
Based on the "Framework Components" category.
Alternatively, view crouter alternatives based on common mentions on social networks and blogs.
-
motion.cr
Motion is a framework for building reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. -
mochi
Mochi is a authentication shard inspired by devise. Mochi is designed for the Amber framework with support for both Granite & Jennifer ORM's. -
kemal-auth
Shard Crystal d'authentification pour les applications Gaya (JWT + BCrypt + sessions Kemal)
Kargo - Stop Scripting Promotions. Start Shipping with Kargo
Kargo automates promotion across dev, staging, and prod with approval gates and verification. Open source, built by the team behind Argo CD. Download now.
Promo
akuity.io
Do you think we are missing an alternative of crouter or a related project?
README
crouter 
A standalone router for crystal
Features
- route params (also optional and nested optional)
- grouping under a prefix
- handle response with either block or seperate controller
- support for query params (also mixed with route params)
- most errors reveal themselves already at compile time
Benchmark results
Benchmarked with non-trivial route patterns. See [src/benchmark.cr](src/benchmark.cr). Due to performance optimizations compile-time increases with the amount of routes.
requests per second
without router (raw server throughput) 345.02k (± 3.91%) fastest
through router with 32 routes 248.48k (± 3.56%) 1.39× slower
through router with 64 routes 251.07k (± 3.57%) 1.37× slower
through router with 128 routes 126.84k (± 2.49%) 2.72× slower
through router with 256 routes 167.36k (± 3.69%) 2.06× slower
Installation
Add this to your application's shard.yml:
dependencies:
crouter:
github: jreinert/crouter
Usage
require "crouter"
class MyController
private getter context, params
def initialize(@context, @params)
end
def my_action
# do something
context.response << "hi there"
end
end
class MyRouter < Crouter::Router
get "/" do
context.response << "hello world"
end
post "/path/with/:param" do
context.response << "you passed #{params["param"]}"
end
get "/path/with(/optional(/:parts))" do
context.repsonse << "you passed #{params["parts"]? || "nothing"}"
end
put "/handle/with/controller", "MyController#my_action"
group "/group" do
put "/routes", "MyGroupController#my_action"
group "/or/even/:nest" do
post "/them" do
context.response << "with params! #{params["nest"]}"
end
end
end
end
class MyRestAPI < Crouter::Router
group "/posts" do
get "/", "PostsController#index"
get "/:id", "PostsController#show"
get "/:id/edit", "PostsController#edit"
post "/", "PostsController#create"
put "/:id", "PostsController#update"
delete "/:id", "PostsController#delete"
end
end
puts "Listening on http://localhost:8989"
HTTP::Server.new(8989, [HTTP::LogHandler.new, MyRestAPI.new("/api"), MyRouter.new])
Contributing
- Fork it ( https://github.com/jreinert/crouter/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
Contributors
- jreinert Joakim Reinert - creator, maintainer