padrino-admin 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. data/LICENSE +1 -1
  2. data/README.rdoc +64 -11
  3. data/Rakefile +26 -2
  4. data/VERSION +1 -1
  5. data/lib/padrino-admin/access_control.rb +8 -6
  6. data/lib/padrino-admin/adapters/ar.rb +7 -1
  7. data/lib/padrino-admin/adapters/dm.rb +18 -8
  8. data/lib/padrino-admin/adapters.rb +30 -6
  9. data/lib/padrino-admin/ext_js/column_store.rb +142 -0
  10. data/lib/padrino-admin/ext_js/config.rb +139 -125
  11. data/lib/padrino-admin/generators/actions.rb +16 -0
  12. data/lib/padrino-admin/generators/admin_app.rb +61 -0
  13. data/lib/padrino-admin/generators/admin_page.rb +55 -0
  14. data/lib/padrino-admin/generators/app/app.rb.tt +31 -0
  15. data/lib/padrino-admin/generators/app/controllers/accounts.rb +37 -0
  16. data/lib/padrino-admin/generators/app/controllers/base.rb +11 -0
  17. data/lib/padrino-admin/generators/app/controllers/javascripts.rb +10 -0
  18. data/lib/padrino-admin/generators/app/controllers/sessions.rb +21 -0
  19. data/lib/padrino-admin/generators/app/public/flash/charts.swf +0 -0
  20. data/lib/padrino-admin/generators/app/public/flash/clippy.swf +0 -0
  21. data/lib/padrino-admin/generators/app/public/flash/expressinstall.swf +0 -0
  22. data/lib/padrino-admin/generators/app/public/images/backend/back.gif +0 -0
  23. data/lib/padrino-admin/generators/app/public/images/backend/background.png +0 -0
  24. data/lib/padrino-admin/generators/app/public/images/backend/bg-content.png +0 -0
  25. data/lib/padrino-admin/generators/app/public/images/backend/bg-hd-slate.png +0 -0
  26. data/lib/padrino-admin/generators/app/public/images/backend/bg-hd.png +0 -0
  27. data/lib/padrino-admin/generators/app/public/images/backend/bg-intro.png +0 -0
  28. data/lib/padrino-admin/generators/app/public/images/backend/bg-login.png +0 -0
  29. data/lib/padrino-admin/generators/app/public/images/backend/bg-menu-slate.png +0 -0
  30. data/lib/padrino-admin/generators/app/public/images/backend/bg-menu.png +0 -0
  31. data/lib/padrino-admin/generators/app/public/images/backend/bg.png +0 -0
  32. data/lib/padrino-admin/generators/app/public/images/backend/btn-login.png +0 -0
  33. data/lib/padrino-admin/generators/app/public/images/backend/categories.gif +0 -0
  34. data/lib/padrino-admin/generators/app/public/images/backend/delete.gif +0 -0
  35. data/lib/padrino-admin/generators/app/public/images/backend/download.gif +0 -0
  36. data/lib/padrino-admin/generators/app/public/images/backend/duplicate.gif +0 -0
  37. data/lib/padrino-admin/generators/app/public/images/backend/edit.gif +0 -0
  38. data/lib/padrino-admin/generators/app/public/images/backend/export.gif +0 -0
  39. data/lib/padrino-admin/generators/app/public/images/backend/hd-bg.gif +0 -0
  40. data/lib/padrino-admin/generators/app/public/images/backend/image.gif +0 -0
  41. data/lib/padrino-admin/generators/app/public/images/backend/loader.gif +0 -0
  42. data/lib/padrino-admin/generators/app/public/images/backend/logo-loader.png +0 -0
  43. data/lib/padrino-admin/generators/app/public/images/backend/logo-small.png +0 -0
  44. data/lib/padrino-admin/generators/app/public/images/backend/new.gif +0 -0
  45. data/lib/padrino-admin/generators/app/public/images/backend/no-image.png +0 -0
  46. data/lib/padrino-admin/generators/app/public/images/backend/preview.gif +0 -0
  47. data/lib/padrino-admin/generators/app/public/images/backend/print.gif +0 -0
  48. data/lib/padrino-admin/generators/app/public/images/backend/save.gif +0 -0
  49. data/lib/padrino-admin/generators/app/public/images/backend/support.gif +0 -0
  50. data/lib/padrino-admin/generators/app/public/images/ext/default/box/corners-blue.gif +0 -0
  51. data/lib/padrino-admin/generators/app/public/images/ext/default/box/corners.gif +0 -0
  52. data/lib/padrino-admin/generators/app/public/images/ext/default/box/l-blue.gif +0 -0
  53. data/lib/padrino-admin/generators/app/public/images/ext/default/box/l.gif +0 -0
  54. data/lib/padrino-admin/generators/app/public/images/ext/default/box/r-blue.gif +0 -0
  55. data/lib/padrino-admin/generators/app/public/images/ext/default/box/r.gif +0 -0
  56. data/lib/padrino-admin/generators/app/public/images/ext/default/box/tb-blue.gif +0 -0
  57. data/lib/padrino-admin/generators/app/public/images/ext/default/box/tb.gif +0 -0
  58. data/lib/padrino-admin/generators/app/public/images/ext/default/button/arrow.gif +0 -0
  59. data/lib/padrino-admin/generators/app/public/images/ext/default/button/btn.gif +0 -0
  60. data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-cs.gif +0 -0
  61. data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-lr.gif +0 -0
  62. data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-tb.gif +0 -0
  63. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b-noline.gif +0 -0
  64. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b.gif +0 -0
  65. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-bo.gif +0 -0
  66. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-noline.gif +0 -0
  67. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-o.gif +0 -0
  68. data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow.gif +0 -0
  69. data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-add.gif +0 -0
  70. data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-no.gif +0 -0
  71. data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-yes.gif +0 -0
  72. data/lib/padrino-admin/generators/app/public/images/ext/default/editor/tb-sprite.gif +0 -0
  73. data/lib/padrino-admin/generators/app/public/images/ext/default/form/checkbox.gif +0 -0
  74. data/lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.gif +0 -0
  75. data/lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.psd +0 -0
  76. data/lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.gif +0 -0
  77. data/lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.psd +0 -0
  78. data/lib/padrino-admin/generators/app/public/images/ext/default/form/error-tip-corners.gif +0 -0
  79. data/lib/padrino-admin/generators/app/public/images/ext/default/form/exclamation.gif +0 -0
  80. data/lib/padrino-admin/generators/app/public/images/ext/default/form/radio.gif +0 -0
  81. data/lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.gif +0 -0
  82. data/lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.psd +0 -0
  83. data/lib/padrino-admin/generators/app/public/images/ext/default/form/text-bg.gif +0 -0
  84. data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger-tpl.gif +0 -0
  85. data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.gif +0 -0
  86. data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.psd +0 -0
  87. data/lib/padrino-admin/generators/app/public/images/ext/default/gradient-bg.gif +0 -0
  88. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/Thumbs.db +0 -0
  89. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-left-white.gif +0 -0
  90. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-right-white.gif +0 -0
  91. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-bottom.gif +0 -0
  92. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-top.gif +0 -0
  93. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/columns.gif +0 -0
  94. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/dirty.gif +0 -0
  95. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/done.gif +0 -0
  96. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-no.gif +0 -0
  97. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-yes.gif +0 -0
  98. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/footer-bg.gif +0 -0
  99. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-hd.gif +0 -0
  100. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-split.gif +0 -0
  101. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-hrow.gif +0 -0
  102. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-loading.gif +0 -0
  103. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-split.gif +0 -0
  104. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-vista-hd.gif +0 -0
  105. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hd-btn.gif +0 -0
  106. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow-over.gif +0 -0
  107. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow.gif +0 -0
  108. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-bg.gif +0 -0
  109. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-sel-bg.gif +0 -0
  110. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/group-by.gif +0 -0
  111. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/group-expand-sprite.gif +0 -0
  112. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hd-pop.gif +0 -0
  113. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-asc.gif +0 -0
  114. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-desc.gif +0 -0
  115. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.gif +0 -0
  116. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.png +0 -0
  117. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.gif +0 -0
  118. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.png +0 -0
  119. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/invalid_line.gif +0 -0
  120. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/loading.gif +0 -0
  121. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/mso-hd.gif +0 -0
  122. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/nowait.gif +0 -0
  123. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first-disabled.gif +0 -0
  124. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first.gif +0 -0
  125. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last-disabled.gif +0 -0
  126. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last.gif +0 -0
  127. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next-disabled.gif +0 -0
  128. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next.gif +0 -0
  129. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev-disabled.gif +0 -0
  130. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev.gif +0 -0
  131. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/pick-button.gif +0 -0
  132. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/refresh.gif +0 -0
  133. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-check-sprite.gif +0 -0
  134. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-expand-sprite.gif +0 -0
  135. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-over.gif +0 -0
  136. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-sel.gif +0 -0
  137. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort-hd.gif +0 -0
  138. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_asc.gif +0 -0
  139. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_desc.gif +0 -0
  140. data/lib/padrino-admin/generators/app/public/images/ext/default/grid/wait.gif +0 -0
  141. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/collapse.gif +0 -0
  142. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/expand.gif +0 -0
  143. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/gradient-bg.gif +0 -0
  144. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-bottom.gif +0 -0
  145. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-left.gif +0 -0
  146. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-right.gif +0 -0
  147. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-top.gif +0 -0
  148. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-collapse.gif +0 -0
  149. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-expand.gif +0 -0
  150. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-close.gif +0 -0
  151. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-bg.gif +0 -0
  152. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-light-bg.gif +0 -0
  153. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/stick.gif +0 -0
  154. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/stuck.gif +0 -0
  155. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close-on.gif +0 -0
  156. data/lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close.gif +0 -0
  157. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/checked.gif +0 -0
  158. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/group-checked.gif +0 -0
  159. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/item-over.gif +0 -0
  160. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/menu-parent.gif +0 -0
  161. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/menu.gif +0 -0
  162. data/lib/padrino-admin/generators/app/public/images/ext/default/menu/unchecked.gif +0 -0
  163. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/corners-sprite.gif +0 -0
  164. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/left-right.gif +0 -0
  165. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/light-hd.gif +0 -0
  166. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprite-tpl.gif +0 -0
  167. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprites.gif +0 -0
  168. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tools-sprites-trans.gif +0 -0
  169. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.gif +0 -0
  170. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.png +0 -0
  171. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-corners-sprite.gif +0 -0
  172. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-left-right.gif +0 -0
  173. data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-top-bottom.gif +0 -0
  174. data/lib/padrino-admin/generators/app/public/images/ext/default/progress/progress-bg.gif +0 -0
  175. data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/bg.gif +0 -0
  176. data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/close.gif +0 -0
  177. data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-anchor-sprite.gif +0 -0
  178. data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-sprite.gif +0 -0
  179. data/lib/padrino-admin/generators/app/public/images/ext/default/s.gif +0 -0
  180. data/lib/padrino-admin/generators/app/public/images/ext/default/shadow-c.png +0 -0
  181. data/lib/padrino-admin/generators/app/public/images/ext/default/shadow-lr.png +0 -0
  182. data/lib/padrino-admin/generators/app/public/images/ext/default/shadow.png +0 -0
  183. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/blue-loading.gif +0 -0
  184. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/calendar.gif +0 -0
  185. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/glass-bg.gif +0 -0
  186. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/hd-sprite.gif +0 -0
  187. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/large-loading.gif +0 -0
  188. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/left-btn.gif +0 -0
  189. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/loading-balls.gif +0 -0
  190. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/right-btn.gif +0 -0
  191. data/lib/padrino-admin/generators/app/public/images/ext/default/shared/warning.gif +0 -0
  192. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle-dark.gif +0 -0
  193. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle.gif +0 -0
  194. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle-dark.gif +0 -0
  195. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle.gif +0 -0
  196. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle-dark.gif +0 -0
  197. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle.gif +0 -0
  198. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle-dark.gif +0 -0
  199. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle.gif +0 -0
  200. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle-dark.gif +0 -0
  201. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle.gif +0 -0
  202. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/square.gif +0 -0
  203. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle-dark.gif +0 -0
  204. data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle.gif +0 -0
  205. data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-bg.png +0 -0
  206. data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-thumb.png +0 -0
  207. data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-bg.png +0 -0
  208. data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-thumb.png +0 -0
  209. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-left.gif +0 -0
  210. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-right.gif +0 -0
  211. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroller-bg.gif +0 -0
  212. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
  213. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
  214. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-left-bg.gif +0 -0
  215. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-right-bg.gif +0 -0
  216. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-close.gif +0 -0
  217. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.gif +0 -0
  218. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.png +0 -0
  219. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-btm-bg.gif +0 -0
  220. data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tabs-sprite.gif +0 -0
  221. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/bg.gif +0 -0
  222. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow-light.gif +0 -0
  223. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow.gif +0 -0
  224. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-over-bg.gif +0 -0
  225. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/gray-bg.gif +0 -0
  226. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/more.gif +0 -0
  227. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-bg.gif +0 -0
  228. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-btn-sprite.gif +0 -0
  229. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  230. data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-sep.gif +0 -0
  231. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/arrows.gif +0 -0
  232. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-add.gif +0 -0
  233. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-between.gif +0 -0
  234. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-no.gif +0 -0
  235. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-over.gif +0 -0
  236. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-under.gif +0 -0
  237. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-yes.gif +0 -0
  238. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus-nl.gif +0 -0
  239. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus.gif +0 -0
  240. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus-nl.gif +0 -0
  241. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus.gif +0 -0
  242. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end.gif +0 -0
  243. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-line.gif +0 -0
  244. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus-nl.gif +0 -0
  245. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus.gif +0 -0
  246. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus-nl.gif +0 -0
  247. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus.gif +0 -0
  248. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow.gif +0 -0
  249. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/folder-open.gif +0 -0
  250. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/folder.gif +0 -0
  251. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/leaf.gif +0 -0
  252. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/loading.gif +0 -0
  253. data/lib/padrino-admin/generators/app/public/images/ext/default/tree/s.gif +0 -0
  254. data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-error.gif +0 -0
  255. data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-info.gif +0 -0
  256. data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-question.gif +0 -0
  257. data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-warning.gif +0 -0
  258. data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.png +0 -0
  259. data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.psd +0 -0
  260. data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.png +0 -0
  261. data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.psd +0 -0
  262. data/lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.png +0 -0
  263. data/lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.psd +0 -0
  264. data/lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.png +0 -0
  265. data/lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.psd +0 -0
  266. data/lib/padrino-admin/generators/app/public/javascripts/controls.js +3 -0
  267. data/lib/padrino-admin/generators/app/public/javascripts/dragdrop.js +3 -0
  268. data/lib/padrino-admin/generators/app/public/javascripts/effects.js +4 -0
  269. data/lib/padrino-admin/generators/app/public/javascripts/ext.js +26 -0
  270. data/lib/padrino-admin/generators/app/public/javascripts/prototype.js +14 -0
  271. data/lib/padrino-admin/generators/app/public/stylesheets/admin.css +78 -0
  272. data/lib/padrino-admin/generators/app/public/stylesheets/ext.css +1543 -0
  273. data/lib/padrino-admin/generators/app/public/stylesheets/login.css +17 -0
  274. data/lib/padrino-admin/generators/app/public/stylesheets/standard.css +66 -0
  275. data/lib/padrino-admin/generators/app/views/accounts/_form.haml +25 -0
  276. data/lib/padrino-admin/generators/app/views/accounts/edit.haml +3 -0
  277. data/lib/padrino-admin/generators/app/views/accounts/grid.js.erb +9 -0
  278. data/lib/padrino-admin/generators/app/views/accounts/new.haml +3 -0
  279. data/lib/padrino-admin/generators/app/views/accounts/store.jml +9 -0
  280. data/lib/padrino-admin/generators/app/views/base/dashboard.haml +3 -0
  281. data/lib/padrino-admin/generators/app/views/base/index.haml +21 -0
  282. data/lib/padrino-admin/generators/app/views/javascripts/admin.js.erb +559 -0
  283. data/lib/padrino-admin/generators/app/views/javascripts/locale.js.erb +135 -0
  284. data/lib/padrino-admin/generators/app/views/sessions/new.haml +26 -0
  285. data/lib/padrino-admin/generators/templates/controller.rb.tt +37 -0
  286. data/lib/padrino-admin/generators/templates/db/seeds.rb.tt +29 -0
  287. data/lib/padrino-admin/generators/templates/models/account.rb.tt +8 -0
  288. data/lib/padrino-admin/generators/templates/views/_form.haml.tt +10 -0
  289. data/lib/padrino-admin/generators/templates/views/edit.haml.tt +3 -0
  290. data/lib/padrino-admin/generators/templates/views/grid.js.erb.tt +9 -0
  291. data/lib/padrino-admin/generators/templates/views/new.haml.tt +3 -0
  292. data/lib/padrino-admin/generators/templates/views/store.jml.tt +6 -0
  293. data/lib/padrino-admin/{access_control/helpers.rb → helpers/authentication.rb} +20 -10
  294. data/lib/padrino-admin/helpers/view.rb +138 -0
  295. data/lib/padrino-admin/locale/admin/en.yml +71 -0
  296. data/lib/padrino-admin/locale/extjs/en.yml +147 -0
  297. data/lib/padrino-admin/utils/crypt.rb +1 -0
  298. data/lib/padrino-admin/utils/literal.rb +13 -0
  299. data/lib/padrino-admin.rb +6 -2
  300. data/padrino-admin.gemspec +304 -15
  301. data/test/fixtures/active_record.rb +1 -1
  302. data/test/fixtures/data_mapper.rb +1 -1
  303. data/test/fixtures/mongo_mapper.rb +1 -1
  304. data/test/fixtures/test_column_store.jml +10 -0
  305. data/test/fixtures/test_generic.jml +7 -0
  306. data/test/fixtures/test_javascript.jml +81 -0
  307. data/test/helper.rb +2 -3
  308. data/test/test_admin_application.rb +1 -1
  309. data/test/test_column_store.rb +41 -0
  310. metadata +309 -13
  311. data/lib/padrino-admin/ext_js/controller.rb +0 -145
  312. data/lib/padrino-admin/generators/backend.rb +0 -25
  313. data/lib/padrino-admin/locale/en.yml +0 -7
  314. data/test/test_controller.rb +0 -79
  315. data/test/test_parsing.rb +0 -135
@@ -32,140 +32,154 @@ module Padrino
32
32
  end
33
33
  end
34
34
 
35
- # This class it's used for write in a new and simple way json.
36
- #
37
- # In ExtJs framework generally each component have a configuration written in json.
38
- #
39
- # Write this config in ruby it's not the best choice think this example:
40
- #
41
- # # A Generic grid config in JavaScript:
42
- # var gridPanel = new Ext.grid.GridPanel({
43
- # bbar: gridPanelPagingToolbar,
44
- # clicksToEdit: 1,
45
- # cm: gridPanelColumnModel,
46
- # region: "center",
47
- # sm: gridPanelCheckboxSelectionModel,
48
- # viewConfig: {"forceFit":true},
49
- # plugins: [new Ext.grid.Search()],
50
- # border: false,
51
- # tbar: gridPanelToolbar,
52
- # id: "grid-accounts",
53
- # bodyBorder: false,
54
- # store: gridPanelGroupingStore,
55
- # view: gridPanelGroupingView
56
- # });
57
- #
58
- # # A Gneric grid config in Ruby:
59
- # { :bbar => Padrino::ExtJs::Variable.new('gridPanelPagingToolbar'), :clicksToEdit => 1,
60
- # :cm => Padrino::ExtJs::Variable.new('gridPanelColumnModel'), :region => "center",
61
- # :sm => Padrino::ExtJs::Variable.new('gridPanelCheckboxSelectionModel'),
62
- # :viewConfig => { :forceFit => true }, plugins => [Padrino::ExtJs::Variable.new('new Ext.grid.Search()'].
63
- # :border => false ... more more code...
64
- #
65
- # As you can see writing json in pure ruby (in this case with hash) require much time and is
66
- # <tt>less</tt> readable.
67
- #
68
- # For this reason we build an ExtJs Config, that basically it's an yaml file with
69
- # some new great functions so the example above will be:
70
- #
71
- # # A Generic grid config in ExtJs Config:
72
- # gridPanel:
73
- # bbar: !js gridPanelPagingToolbar
74
- # clicksToEdit: 1,
75
- # cm: !js gridPanelColumnModel
76
- # region: center
77
- # sm: !js gridPanelCheckboxSelectionModel
78
- # viewConfig:
79
- # forceFit: true
80
- # plugins: [!js new Ext.grid.Search()]
81
- # border: false
82
- # tbar: !js gridPanelToolbar
83
- # id: grid-accounts
84
- # bodyBorder: false
85
- # store: !js gridPanelGroupingStore
86
- # view: !js gridPanelGroupingView
87
- #
88
- # Now you see that it's more readable, simple and coincise!
89
- #
90
- # But our ExtJs config can act also as an xml or an erb partial. See this code:
91
- #
92
- # # A template
93
- # tempate:
94
- # tbar:
95
- # here: a custom config
96
- # grid:
97
- # viewConfig:
98
- # forceFit: true
99
- # plugins: [!js new Ext.grid.Search()]
100
- # border: false
101
- #
102
- # We can "grep" this config in our template with:
103
- #
104
- # # A generic grid
105
- # gridPanel:
106
- # <<: %template/grid
107
- # border: true
108
- #
109
- # The result will be:
110
- #
111
- # gridPanel:
112
- # viewConfig:
113
- # forceFit: true
114
- # plugins: [!js new Ext.grid.Search()]
115
- # border: true # overidden
116
- #
117
- # See our test for more complex examples.
118
- #
119
- class Config < Hash
120
-
121
- # Initialize a new config parsing an Hash
122
- def initialize(data)
123
- @data = data
124
- parsed = parse(@data)
125
- super
126
- replace parsed
127
- end
35
+ # Json Pretty Printer.
36
+ # Thanks to http://github.com/techcrunch/json_printer
37
+ class JsonPrinter
38
+ attr_reader :buf, :indent
128
39
 
129
- # Load a new config from an yml file and return a parsed hash.
130
- def self.load_file(path, binding=nil)
131
- self.load(File.read(path), binding)
40
+ # ==== Arguments
41
+ # obj<Object>::
42
+ # The object to be rendered into JSON. This object and all of its
43
+ # associated objects must be either nil, true, false, a String, a Symbol,
44
+ # a Numeric, an Array, or a Hash.
45
+ #
46
+ # ==== Returns
47
+ # <String>::
48
+ # The pretty-printed JSON ecoding of the given <i>obj</i>. This string
49
+ # can be parsed by any compliant JSON parser without modification.
50
+ #
51
+ # ==== Examples
52
+ # See <tt>JsonPrinter</tt> docs.
53
+ #
54
+ def self.render(obj, indent=1)
55
+ indent = " "*indent
56
+ new(obj, indent).buf
132
57
  end
133
58
 
134
- # Load a new config from a yaml "string" and return a parsed hash.
135
- def self.load(string, binding=nil)
136
- self.new YAML.parse(ERB.new(string).result(binding))
137
- end
138
59
 
139
- private
140
- def parse(node=nil, key=nil)
141
- case node.value
142
- when String
143
- if node.value =~ /^%{1}(.*)/
144
- node = parse(@data.select($1).first)
145
- end
146
- node.respond_to?(:transform) ? node.transform : node
147
- when Hash
148
- parsed = {}
149
- node.value.each do |k,v|
150
- if k.value == "<<"
151
- node = parse(v)
152
- if node.is_a?(Hash)
153
- node.merge!(parsed)
154
- end
155
- parsed = node
60
+ private
61
+ # Execute the JSON rendering of <i>obj</i>, storing the result in the
62
+ # <tt>buf</tt>.
63
+ #
64
+ def initialize(obj, indent="")
65
+ @buf = ""
66
+ @indent = indent
67
+ render(obj)
68
+ end
69
+
70
+ # Increase the indentation level.
71
+ #
72
+ def indent_out
73
+ @indent << " "
74
+ end
75
+
76
+ # Decrease the indendation level.
77
+ #
78
+ def indent_in
79
+ @indent.slice!(-1, 1)
80
+ end
81
+
82
+ # Append the given <i>str</i> to the <tt>buf</tt>.
83
+ #
84
+ def print(str)
85
+ @buf << str
86
+ end
87
+
88
+ # Recursive rendering method. Primitive values, like nil, true, false,
89
+ # numbers, symbols, and strings are converted to JSON and appended to the
90
+ # buffer. Enumerables are treated specially to generate pretty whitespace.
91
+ #
92
+ def render(obj)
93
+ # We can't use a case statement here becuase "when Hash" doesn't work for
94
+ # ActiveSupport::OrderedHash - respond_to?(:values) is a more reliable
95
+ # indicator of hash-like behavior.
96
+ if NilClass === obj
97
+ print("null")
98
+
99
+ elsif TrueClass === obj
100
+ print("true")
101
+
102
+ elsif FalseClass === obj
103
+ print("false")
104
+
105
+ elsif String === obj
106
+ print(escape_json_string(obj))
107
+
108
+ elsif Symbol === obj
109
+ print("\"#{obj}\"")
110
+
111
+ elsif Numeric === obj
112
+ print(obj.to_s)
113
+
114
+ elsif Time === obj
115
+ print(obj.to_s)
116
+
117
+ elsif obj.respond_to?(:keys)
118
+ print("{")
119
+ indent_out
120
+ last_key = obj.keys.last
121
+ obj.each do |(key, val)|
122
+ render(key)
123
+ case val
124
+ when Hash, Array
125
+ indent_out
126
+ print(":\n#{indent}")
127
+ render(val)
128
+ indent_in
156
129
  else
