Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module RestfulScaffold
- def self.included(controller)
- controller.extend ClassMethods
- end
- module ClassMethods
- def gen_rest_methods(table_name, *args)
- model = table_name.to_s.classify.constantize
- singular = table_name.to_s.singularize
- plural = table_name.to_s
- define_method :standard_respond_to do |instance_variable|
- respond_to do |format|
- format.html
- format.xml { render :xml => self.instance_variable_get("@#{instance_variable}") }
- end
- end
- define_method :index do
- self.instance_variable_set("@#{plural}", model.find(:all))
- standard_respond_to(plural)
- end
- define_method :show do
- self.instance_variable_set("@#{singular}", model.find(params[:id]))
- standard_respond_to(singular)
- end
- define_method :new do
- self.instance_variable_set("@#{singular}", model.new)
- standard_respond_to(singular)
- end
- define_method :edit do
- self.instance_variable_set("@#{singular}", model.find(params[:id]))
- end
- define_method :create do
- self.instance_variable_set("@#{singular}", model.new(params["#{singular}"]))
- respond_to do |format|
- if self.instance_variable_get("@#{singular}").save
- flash[:notice] = "#{model} was successfully created."
- format.html { redirect_to(self.instance_variable_get("@#{singular}")) }
- format.xml { render :xml => self.instance_variable_get("@#{singular}"),
- :status => :created,
- :location => self.instance_variable_get("@#{singular}") }
- else
- format.html { render :action => "new" }
- format.xml { render :xml => self.instance_variable_get("@#{singular}").errors, :status => :unprocessable_entity }
- end
- end
- end
- define_method :update do
- self.instance_variable_set("@#{singular}", model.find(params[:id]))
- respond_to do |format|
- if self.instance_variable_get("@#{singular}").update_attributes(params["#{singular}"])
- flash[:notice] = "#{model.humanize} was successfully updated."
- format.html { redirect_to(self.instance_variable_get("@#{singular}")) }
- format.xml { head :ok }
- else
- format.html { render :action => "edit" }
- format.xml { render :xml => self.instance_variable_get("@#{singular}").errors, :status => :unprocessable_entity }
- end
- end
- end
- define_method :destroy do
- self.instance_variable_set("@#{singular}", model.find(params[:id]))
- self.instance_variable_get("@#{singular}").destroy
- respond_to do |format|
- format.html { redirect_to(eval("#{plural}_url")) }
- format.xml { head :ok }
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment