Skip to content

Instantly share code, notes, and snippets.

@kuon
Created December 10, 2010 16:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kuon/736392 to your computer and use it in GitHub Desktop.
Save kuon/736392 to your computer and use it in GitHub Desktop.
class RESTController < ApplicationController
rescue_from 'Acl9::AccessDenied', :with => :access_denied
respond_to :json
@@json_show_options = {}
@@json_list_options = {}
def self.set_json_show_options opts
@@json_show_options = opts
end
def self.set_json_list_options opts
@@json_list_options = opts
end
def self.set_json_options opts
set_json_show_options opts
set_json_list_options opts
end
def self.set_model m
@@model = m
end
def index
objects = @@model.all(:order => params[:order],
:limit => params[:limit],
:offset => params[:offset])
respond_to do |format|
format.json { render :json => objects.to_json(@@json_list_options) }
format.xml { render :xml => objects}
end
end
def show
object = @@model.find params[:id]
respond_to do |format|
format.xml { render :xml => object}
format.json { render :json => object.to_json(@@json_show_options) }
end
end
def create
o = @@model.new
respond_to do |format|
if o.update_attributes params
#o = @@model.find o.id # Can't remember why this was needed
format.xml { render :xml => o,
:status => :created,
:location => o }
format.json { render :json => o.to_json(@@json_show_options),
:status => :created,
:location => o }
else
format.xml { render :xml => o.errors,
:status => :unprocessable_entity }
format.json { render :json => o.errors,
:status => :unprocessable_entity }
end
end
end
def update
o = @@model.find params[:id]
respond_to do |format|
if o.update_attributes params
format.xml { render :xml => o,
:status => :ok,
:location => o }
format.json { render :json => o.to_json(@@json_show_options),
:status => :ok,
:location => o }
else
format.xml { render :xml => o.errors,
:status => :unprocessable_entity }
format.json { render :json => o.errors,
:status => :unprocessable_entity }
end
end
end
def destroy
o = @@model.find params[:id]
respond_to do |format|
if o.destroy
format.xml { render :xml => "ok".to_xml, :status => :ok }
format.json { render :json => "ok".to_json, :status => :ok }
else
format.xml { render :xml => "Cannot delete object".to_xml,
:status => :forbidden }
format.json { render :json => "Cannot delete object".to_json,
:status => :forbidden }
end
end
end
private
def access_denied
if current_user
flash[:error] = t(:access_denied)
respond_to do |format|
format.html { redirect_back_or_default "/access_denied" }
format.xml { render :xml => {:error => t(:access_denied)}.to_xml, :status => :forbidden}
format.json { render :json => {:error => t(:access_denied)}.to_json, :status => :forbidden }
end
else
flash[:error] = t(:login_required)
respond_to do |format|
format.html { redirect_back_or_default "/login" }
format.xml { render :xml => {:error => t(:login_required)}.to_xml, :status => :forbidden}
format.json { render :json => {:error => t(:login_required)}.to_json, :status => :forbidden }
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment