Service Crud
The service_crud
gem: A simple mixin for adding crud actions for a RESTful, ActiveResource style service (xml and json).
Requirements
This gem works with Rails 3.
Installation
$ cd /path/to/your/rails3/app
$ echo "gem service_crud" >> Gemfile
$ bundle install
Usage
Let's suppose we have a "Book" model, and we want to create XML and JSON RESTful services for it. Simple:
First, go to your routes.rb file and add the following route:
resources :books
Next, create the following controller in RAILS_ROOT/app/books_controller.rb:
class BooksController
include ServiceCrud
end
That's it. You can now GET, POST, PUT, and DELETE books through the standard RESTful urls.
Callbacks
Sometimes you need to do a little extra work on your data before/after you create/update/destroy. And sometimes that can't be pushed down to the ORM layer.
For example, suppose we want to set the :updated_by
property on our model to the current_user
. We could simply:
class BooksController
include ServiceCrud
before_update :set_updated_by
private
def set_updated_by(model)
model.update_by = current_user
end
end
ServiceCrud supports the following callbacks: before_create
, after_create
, before_update
, after_update
, before_destroy
, and after_destroy
.
Model Guessing
The service_crud
library will look at the controller name and try to guess the model (e.g., "BooksController" -> "Book").
If your controller name doesn't match your model, call the model
method:
class MyBooksController
include ServiceCrud
model Book
end
PUT/POST parameter guessing
Similarly, on POST or PUT, service_crud
assumes that the top-level node of the XML or JSON is the lowercased, underscored, singularized symbol of your model name.
If that's not the case for your service, call the model_attribute_root
class method:
class BooksController
include ServiceCrud
model_attribute_root :my_book
end
ORM
The service_crud
library assumes an ActiveRecord ORM by default. It also, out of the box, supports the couchrest_model
ORM for couchdb.
To use couchrest_model
, simply:
class BooksController
include ServiceCrud
orm_methods! ServiceCrud::CouchRest::Model
end
The default ORM methods are:
module ServiceCrud
module DefaultOrm
def all; :all; end
def new; :new; end
def find; :find; end
def destroy; :destroy; end
def update_attributes; :update_attributes; end
def save; :save; end
end
end
If you're using an ORM other than ActiveRecord or CouchRest::Model, and some or all of your ORM's method names differ from ActiveRecord's,
then simply create a module that redefines one or more DefaultOrm methods. For example, suppose we create our own ORM, MoonOrm
, and our method for finding
records is lookup
instead of find
. Then we'd simply:
module MoonOrmMethods
def find; :lookup; end
end
Then, in our controller:
class BooksController
include ServiceCrud
orm_methods! MoonOrmMethods
end