padrino-admin 0.5.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Padrino
1
+ Copyright (c) 2010 Padrino
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -1,22 +1,75 @@
1
1
  = padrino-admin
2
2
 
3
- == Installation
3
+ Padrino has a beautiful Ajax Admin, with these fatures:
4
4
 
5
- To install the 'full-stack' padrino framework, simply grab the latest version from gemcutter:
5
+ Orm Agnostic:: Adapters for datamapper, activerecord, mongomapper, couchdb (now only: datamapper and activerecord)
6
+ Authentication:: Support for Account authentication, Account Permission managment
7
+ Scaffold:: You can simply create a new "admin interface" simply providing a Model
8
+ Ajax Uploads:: You can upload file, manage them and attach them to any model in a quick and simple way (coming soon)
6
9
 
7
- $ sudo gem install padrino --source http://gemcutter.org
8
-
9
- This will install the necessary padrino gems to get you started.
10
- Now you are ready to use this gem to enhance your existing Sinatra projects or build new Padrino applications.
10
+ === Admin Usage
11
+
12
+ Create a project:
13
+
14
+ $ padrino-gen app fun-test
15
+ $ cd fun-test
16
+
17
+ For create the admin application:
18
+
19
+ fun-test$ padrino-gen admin
11
20
 
12
- You can also install only the padrino-admin gem for more fine-grained use:
21
+ Now follow admin instructions so:
13
22
 
14
- $ sudo gem install padrino-admin --source http://gemcutter.org
23
+ * edit your config/database.rb
24
+ * run padrino rake dm:migrate
25
+ * run padrino rake seed
26
+
27
+ Your admin now is "complete", you can start your server with <tt>padrino start</tt> and point your browser to /admin!
28
+
29
+ For create a new "scaffold" you need to provide only a Model for them like:
30
+
31
+ fun-test$ padrino-gen admin_page Post
15
32
 
16
- == Usage
33
+ That's all!!
34
+
35
+ === Admin Authentication
36
+
37
+ Padrino Admin use a model Account for manage role, membership and permissions take the following example:
38
+
39
+ access_control.roles_for :any do |role|
40
+ role.allow "/sessions"
41
+ # role.deny "/deny/this/always"
42
+ end
43
+
44
+ access_control.roles_for :admin do |role, account|
45
+ role.allow "/"
46
+
47
+ role.project_module :accounts do |project|
48
+ project.menu :list, "/admin/accounts.js"
49
+ project.menu :new, "/admin/accounts/new"
50
+ end
51
+ end
52
+
53
+ access_control.roles_for :editor do |role, account|
54
+ role.project_module :posts do |project|
55
+ project.menu :list, "/admin/posts.js"
56
+ project.menu :new, "/admin/posts/new"
57
+ end
58
+
59
+ role.project_module :comments do |project|
60
+ project.menu :list, "/admin/comments.js"
61
+ project.menu :new, "/admin/comments/new"
62
+ end
63
+ end
64
+
65
+ In this example we <tt>grant</tt> "/session" (and each subpaths like /sessions/new) for all users logged and unlogged.
66
+
67
+ Account with role <tt>admin</tt> can manage <tt>only</tt> accounts because have access to "/admin/accounts/**" paths
68
+ Account with role <tt>editor</tt> can manage <tt>only</tt> post/comments because have access to "/admin/posts/**", "/admin/posts/**" paths
17
69
 
18
- Not implemented yet.
70
+ Another good fature of Padrino admin is that when you define a <tt>Project Module</tt> role you also build the Menu Tree of the Admin.
71
+ Trust us that in future you appreciate so much this feature.
19
72
 
20
73
  == Copyright
21
74
 
22
- Copyright (c) 2009 Padrino. See LICENSE for details.
75
+ Copyright (c) 2010 Padrino. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
 
4
+ GEM_VERSION = File.read(File.dirname(__FILE__) + '/VERSION')
5
+
4
6
  begin
5
7
  require 'jeweler'
6
8
  Jeweler::Tasks.new do |gem|
@@ -11,8 +13,9 @@ begin
11
13
  gem.homepage = "http://github.com/padrino/padrino-framework/tree/master/padrino-admin"
12
14
  gem.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
13
15
  gem.add_runtime_dependency "json_pure", ">= 1.2.0"
14
- gem.add_runtime_dependency "padrino-core", ">= 0.1.1"
15
- gem.add_development_dependency "dm-core", ">= 0.10.2"
16
+ gem.add_runtime_dependency "padrino-core", "= #{GEM_VERSION}"
17
+ gem.add_runtime_dependency "padrino-gen", "= #{GEM_VERSION}"
18
+ gem.add_runtime_dependency "tilt", ">= 0.4"
16
19
  gem.add_development_dependency "haml", ">= 2.2.1"
17
20
  gem.add_development_dependency "shoulda", ">= 0"
18
21
  gem.add_development_dependency "mocha", ">= 0.9.7"
@@ -28,6 +31,7 @@ end
28
31
  require 'rake/testtask'
29
32
  Rake::TestTask.new(:test) do |test|
30
33
  test.libs << 'test'
34
+
31
35
  test.pattern = 'test/**/test_*.rb'
32
36
  test.verbose = true
33
37
  end
@@ -35,6 +39,9 @@ end
35
39
  begin
36
40
  require 'rcov/rcovtask'
37
41
  Rcov::RcovTask.new do |test|
42
+ Dir[File.dirname(__FILE__) + "/../padrino-*/lib"].each do |padrino_gem|
43
+ test.libs << padrino_gem
44
+ end
38
45
  test.libs << 'test'
39
46
  test.pattern = 'test/**/test_*.rb'
40
47
  test.verbose = true
@@ -58,3 +65,20 @@ Rake::RDocTask.new do |rdoc|
58
65
  rdoc.rdoc_files.include('README*')
59
66
  rdoc.rdoc_files.include('lib/**/*.rb')
60
67
  end
68
+
69
+
70
+ spec = Gem::Specification.new do |s|
71
+ s.name = "foo"
72
+ s.version = "1.0.1"
73
+ s.author = "Davide D'Agostino"
74
+ s.email = "d.dagostino@lipsiasoft.com"
75
+ s.homepage = "http://www.lipsiadmin.com"
76
+ s.rubyforge_project = "lipsiadmin"
77
+ s.platform = Gem::Platform::RUBY
78
+ s.summary = "Lipsiadmin is a new revolutionary admin for your projects.Lipsiadmin is based on Ext Js 2.0. framework (with prototype adapter) and is ready for Rails 2.0. This admin is for newbie developper but also for experts, is not entirely written in javascript because the aim of developper wose build in a agile way web/site apps so we use extjs in a new intelligent way a mixin of 'old' html and new ajax functions, for example ext manage the layout of page, grids, tree and errors, but form are in html code."
79
+ s.files = FileList["CHANGELOG", "README.rdoc", "MIT-LICENSE", "Rakefile", "init.rb", "{lipsiadmin_generators,lib,resources,tasks}/**/*"].to_a
80
+ s.has_rdoc = true
81
+ s.requirements << "ImageMagick"
82
+ s.add_dependency('haml')
83
+ s.add_dependency('rails', '>= 2.2.1')
84
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.1
@@ -6,7 +6,8 @@ module Padrino
6
6
  #
7
7
  # class EcommerceDemo < Padrino::Application
8
8
  # enable :authentication
9
- # set :redirect_back_or_default, "/login" # or your page
9
+ # set :login_page, "/login" # or your login page
10
+ # enable :store_location # if you want know what is the page that need authentication
10
11
  # set :use_orm, :active_record # or :data_mapper, :mongo_mapper
11
12
  #
12
13
  # access_control.roles_for :any do
@@ -37,7 +38,7 @@ module Padrino
37
38
  #
38
39
  # class AdminDemo < Padrino::Application
39
40
  # enable :authentication
40
- # set :redirect_to_default, "/" # or your page
41
+ # set :login_page, "/sessions/new" # or your page
41
42
  #
42
43
  # access_control.roles_for :any do |role|
43
44
  # role.allow "/sessions"
@@ -123,9 +124,8 @@ module Padrino
123
124
  module AccessControl
124
125
 
125
126
  def self.registered(app)
126
- app.helpers Padrino::AccessControl::Helpers
127
+ app.helpers Padrino::Admin::Helpers
127
128
  app.before { login_required }
128
- app.set :redirect_to_default, "/"
129
129
  if app.respond_to?(:use_orm)
130
130
  Padrino::Admin::Adapters.register(app.use_orm)
131
131
  else
@@ -134,9 +134,9 @@ module Padrino
134
134
  end
135
135
 
136
136
  class Base
137
-
138
137
  class << self
139
-
138
+ attr_reader :roles
139
+
140
140
  def inherited(base) #:nodoc:
141
141
  base.class_eval("@@cache={}; @authorizations=[]; @roles=[]; @mappers=[]")
