No description, website, or topics provided.
Ruby
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
.travis.yml
Gemfile
LICENSE.txt
README.md
Rakefile
sinatra_simple_router.gemspec

README.md

SinatraSimpleRouter

Build Status RubyGem

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

  1. Fork it
  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 new Pull Request