Sinatra::Resources - Simple nested resources for Sinatra
Ever wished you could do this in Sinatra?
resource 'posts' do
get do
# show all posts
end
post do
# create new post
end
end
resource 'posts/:id' do
get do
# show post params[:id]
end
delete do
# destroy post params[:id]
end
get 'comments' do
# show this post's comments
end
end
Now you can.
This was inspired by Sinatra ticket #31, which many people want but hasn’t gotten traction to make it into Sinatra core. If you want it in Sinatra, pipe up on the ticket!
Installation
Install gemcutter
if you don’t have it:
sudo gem install gemcutter
sudo gem tumble
Then just install this gem:
sudo gem install sinatra-resources
If you are using a classic (one-file) Sinatra app, just add:
require 'sinatra/resources'
If you are using a modular Sinatra::Base app, you must also add:
register Sinatra::Resources
To the top of your application class.
Examples
Resources can be arbitrarily nested, and can be either string paths or symbols. There is also the shortcut member
which just maps to “resource ‘:id’”. So you could also write the above example as:
resource :posts do
get do
# show all posts
end
post do
# create new post
end
member do
get do
# show post params[:id]
end
delete do
# destroy post params[:id]
end
get :comments do
# show this post's comments
end
end
end
Or you can extract the “id” parameter as well:
resource :posts do
get do
# show all posts
end
post do
# create new post
end
member do
get do |id|
# show post ID=id
end
delete do |id|
# destroy post ID=id
end
get :comments do |id|
# show this post's comments
end
end
end
Whatever blows your hair back.
Author
Copyright © 2010 Nate Wiger. All Rights Reserved. Released under the Artistic License.