Guest User

Untitled

a guest
Apr 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. module RestfulScaffold
  2. def self.included(controller)
  3. controller.extend ClassMethods
  4. end
  5.  
  6. module ClassMethods
  7. def gen_rest_methods(table_name, *args)
  8. model = table_name.to_s.classify.constantize
  9. singular = table_name.to_s.singularize
  10. plural = table_name.to_s
  11.  
  12. define_method :standard_respond_to do |instance_variable|
  13. respond_to do |format|
  14. format.html
  15. format.xml { render :xml => self.instance_variable_get("@#{instance_variable}") }
  16. end
  17. end
  18.  
  19. define_method :index do
  20. self.instance_variable_set("@#{plural}", model.find(:all))
  21. standard_respond_to(plural)
  22. end
  23.  
  24. define_method :show do
  25. self.instance_variable_set("@#{singular}", model.find(params[:id]))
  26. standard_respond_to(singular)
  27. end
  28.  
  29. define_method :new do
  30. self.instance_variable_set("@#{singular}", model.new)
  31. standard_respond_to(singular)
  32. end
  33.  
  34. define_method :edit do
  35. self.instance_variable_set("@#{singular}", model.find(params[:id]))
  36. end
  37.  
  38. define_method :create do
  39. self.instance_variable_set("@#{singular}", model.new(params["#{singular}"]))
  40. respond_to do |format|
  41. if self.instance_variable_get("@#{singular}").save
  42. flash[:notice] = "#{model} was successfully created."
  43. format.html { redirect_to(self.instance_variable_get("@#{singular}")) }
  44. format.xml { render :xml => self.instance_variable_get("@#{singular}"),
  45. :status => :created,
  46. :location => self.instance_variable_get("@#{singular}") }
  47. else
  48. format.html { render :action => "new" }
  49. format.xml { render :xml => self.instance_variable_get("@#{singular}").errors, :status => :unprocessable_entity }
  50. end
  51. end
  52. end
  53.  
  54. define_method :update do
  55. self.instance_variable_set("@#{singular}", model.find(params[:id]))
  56. respond_to do |format|
  57. if self.instance_variable_get("@#{singular}").update_attributes(params["#{singular}"])
  58. flash[:notice] = "#{model.humanize} was successfully updated."
  59. format.html { redirect_to(self.instance_variable_get("@#{singular}")) }
  60. format.xml { head :ok }
  61. else
  62. format.html { render :action => "edit" }
  63. format.xml { render :xml => self.instance_variable_get("@#{singular}").errors, :status => :unprocessable_entity }
  64. end
  65. end
  66. end
  67.  
  68. define_method :destroy do
  69. self.instance_variable_set("@#{singular}", model.find(params[:id]))
  70. self.instance_variable_get("@#{singular}").destroy
  71.  
  72. respond_to do |format|
  73. format.html { redirect_to(eval("#{plural}_url")) }
  74. format.xml { head :ok }
  75. end
  76. end
  77.  
  78. end
  79. end
  80. end
Add Comment
Please, Sign In to add comment