157
- parsed[k.value] = parse(v)
130
+ print(": ")
131
+ render(val)
158
132
  end
133
+ print(",\n#{indent}") unless key == last_key
159
134
  end
160
- parsed
161
- when Array
162
- parsed = []
163
- node.value.each do |v|
164
- node = parse(v)
165
- node.is_a?(Array) ? parsed.concat(node) : parsed.push(node)
135
+ indent_in
136
+ print("}")
137
+
138
+ elsif Array === obj
139
+ print("[")
140
+ indent_out
141
+ last_index = obj.size - 1
142
+ obj.each_with_index do |elem, index|
143
+ render(elem)
144
+ print(",\n#{indent}") unless index == last_index
166
145
  end
167
- parsed
146
+ indent_in
147
+ print("]")
148
+
149
+ else
150
+ raise "unrenderable object: #{obj.inspect}"
151
+ end
168
152
  end
153
+
154
+ # Special JSON character escape cases.
155
+ ESCAPED_CHARS = {
156
+ "\010" => '\b',
157
+ "\f" => '\f',
158
+ "\n" => '\n',
159
+ "\r" => '\r',
160
+ "\t" => '\t',
161
+ '"' => '\"',
162
+ '\\' => '\\\\',
163
+ '>' => '\u003E',
164
+ '<' => '\u003C',
165
+ '&' => '\u0026'}
166
+
167
+ # String#to_json extracted from ActiveSupport, using interpolation for speed.
168
+ #
169
+ def escape_json_string(str)
170
+ begin
171
+ "\"#{
172
+ str.gsub(/[\010\f\n\r\t"\\><&]/) { |s| ESCAPED_CHARS[s] }.
173
+ gsub(/([\xC0-\xDF][\x80-\xBF]|
174
+ [\xE0-\xEF][\x80-\xBF]{2}|
175
+ [\xF0-\xF7][\x80-\xBF]{3})+/nx) do |s|
176
+ s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/, '\\\\u\&')
177
+ end
178
+ }\""
179
+ rescue Encoding::CompatibilityError
180
+ rawbytes = str.dup.force_encoding 'ASCII-8BIT'
181
+ escape_json_string(rawbytes)
182
+ end
169
183
  end
