Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Think resource_controller, except for sinatra.

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.rdoc
Octocat-spinner-32 Rakefile
Octocat-spinner-32 VERSION.yml
Octocat-spinner-32 classy_resources.gemspec

Classy Resources

With a simple, declarative syntax, you can create active_resource compatible REST APIs incredibly quickly.

Think resource_controller, except for Sinatra.


sudo gem install giraffesoft-classy_resources


require 'rubygems'
require 'sinatra'
require 'classy_resources'
require 'classy_resources/active_record'
# ... or require 'classy_resources/sequel'
# more ORMs coming (it's also easy to implement your own)...

define_resource :posts, :member     => [:get, :put, :delete],
                        :collection => [:get, :post],
                        :formats    => [:xml, :json, :yaml]

The above declaration will create the five actions specified, each responding to all of the formats listed.

- GET /resources.format      # => index
- POST /resources.format     # => create
- GET /resources/1.format    # => show
- PUT /resources/1.format    # => update
- DELETE /resources/1.format # => destroy

Since ClassyResources was designed to be active resource compatible, the params formats and return values are what AR expects.


In the above example, :posts would map to a Post class. If your class is named differently, you just override class_for. For example, if your Post class was stored in a module:

def class_for(resource)

Or, if you wanted to change how objects were being serialized:

def serialize(object, format), format).to_s

Other method signatures you might want to override:

- def load_collection(resource)
- def build_object(resource, params)
- def load_object(resource, id)
- def update_object(object, params) # Note that this doesn't save. It just changes the attributes.
- def destroy_object(object)


Copyright © 2008 James Golick, Daniel Haran, GiraffeSoft Inc.. See LICENSE for details.

Something went wrong with that request. Please try again.