Guest User

Untitled

a guest
Jan 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. ## lib/expose.rb
  2.  
  3. module Padrino
  4. module Routing
  5. module ClassMethods
  6. def expose(sym,opts={})
  7. klass = sym.to_s.classify.constantize
  8. find_by = opts[:find_by] || :id
  9. default_params = "params[:id] || params[:#{sym.to_s}_id]"
  10. collector = opts[:collect] ? opts[:collect] : "#{klass}.all"
  11. eval <<-EVAL
  12. helpers do
  13. def #{sym.to_s.pluralize}
  14. @#{sym.to_s.pluralize} ||= #{collector}
  15. end
  16. def #{sym.to_s}
  17. @#{sym.to_s} ||= if #{default_params}
  18. #{klass}.first(#{find_by} => #{default_params})
  19. elsif request.post?
  20. #{klass}.create(params[:#{sym.to_s}])
  21. elsif request.put?
  22. #{klass}.update_attributes(params[:#{sym.to_s}])
  23. else
  24. #{klass}.new
  25. end
  26. end
  27. end
  28. EVAL
  29. end
  30. end
  31. end
  32. end
  33.  
  34. ## Usage controllers/pages.rb
  35.  
  36. expose :page, :find_by => :slug, :collect => 'current_site.pages'
  37.  
  38. ## Example RESTful controller in tandem with padrino responders
  39.  
  40. Admin.controllers :pages do
  41.  
  42. before { current_site }
  43. expose :page, :collect => "current_site.pages", :find_by => :slug
  44.  
  45. get :index do respond(pages) end
  46. get :new do respond(page) end
  47. get :edit, :with => :id do respond(page) end
  48. get :show, :with => :id do respond(page) end
  49.  
  50. post :create do
  51. page.save
  52. response = url(:pages, :index, :site_id => params[:site_id])
  53. respond(page,response)
  54. end
  55.  
  56. put :update, :with => :id do
  57. page.update_attributes(params[:page])
  58. response = url(:pages, :index, :site_id => params[:site_id])
  59. respond(page,response)
  60. end
  61.  
  62. delete :destroy, :with => :id do
  63. page.destroy ? flash[:notice] = 'Success!' : flash[:error] = 'Woops!'
  64. redirect(url(:pages, :index))
  65. end
  66.  
  67. end
Add Comment
Please, Sign In to add comment