142
142
  base.send(:cattr_reader, :cache)
@@ -192,11 +192,13 @@ module Padrino
192
192
 
193
193
  def can?(request_path)
194
194
  return true if @allowed.empty?
195
+ request_path = "/" if request_path.blank?
195
196
  @allowed.any? { |path| request_path =~ /^#{path}/ } && !cannot?(request_path)
196
197
  end
197
198
 
198
199
  def cannot?(request_path)
199
200
  return false if @denied.empty?
201
+ request_path = "/" if request_path.blank?
200
202
  @denied.any? { |path| request_path =~ /^#{path}/ }
201
203
  end
202
204
 
@@ -13,7 +13,7 @@ module Padrino
13
13
  named_scope :ext_search, lambda { |params|
14
14
  conditions = nil
15
15
 
16
- if !params[:query].blank? && !params[:fields].blank?
16
+ if params[:query].present? && params[:fields].present?
17
17
  filters = params[:fields].split(",").collect { |f| "#{f} LIKE ?" }.compact
18
18
  conditions = [filters.join(" OR ")].concat((1..filters.size).collect { "%#{params[:query]}%" })
19
19
  end
@@ -47,6 +47,12 @@ module Padrino
47
47
  options[:count] ||= 1
48
48
  I18n.translate(defaults.shift, options.merge(:default => defaults, :scope => [:model, :attributes]))
49
49
  end
50
+
51
+ # Alias method for get columns
52
+ def properties
53
+ columns
54
+ end
55
+
50
56
  end
51
57
  end
52
58
 
@@ -15,9 +15,23 @@ module Padrino
15
15
  module InstanceMethods
16
16
  # This method allow us to don't see deprecations
17
17
  def new_record?; new?; end
18
+
19
+ # Returns a String, which Padrino uses for constructing an URL to this object.
20
+ # The default implementation returns this record‘s id as a String, or nil if this record‘s unsaved.
21
+ def to_param
22
+ # We can't use alias_method here, because method 'id' optimizes itself on the fly.
23
+ (id = self.id) ? id.to_s : nil # Be sure to stringify the id for routes
24
+ end
25
+
26
+ # Update attributes is deprecated but for compatibility with AR we support them.
27
+ def update_attributes(attributes = {})
28
+ update(attributes)
29
+ end
18
30
  end
19
-
31
+
20
32
  module ClassMethods
33
+ attr_accessor :_table_name
34
+
21
35
  def self_and_descendants #:nodoc:
22
36
  klass = self
23
37
  classes = [klass]
@@ -50,7 +64,7 @@ module Padrino
50
64
 
51
65
  # Return the name of the sql table
52
66
  def table_name
53
- storage_names[:default]
67
+ self.name.downcase.pluralize # storage_names[:default] this some times give an error
54
68
  end
55
69
 
56
70
  # Perform a basic fulltext search/ordering for the given columns
@@ -61,8 +75,6 @@ module Padrino
61
75
  # In this example we search in columns name, surname, company the string daddye and then we order by
62
76
  # column +name+
63
77
  def ext_search(params)
64
- params.symbolize_keys!
65
-
66
78
  # We need a basic query
67
79
  query = {}
68
80
 
@@ -78,14 +90,12 @@ module Padrino
78
90
  end
79
91
 
80
92
  def ext_paginate(params)
81
- params.symbolize_keys!
82
-
83
93
  # We need a basic query
84
94
  query = {}
85
95
 
86
96
  # First we need to sort our record
87
- if params[:sort].present? && params[:dir].to_s =~ /^(asc|desc)$/
88
- query[:order] = [params[:sort].to_sym.send(params[:dir].to_s.downcase)]
97
+ if params[:sort].present? && params[:dir].to_s =~ /^(asc|desc)$/i
98
+ query[:order] = [params[:sort].to_s.gsub(/#{table_name}\./i,'').to_sym.send(params[:dir].to_s.downcase)]
89
99
  end
90
100
 
91
101
  # Now time to limit/offset it
@@ -11,24 +11,48 @@ module Padrino
11
11
  def self.register(adapter, klass=nil)
12
12
  klass ||= Account
13
13
  case adapter
14
- when :active_record
14
+ when :activerecord
15
15
  ActiveRecord::Base.send(:include, Padrino::Admin::Adapters::Ar::Base)
16
16
  klass.send(:include, Padrino::Admin::Adapters::Ar::Account)
17
- when :data_mapper
17
+ when :datamapper
18
18
  DataMapper::Model.descendants.each { |d| d.send(:include, Padrino::Admin::Adapters::Dm::Base) }
19
19
  klass.send(:include, Padrino::Admin::Adapters::Dm::Account)
20
- when :mongo_mapper
20
+ # Not yet finished
21
+ when :mongomapper
21
22
  MongoMapper::Document.append_inclusions(Padrino::Admin::Adapters::Mm::Base)
22
23
  klass.send(:include, Padrino::Admin::Adapters::Mm::Account)
23
24
  else
24
25
  raise Padrino::Admin::AdapterError, "The adapter #{adapter.inspect} is not supported, available adapters are: " +
25
- ":active_record, :data_mapper, :mongo_mapper"
26
+ ":activerecord, :datamapper, :mongomapper"
26
27
  end
27
28
  end
28
29
 
29
30
  # Here standard extension
30
31
  module Base
31
- # TODO
32
+ def self.included(base)
33
+ base.send :include, InstanceMethods
34
+ base.extend ClassMethods
35
+ end
36
+
37
+ module InstanceMethods
38
+ end
39
+
40
+ module ClassMethods
41
+ # This method generate store and column config.
42
+ # for lazinies hands instead supply:
43
+ #
44
+ # Model.column_store("./../views/model/store.jml")
45
+ #
46
+ # you can:
47
+ #
48
+ # Model.column_store(options.views, "models/store")
49
+ def column_store(*args)
50
+ path = File.join(*args)
51
+ path = Dir[path + ".{jml,jaml}"].first.to_s if path !~ /(\.jml|\.jaml)$/
52
+ config = YAML.load_file(path)
53
+ Padrino::ExtJs::ColumnStore.new(self, config)
54
+ end
55
+ end
32
56
  end
33
57
  # Here extension for account
34
58
  #
@@ -54,7 +78,7 @@ module Padrino
54
78
  module ClassMethods
55
79
  # This method it's for authentication purpose
56
80
  def authenticate(email, password)
57
- account = first(:conditions => { :email => email })
81
+ account = first(:conditions => { :email => email }) if email.present?
58
82
  account && account.password_clean == password ? account : nil
59
83
  end
60
84
  end
@@ -0,0 +1,142 @@
1
+ module Padrino
2
+ module ExtJs
3
+ # Return column config, and store config/data for ExtJS ColumnModel and Store
4
+ class ColumnStore
5
+ attr_reader :data
6
+
7
+ def initialize(klass_model, config) #:nodoc
8
+ @model = klass_model
9
+ table_name = @model.table_name || @model.class.to_s.downcase.pluralize
10
+ @data = config["columns"].map do |column|
11
+
12
+ # Reformat our config
13
+ column["header"] ||= column["method"].to_s
14
+ column["dataIndex"] ||= column["method"]
15
+ column["sortable"] ||= column["sortable"].nil? ? true : column["sortable"]
16
+ column["header"] = @model.human_attribute_name(column["header"]) # try to translate with I18n the column name
17
+
18
+ # Try to reformat the dataIndex
19
+ data_indexes = Array(column["dataIndex"]).collect do |data_index|
20
+ if data_index =~ /\./ # if we have some like categories.names we use this
21
+ cols = data_index.split(".")
22
+ column["name"] ||= cols[0] + "[" + cols[1..-1].join("][") + "]" # accounts.name will be => accounts[name]
23
+ else
24
+ column["name"] ||= "#{table_name.singularize}[#{data_index}]"
25
+ data_index = "#{table_name}.#{data_index}"
26
+ end
27
+ data_index
28
+ end
29
+
30
+ # Now we join our data indexes
31
+ column["dataIndex"] = data_indexes.compact.uniq.join(",")
32
+
33
+ # Reformat mapping like a div id
34
+ column["mapping"] ||= column["name"].sub(/\[/,"_").sub(/\]$/, "").sub(/\]\[/,"_")
35
+
36
+ # Now is necessary for our columns an ID
37
+ # TODO: check duplicates here
38
+ column["id"] = column["mapping"]
39
+
40
+ # Finally we can return our column
41
+ column
42
+ end
43
+ end
44
+
45
+ # Return an array config for build an Ext.grid.ColumnModel() config
46
+ def column_fields
47
+ data = @data.map do |data|
48
+ data = data.dup
49
+ editor = parse_column_editor(data.delete("editor"))
50
+ renderer = parse_column_renderer(data.delete("renderer"))
51
+ data.merge!(editor) if editor
52
+ data.merge!(renderer) if renderer
53
+ data.delete("method")
54
+ data.delete("mapping")
55
+ data
56
+ end
57
+ JSON.pretty_generate(data)
58
+ end
59
+
60
+ # Return an array config for build an Ext.data.GroupingStore()
61
+ def store_fields
62
+ data = @data.map do |data|
63
+ type = parse_store_renderer(data["renderer"])
64
+ hash = { :name => data["dataIndex"] , :mapping => data["mapping"] }
65
+ hash.merge!(type) if type
66
+ hash
67
+ end
68
+ JSON.pretty_generate(data)
69
+ end
70
+
71
+ # Return data for a custom collection for the ExtJS Ext.data.GroupingStore() json
72
+ def store_data_from(collection)
73
+ collection.map do |c|
74
+ @data.dup.inject({ "id" => c.id }) do |options, data|
75
+ options[data["mapping"]] = (c.instance_eval(data["method"]) rescue I18n.t("admin.labels.not_found"))
76
+ options
77
+ end
78
+ end
79
+ end
80
+
81
+ # Return a searched and paginated data collection for the ExtJS Ext.data.GroupingStore() json
82
+ # You can pass options like:
83
+ #
84
+ # Examples
85
+ #
86
+ # store_data(params, :conditions => "found = 1")
87
+ # store_data(params, :include => :posts)
88
+ #
89
+ def store_data(params={}, options={})
90
+ # Some can tell me that this method made two identical queries one for count one for paginate.
91
+ # We don't use the select count because in some circumstances require much time than select *.
92
+ params[:limit] ||= 50
93
+ collection = @model.all(options).ext_search(params)
94
+ collection_count = collection.length
95
+ collection_paginated = collection.ext_paginate(params)
96
+ { :results => store_data_from(collection_paginated), :count => collection_count }.to_json
97
+ end
98
+
99
+ private
100
+ def parse_store_renderer(renderer)
101
+ case renderer
102
+ when "date" then { :type => "date", :dateFormat => "Y-m-d" }
103
+ when "datetime" then { :type => "date", :dateFormat => "c" }
104
+ when "time_to_date" then { :type => "date", :dateFormat => "c" }
105
+ end
106
+ end
107
+
108
+ def parse_column_editor(editor)
109
+ case editor
110
+ when "checkbox" then { :checkbox => true }
111
+ when "combo" then { :editor => "new Ext.form.ComboBox()".to_l }
112
+ when "datefield" then { :editor => "new Ext.form.DateField()".to_l }
113
+ when "numberfield" then { :editor => "new Ext.form.NumberField()".to_l }
114
+ when "radio" then { :editor => "new Ext.form.Radio()".to_l }
115
+ when "textarea" then { :editor => "new Ext.form.TextArea()".to_l }
116
+ when "textfield" then { :editor => "new Ext.form.TextField()".to_l }
117
+ when "timefield" then { :editor => "new Ext.form.TimeField()".to_l }
118
+ when "datetimefield" then { :editor => "new Ext.form.DateTimeField()".to_l }
119
+ end
120
+ end
121
+
122
+ def parse_column_renderer(renderer)
123
+ case renderer
124
+ when "time_to_date" then { :renderer => "Ext.util.Format.dateRenderer()".to_l }
125
+ when "date" then { :renderer => "Ext.util.Format.dateRenderer()".to_l }
126
+ when "datetime" then { :renderer => "Ext.util.Format.dateTimeRenderer()".to_l }
127
+ when "percentage" then { :renderer => "Ext.util.Format.percentage".to_l }
128
+ when "eur_money" then { :renderer => "Ext.util.Format.eurMoney".to_l }
129
+ when "us_money" then { :renderer => "Ext.util.Format.usMoney".to_l }
130
+ when "boolean" then { :renderer => "Ext.util.Format.boolRenderer".to_l }
131
+ when "capitalize" then { :renderer => "Ext.util.Format.capitalize".to_l }
132
+ when "file_size" then { :renderer => "Ext.util.Format.fileSize".to_l }
133
+ when "downcase" then { :renderer => "Ext.util.Format.lowercase".to_l }
134
+ when "trim" then { :renderer => "Ext.util.Format.trim".to_l }
135
+ when "undef" then { :renderer => "Ext.util.Format.undef".to_l }
136
+ when "upcase" then { :renderer => "Ext.util.Format.uppercase".to_l }
137
+ end
138
+ end
139
+
140
+ end
141
+ end
142
+ end