SinatraSimpleRouter
Simple routing abstraction for Sinatra applications.
Installation
Add this line to your application's Gemfile:
gem 'sinatra_simple_router'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sinatra_simple_router
Usage
require "sinatra"
require "sinatra_simple_router"
class OrdersController
def initialize(app)
@app = app
end
def show
@order = Order.find(params[:id])
@app.content_type "application/json"
@app.body @order.to_json
end
end
class Application < Sinatra::Base
include SinatraSimpleRouter
match :get, "/orders/:id.json", OrdersController, :show
end
SinatraSimpleRouter::Controller
class ItemsController < SinatraSimpleRouter::Controller
def show
@item = Item.find(params[:id])
render json: @item
end
end
class Application < Sinatra::Base
include SinatraSimpleRouter
match :get, "/items/:id.json", ItemsController, :show
end
Versioning URLs
require "sinatra"
require "sinatra_simple_router"
class V1::ItemsController < SinatraSimpleRouter::Controller
def show
@item = Item.find(params[:id])
render json: @item
end
end
class V2::ItemsController < SinatraSimpleRouter::Controller
def show
@item = Item.find(params[:id])
render json: ItemDecorator.new(@item).to_json
end
end
class Application < Sinatra::Base
include SinatraSimpleRouter
# maps '/v1/items/:id.json' to V1::ItemsController
version :v1 do
match :get, "/items/:id.json", V1::ItemsController, :show
end
# maps '/v2/items/:id.json' to V2::ItemsController
version :v2 do
match :get, "/items/:id.json", V2::ItemsController, :show
end
end
Rescue exceptions raised in controllers
class ItemsController < SinatraSimpleRouter::Controller
def create
@item = Item.new(params[:item])
@item.save!
render json: @item
end
end
class Application < Sinatra::Base
include SinatraSimpleRouter
rescue_exception MongoMapper::DocumentNotValid do |exception, controller|
controller.render json: {error: exception.document.errors}, status: 400
end
match :post, "/items.json", ItemsController, :create
end
Contributing
- Fork it
- 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 new Pull Request