170
184
  end
171
185
  end
@@ -0,0 +1,16 @@
1
+ module Padrino
2
+ module Generators
3
+ module Actions
4
+ # For access control permissions
5
+ def access_control(name)
6
+ (<<-RUBY)
7
+ role.project_module :#{name} do |project|
8
+ project.menu :list, "/admin/#{name}.js"
9
+ project.menu :new, "/admin/#{name}/new"
10
+ end
11
+
12
+ RUBY
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,61 @@
1
+ module Padrino
2
+ module Generators
3
+
4
+ class AdminApp < Thor::Group
5
+
6
+ # Add this generator to our padrino-gen
7
+ Padrino::Generators.add_generator(:admin, self)
8
+
9
+ # Define the source template root
10
+ def self.source_root; File.expand_path(File.dirname(__FILE__)); end
11
+ def self.banner; "padrino-gen backend"; end
12
+
13
+ # Include related modules
14
+ include Thor::Actions
15
+ include Padrino::Generators::Actions
16
+
17
+ desc "Description:\n\n\tpadrino-gen controller generates a new Padrino Admin"
18
+
19
+ class_option :root, :aliases => '-r', :default => nil, :type => :string
20
+ class_option :path, :aliases => '-p', :type => :string, :default => "admin"
21
+ class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
22
+
23
+ # Copies over the Padrino base admin application
24
+ def create_admin
25
+ if in_app_root?(options[:root])
26
+ @app_path = options[:path]
27
+ @orm = fetch_component_choice(:orm, options[:root]).to_sym rescue :datamapper
28
+
29
+ orm_short = case @orm
30
+ when :datamapper then :dm
31
+ when :activerecord then :ar
32
+ when :mongomapper then :mm
33
+ when :couchdb then :cd
34
+ when :sequel then :sq
35
+ end
36
+
37
+ say "A the moment we only support datamapper. Sorry!" and exit unless @orm == :datamapper
38
+
39
+ self.behavior = :revoke if options[:destroy]
40
+ directory("app/", File.join(options[:path]))
41
+ template "templates/models/account.rb.tt", app_root_path("/app/models/account.rb")
42
+ template "templates/db/seeds.rb.tt", app_root_path("/db/seeds.rb")
43
+ append_file app_root_path("config/apps.rb"), "\nPadrino.mount(\"Admin\").to(\"/#{@app_path}\")"
44
+
45
+ say ""
46
+ say "Your admin now is installed, now follow this steps:"
47
+ say ""
48
+ say " - edit your config/database.rb"
49
+ say " - run padrino rake #{orm_short}:migrate"
50
+ say " - run padrino rake seed"
51
+ say ""
52
+ say "That's all"
53
+ else
54
+ say "You are not at the root of a Padrino application! (config/boot.rb not found)" and exit unless in_app_root?
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,55 @@
1
+ module Padrino
2
+ module Generators
3
+
4
+ class AdminPage < Thor::Group
5
+
6
+ # Add this generator to our padrino-gen
7
+ Padrino::Generators.add_generator(:admin_page, self)
8
+
9
+ # Define the source template root
10
+ def self.source_root; File.expand_path(File.dirname(__FILE__)); end
11
+ def self.banner; "padrino-gen backend_page [Model]"; end
12
+
13
+ # Include related modules
14
+ include Thor::Actions
15
+ include Padrino::Generators::Actions
16
+
17
+ desc "Description:\n\n\tpadrino-gen backend_page YourModel"
18
+ argument :model, :desc => "The name of your model"
19
+ class_option :admin_path, :aliases => '-p', :type => :string, :default => "admin"
20
+ class_option :root, :aliases => '-r', :type => :string
21
+ class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
22
+
23
+ # Show help if no argv given
24
+ def self.start(given_args=ARGV, config={})
25
+ given_args = ["-h"] if given_args.empty?
26
+ super
27
+ end
28
+
29
+ # Create controller for admin
30
+ def create_controller
31
+ if in_app_root?(options[:root])
32
+ @model_name = model
33
+ @model_klass = model.constantize
34
+ @model_plural = model.to_s.downcase.pluralize
35
+ @model_singular = model.to_s.downcase
36
+ @app_root = File.join(options[:root] || '.', options[:admin_path])
37
+ self.behavior = :revoke if options[:destroy]
38
+ template "templates/controller.rb.tt", app_root_path(options[:admin_path], "/controllers/#{@model_plural}.rb")
39
+ template "templates/views/_form.haml.tt", app_root_path(options[:admin_path], "/views/#{@model_plural}/_form.haml")
40
+ template "templates/views/edit.haml.tt", app_root_path(options[:admin_path], "/views/#{@model_plural}/edit.haml")
41
+ template "templates/views/grid.js.erb.tt", app_root_path(options[:admin_path], "/views/#{@model_plural}/grid.js.erb")
42
+ template "templates/views/new.haml.tt", app_root_path(options[:admin_path], "/views/#{@model_plural}/new.haml")
43
+ template "templates/views/store.jml.tt", app_root_path(options[:admin_path], "/views/#{@model_plural}/store.jml")
44
+ inject_into_file app_root_path("#{options[:admin_path]}/app.rb"), access_control(@model_plural), :before => " # Put before other permissions [don't delete this line!!!]"
45
+ empty_directory app_root_path(options[:admin_path], "/views/#{@model_plural}")
46
+ include_component_module_for(:test, options[:root])
47
+ generate_controller_test(model.downcase.pluralize, options[:root])
48
+ else
49
+ say "You are not at the root of a Padrino application! (config/boot.rb not found)" and return unless in_app_root?
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,31 @@
1
+ class Admin < Padrino::Application
2
+ configure do
3
+ # Application-specific configuration options
4
+ # set :sessions, false # Enabled by default
5
+ # set :log_to_file, true # Log to file instead of stdout (default is stdout in development)
6
+ # set :reload, false # Reload application files (default in development)
7
+ # disable :padrino_helpers # Disables padrino markup helpers (enabled by default)
8
+ # disable :flash # Disables rack-flash (enabled by default)
9
+ layout false
10
+ enable :authentication
11
+ disable :store_location
12
+ set :use_orm, <%= @orm.inspect %>
13
+ set :login_page, "/<%= @app_path %>/sessions/new"
14
+
15
+ access_control.roles_for :any do |role|
16
+ role.allow "/sessions"
17
+ end
18
+
19
+ access_control.roles_for :admin do |role, account|
20
+ role.allow "/"
21
+
22
+ role.project_module :accounts do |project|
23
+ project.menu :list, "/<%= @app_path %>/accounts.js"
24
+ project.menu :new, "/<%= @app_path %>/accounts/new"
25
+ end
26
+
27
+ # Put before other permissions [don't delete this line!!!]
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,37 @@
1
+ Admin.controllers :accounts do
2
+
3
+ get :index, :respond_to => [:js, :json] do
4
+ @store = Account.column_store(options.views, "accounts/store")
5
+ case content_type
6
+ when :js then render 'accounts/grid.js'
7
+ when :json then @store.store_data(params)
8
+ end
9
+ end
10
+
11
+ get :new do
12
+ @account = Account.new
13
+ render 'accounts/new'
14
+ end
15
+
16
+ post :create, :respond_to => :js do
17
+ @account = Account.create(params[:account])
18
+ show_messages_for(@account)
19
+ end
20
+
21
+ get :edit, :with => :id do
22
+ @account = Account.first(:conditions => { :id => params[:id] })
23
+ render 'accounts/edit'
24
+ end
25
+
26
+ put :update, :with => :id, :respond_to => :js do
27
+ @account = Account.first(:conditions => { :id => params[:id] })
28
+ @account.update_attributes(params[:account])
29
+ show_messages_for(@account)
30
+ end
31
+
32
+ delete :destroy, :respond_to => :json do
33
+ accounts = Account.all(:conditions => { :id => params[:ids].split(",") })
34
+ errors = accounts.map { |account| I18n.t("admin.general.cantDelete", :record => account.id) unless account.destroy }.compact
35
+ { :success => errors.empty?, :msg => errors.join("<br />") }.to_json
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ Admin.controllers do
2
+
3
+ get :index do
4
+ render "base/index"
5
+ end
6
+
7
+ get :dashboard do
8
+ render "base/dashboard"
9
+ end
10
+
11
+ end
@@ -0,0 +1,10 @@
1
+ Admin.controllers :javascripts do
2
+
3
+ get :admin, :respond_to => :js do
4
+ render 'javascripts/admin.js'
5
+ end
6
+
7
+ get :locale, :respond_to => :js do
8
+ render 'javascripts/locale.js'
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ Admin.controllers :sessions do
2
+
3
+ get :new do
4
+ render "/sessions/new"
5
+ end
6
+
7
+ post :create do
8
+ if account = Account.authenticate(params[:email], params[:password])
9
+ set_current_account(account)
10
+ redirect url_for(:index)
11
+ else
12
+ flash[:notice] = "Login or password wrong."
13
+ redirect url_for(:sessions_new)
14
+ end
15
+ end
16
+
17
+ get :destroy do
18
+ set_current_account(nil)
19
+ render "/sessions/new"
20
+ end
21
+ end