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
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{padrino-admin}
8
- s.version = "0.5.0"
8
+ s.version = "0.6.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
12
- s.date = %q{2010-01-06}
12
+ s.date = %q{2010-01-14}
13
13
  s.description = %q{Admin View for Padrino applications}
14
14
  s.email = %q{nesquena@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -24,28 +24,314 @@ Gem::Specification.new do |s|
24
24
  "VERSION",
25
25
  "lib/padrino-admin.rb",
26
26
  "lib/padrino-admin/access_control.rb",
27
- "lib/padrino-admin/access_control/helpers.rb",
28
27
  "lib/padrino-admin/adapters.rb",
29
28
  "lib/padrino-admin/adapters/ar.rb",
30
29
  "lib/padrino-admin/adapters/dm.rb",
31
30
  "lib/padrino-admin/adapters/mm.rb",
31
+ "lib/padrino-admin/ext_js/column_store.rb",
32
32
  "lib/padrino-admin/ext_js/config.rb",
33
- "lib/padrino-admin/ext_js/controller.rb",
34
- "lib/padrino-admin/generators/backend.rb",
35
- "lib/padrino-admin/locale/en.yml",
33
+ "lib/padrino-admin/generators/actions.rb",
34
+ "lib/padrino-admin/generators/admin_app.rb",
35
+ "lib/padrino-admin/generators/admin_page.rb",
36
+ "lib/padrino-admin/generators/app/app.rb.tt",
37
+ "lib/padrino-admin/generators/app/controllers/accounts.rb",
38
+ "lib/padrino-admin/generators/app/controllers/base.rb",
39
+ "lib/padrino-admin/generators/app/controllers/javascripts.rb",
40
+ "lib/padrino-admin/generators/app/controllers/sessions.rb",
41
+ "lib/padrino-admin/generators/app/public/flash/charts.swf",
42
+ "lib/padrino-admin/generators/app/public/flash/clippy.swf",
43
+ "lib/padrino-admin/generators/app/public/flash/expressinstall.swf",
44
+ "lib/padrino-admin/generators/app/public/images/backend/back.gif",
45
+ "lib/padrino-admin/generators/app/public/images/backend/background.png",
46
+ "lib/padrino-admin/generators/app/public/images/backend/bg-content.png",
47
+ "lib/padrino-admin/generators/app/public/images/backend/bg-hd-slate.png",
48
+ "lib/padrino-admin/generators/app/public/images/backend/bg-hd.png",
49
+ "lib/padrino-admin/generators/app/public/images/backend/bg-intro.png",
50
+ "lib/padrino-admin/generators/app/public/images/backend/bg-login.png",
51
+ "lib/padrino-admin/generators/app/public/images/backend/bg-menu-slate.png",
52
+ "lib/padrino-admin/generators/app/public/images/backend/bg-menu.png",
53
+ "lib/padrino-admin/generators/app/public/images/backend/bg.png",
54
+ "lib/padrino-admin/generators/app/public/images/backend/btn-login.png",
55
+ "lib/padrino-admin/generators/app/public/images/backend/categories.gif",
56
+ "lib/padrino-admin/generators/app/public/images/backend/delete.gif",
57
+ "lib/padrino-admin/generators/app/public/images/backend/download.gif",
58
+ "lib/padrino-admin/generators/app/public/images/backend/duplicate.gif",
59
+ "lib/padrino-admin/generators/app/public/images/backend/edit.gif",
60
+ "lib/padrino-admin/generators/app/public/images/backend/export.gif",
61
+ "lib/padrino-admin/generators/app/public/images/backend/hd-bg.gif",
62
+ "lib/padrino-admin/generators/app/public/images/backend/image.gif",
63
+ "lib/padrino-admin/generators/app/public/images/backend/loader.gif",
64
+ "lib/padrino-admin/generators/app/public/images/backend/logo-loader.png",
65
+ "lib/padrino-admin/generators/app/public/images/backend/logo-small.png",
66
+ "lib/padrino-admin/generators/app/public/images/backend/new.gif",
67
+ "lib/padrino-admin/generators/app/public/images/backend/no-image.png",
68
+ "lib/padrino-admin/generators/app/public/images/backend/preview.gif",
69
+ "lib/padrino-admin/generators/app/public/images/backend/print.gif",
70
+ "lib/padrino-admin/generators/app/public/images/backend/save.gif",
71
+ "lib/padrino-admin/generators/app/public/images/backend/support.gif",
72
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/corners-blue.gif",
73
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/corners.gif",
74
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/l-blue.gif",
75
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/l.gif",
76
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/r-blue.gif",
77
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/r.gif",
78
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/tb-blue.gif",
79
+ "lib/padrino-admin/generators/app/public/images/ext/default/box/tb.gif",
80
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/arrow.gif",
81
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/btn.gif",
82
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/group-cs.gif",
83
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/group-lr.gif",
84
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/group-tb.gif",
85
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b-noline.gif",
86
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b.gif",
87
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-bo.gif",
88
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-noline.gif",
89
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-o.gif",
90
+ "lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow.gif",
91
+ "lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-add.gif",
92
+ "lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-no.gif",
93
+ "lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-yes.gif",
94
+ "lib/padrino-admin/generators/app/public/images/ext/default/editor/tb-sprite.gif",
95
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/checkbox.gif",
96
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.gif",
97
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.psd",
98
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.gif",
99
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.psd",
100
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/error-tip-corners.gif",
101
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/exclamation.gif",
102
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/radio.gif",
103
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.gif",
104
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.psd",
105
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/text-bg.gif",
106
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/trigger-tpl.gif",
107
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.gif",
108
+ "lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.psd",
109
+ "lib/padrino-admin/generators/app/public/images/ext/default/gradient-bg.gif",
110
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/Thumbs.db",
111
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-left-white.gif",
112
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-right-white.gif",
113
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-bottom.gif",
114
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-top.gif",
115
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/columns.gif",
116
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/dirty.gif",
117
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/done.gif",
118
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-no.gif",
119
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-yes.gif",
120
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/footer-bg.gif",
121
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-hd.gif",
122
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-split.gif",
123
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-hrow.gif",
124
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-loading.gif",
125
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-split.gif",
126
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-vista-hd.gif",
127
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hd-btn.gif",
128
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow-over.gif",
129
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow.gif",
130
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-bg.gif",
131
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-sel-bg.gif",
132
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/group-by.gif",
133
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/group-expand-sprite.gif",
134
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hd-pop.gif",
135
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-asc.gif",
136
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-desc.gif",
137
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.gif",
138
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.png",
139
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.gif",
140
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.png",
141
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/invalid_line.gif",
142
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/loading.gif",
143
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/mso-hd.gif",
144
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/nowait.gif",
145
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first-disabled.gif",
146
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first.gif",
147
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last-disabled.gif",
148
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last.gif",
149
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next-disabled.gif",
150
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next.gif",
151
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev-disabled.gif",
152
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev.gif",
153
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/pick-button.gif",
154
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/refresh.gif",
155
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/row-check-sprite.gif",
156
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/row-expand-sprite.gif",
157
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/row-over.gif",
158
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/row-sel.gif",
159
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/sort-hd.gif",
160
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_asc.gif",
161
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_desc.gif",
162
+ "lib/padrino-admin/generators/app/public/images/ext/default/grid/wait.gif",
163
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/collapse.gif",
164
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/expand.gif",
165
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/gradient-bg.gif",
166
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-bottom.gif",
167
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-left.gif",
168
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-right.gif",
169
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-top.gif",
170
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-collapse.gif",
171
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-expand.gif",
172
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-close.gif",
173
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-bg.gif",
174
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-light-bg.gif",
175
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/stick.gif",
176
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/stuck.gif",
177
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close-on.gif",
178
+ "lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close.gif",
179
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/checked.gif",
180
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/group-checked.gif",
181
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/item-over.gif",
182
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/menu-parent.gif",
183
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/menu.gif",
184
+ "lib/padrino-admin/generators/app/public/images/ext/default/menu/unchecked.gif",
185
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/corners-sprite.gif",
186
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/left-right.gif",
187
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/light-hd.gif",
188
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprite-tpl.gif",
189
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprites.gif",
190
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/tools-sprites-trans.gif",
191
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.gif",
192
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.png",
193
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/white-corners-sprite.gif",
194
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/white-left-right.gif",
195
+ "lib/padrino-admin/generators/app/public/images/ext/default/panel/white-top-bottom.gif",
196
+ "lib/padrino-admin/generators/app/public/images/ext/default/progress/progress-bg.gif",
197
+ "lib/padrino-admin/generators/app/public/images/ext/default/qtip/bg.gif",
198
+ "lib/padrino-admin/generators/app/public/images/ext/default/qtip/close.gif",
199
+ "lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-anchor-sprite.gif",
200
+ "lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-sprite.gif",
201
+ "lib/padrino-admin/generators/app/public/images/ext/default/s.gif",
202
+ "lib/padrino-admin/generators/app/public/images/ext/default/shadow-c.png",
203
+ "lib/padrino-admin/generators/app/public/images/ext/default/shadow-lr.png",
204
+ "lib/padrino-admin/generators/app/public/images/ext/default/shadow.png",
205
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/blue-loading.gif",
206
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/calendar.gif",
207
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/glass-bg.gif",
208
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/hd-sprite.gif",
209
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/large-loading.gif",
210
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/left-btn.gif",
211
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/loading-balls.gif",
212
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/right-btn.gif",
213
+ "lib/padrino-admin/generators/app/public/images/ext/default/shared/warning.gif",
214
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle-dark.gif",
215
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle.gif",
216
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle-dark.gif",
217
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle.gif",
218
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle-dark.gif",
219
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle.gif",
220
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle-dark.gif",
221
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle.gif",
222
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle-dark.gif",
223
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle.gif",
224
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/square.gif",
225
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle-dark.gif",
226
+ "lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle.gif",
227
+ "lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-bg.png",
228
+ "lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-thumb.png",
229
+ "lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-bg.png",
230
+ "lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-thumb.png",
231
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-left.gif",
232
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-right.gif",
233
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroller-bg.gif",
234
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-left-bg.gif",
235
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-right-bg.gif",
236
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-left-bg.gif",
237
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-right-bg.gif",
238
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-close.gif",
239
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.gif",
240
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.png",
241
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-btm-bg.gif",
242
+ "lib/padrino-admin/generators/app/public/images/ext/default/tabs/tabs-sprite.gif",
243
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/bg.gif",
244
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow-light.gif",
245
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow.gif",
246
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-over-bg.gif",
247
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/gray-bg.gif",
248
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/more.gif",
249
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-bg.gif",
250
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-btn-sprite.gif",
251
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-btn-sprite.gif",
252
+ "lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-sep.gif",
253
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/arrows.gif",
254
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-add.gif",
255
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-between.gif",
256
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-no.gif",
257
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-over.gif",
258
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-under.gif",
259
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-yes.gif",
260
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus-nl.gif",
261
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus.gif",
262
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus-nl.gif",
263
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus.gif",
264
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end.gif",
265
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-line.gif",
266
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus-nl.gif",
267
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus.gif",
268
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus-nl.gif",
269
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus.gif",
270
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow.gif",
271
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/folder-open.gif",
272
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/folder.gif",
273
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/leaf.gif",
274
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/loading.gif",
275
+ "lib/padrino-admin/generators/app/public/images/ext/default/tree/s.gif",
276
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/icon-error.gif",
277
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/icon-info.gif",
278
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/icon-question.gif",
279
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/icon-warning.gif",
280
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.png",
281
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.psd",
282
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.png",
283
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.psd",
284
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.png",
285
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.psd",
286
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.png",
287
+ "lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.psd",
288
+ "lib/padrino-admin/generators/app/public/javascripts/controls.js",
289
+ "lib/padrino-admin/generators/app/public/javascripts/dragdrop.js",
290
+ "lib/padrino-admin/generators/app/public/javascripts/effects.js",
291
+ "lib/padrino-admin/generators/app/public/javascripts/ext.js",
292
+ "lib/padrino-admin/generators/app/public/javascripts/prototype.js",
293
+ "lib/padrino-admin/generators/app/public/stylesheets/admin.css",
294
+ "lib/padrino-admin/generators/app/public/stylesheets/ext.css",
295
+ "lib/padrino-admin/generators/app/public/stylesheets/login.css",
296
+ "lib/padrino-admin/generators/app/public/stylesheets/standard.css",
297
+ "lib/padrino-admin/generators/app/views/accounts/_form.haml",
298
+ "lib/padrino-admin/generators/app/views/accounts/edit.haml",
299
+ "lib/padrino-admin/generators/app/views/accounts/grid.js.erb",
300
+ "lib/padrino-admin/generators/app/views/accounts/new.haml",
301
+ "lib/padrino-admin/generators/app/views/accounts/store.jml",
302
+ "lib/padrino-admin/generators/app/views/base/dashboard.haml",
303
+ "lib/padrino-admin/generators/app/views/base/index.haml",
304
+ "lib/padrino-admin/generators/app/views/javascripts/admin.js.erb",
305
+ "lib/padrino-admin/generators/app/views/javascripts/locale.js.erb",
306
+ "lib/padrino-admin/generators/app/views/sessions/new.haml",
307
+ "lib/padrino-admin/generators/templates/controller.rb.tt",
308
+ "lib/padrino-admin/generators/templates/db/seeds.rb.tt",
309
+ "lib/padrino-admin/generators/templates/models/account.rb.tt",
310
+ "lib/padrino-admin/generators/templates/views/_form.haml.tt",
311
+ "lib/padrino-admin/generators/templates/views/edit.haml.tt",
312
+ "lib/padrino-admin/generators/templates/views/grid.js.erb.tt",
313
+ "lib/padrino-admin/generators/templates/views/new.haml.tt",
314
+ "lib/padrino-admin/generators/templates/views/store.jml.tt",
315
+ "lib/padrino-admin/helpers/authentication.rb",
316
+ "lib/padrino-admin/helpers/view.rb",
317
+ "lib/padrino-admin/locale/admin/en.yml",
318
+ "lib/padrino-admin/locale/extjs/en.yml",
36
319
  "lib/padrino-admin/utils/crypt.rb",
320
+ "lib/padrino-admin/utils/literal.rb",
37
321
  "padrino-admin.gemspec",
38
322
  "test/fixtures/active_record.rb",
39
323
  "test/fixtures/data_mapper.rb",
40
324
  "test/fixtures/mongo_mapper.rb",
325
+ "test/fixtures/test_column_store.jml",
326
+ "test/fixtures/test_generic.jml",
327
+ "test/fixtures/test_javascript.jml",
41
328
  "test/helper.rb",
42
329
  "test/test_access_control.rb",
43
330
  "test/test_active_record.rb",
44
331
  "test/test_admin_application.rb",
45
- "test/test_controller.rb",
332
+ "test/test_column_store.rb",
46
333
  "test/test_data_mapper.rb",
47
- "test/test_mongo_mapper.rb",
48
- "test/test_parsing.rb"
334
+ "test/test_mongo_mapper.rb"
49
335
  ]
50
336
  s.homepage = %q{http://github.com/padrino/padrino-framework/tree/master/padrino-admin}
51
337
  s.rdoc_options = ["--charset=UTF-8"]
@@ -59,8 +345,9 @@ Gem::Specification.new do |s|
59
345
 
60
346
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
347
  s.add_runtime_dependency(%q<json_pure>, [">= 1.2.0"])
62
- s.add_runtime_dependency(%q<padrino-core>, [">= 0.1.1"])
63
- s.add_development_dependency(%q<dm-core>, [">= 0.10.2"])
348
+ s.add_runtime_dependency(%q<padrino-core>, ["= 0.6.1"])
349
+ s.add_runtime_dependency(%q<padrino-gen>, ["= 0.6.1"])
350
+ s.add_runtime_dependency(%q<tilt>, [">= 0.4"])
64
351
  s.add_development_dependency(%q<haml>, [">= 2.2.1"])
65
352
  s.add_development_dependency(%q<shoulda>, [">= 0"])
66
353
  s.add_development_dependency(%q<mocha>, [">= 0.9.7"])
@@ -68,8 +355,9 @@ Gem::Specification.new do |s|
68
355
  s.add_development_dependency(%q<webrat>, [">= 0.5.1"])
69
356
  else
70
357
  s.add_dependency(%q<json_pure>, [">= 1.2.0"])
71
- s.add_dependency(%q<padrino-core>, [">= 0.1.1"])
72
- s.add_dependency(%q<dm-core>, [">= 0.10.2"])
358
+ s.add_dependency(%q<padrino-core>, ["= 0.6.1"])
359
+ s.add_dependency(%q<padrino-gen>, ["= 0.6.1"])
360
+ s.add_dependency(%q<tilt>, [">= 0.4"])
73
361
  s.add_dependency(%q<haml>, [">= 2.2.1"])
74
362
  s.add_dependency(%q<shoulda>, [">= 0"])
75
363
  s.add_dependency(%q<mocha>, [">= 0.9.7"])
@@ -78,8 +366,9 @@ Gem::Specification.new do |s|
78
366
  end
79
367
  else
80
368
  s.add_dependency(%q<json_pure>, [">= 1.2.0"])
81
- s.add_dependency(%q<padrino-core>, [">= 0.1.1"])
82
- s.add_dependency(%q<dm-core>, [">= 0.10.2"])
369
+ s.add_dependency(%q<padrino-core>, ["= 0.6.1"])
370
+ s.add_dependency(%q<padrino-gen>, ["= 0.6.1"])
371
+ s.add_dependency(%q<tilt>, [">= 0.4"])
83
372
  s.add_dependency(%q<haml>, [">= 2.2.1"])
84
373
  s.add_dependency(%q<shoulda>, [">= 0"])
85
374
  s.add_dependency(%q<mocha>, [">= 0.9.7"])
@@ -14,4 +14,4 @@ ActiveRecord::Schema.define do
14
14
  end
15
15
 
16
16
  class Account < ActiveRecord::Base; end
17
- Padrino::Admin::Adapters.register(:active_record)
17
+ Padrino::Admin::Adapters.register(:activerecord)
@@ -21,7 +21,7 @@ class Account
21
21
  def self.editor; first(:role => "Editor"); end
22
22
  end
23
23
 
24
- Padrino::Admin::Adapters.register(:data_mapper)
24
+ Padrino::Admin::Adapters.register(:datamapper)
25
25
  DataMapper.auto_migrate!
26
26
 
27
27
  # We build some fake accounts
@@ -9,4 +9,4 @@ class Account
9
9
  end
10
10
 
11
11
  Account.collection.remove
12
- Padrino::Admin::Adapters.register(:mongo_mapper)
12
+ Padrino::Admin::Adapters.register(:mongomapper)
@@ -0,0 +1,10 @@
1
+ columns:
2
+ - method: name.upcase
3
+ header: Name Upcase
4
+ dataIndex: name
5
+ - method: surname
6
+ - method: category.name
7
+ - method: email
8
+ header: E-mail
9
+ sortable: false
10
+ - method: role
@@ -0,0 +1,7 @@
1
+ nested:
2
+ fn: !js function(){ alert('nested fn') }
3
+ fn: !js function(){ alert('fn') }
4
+ array: [!js function(){ alert('array') }, perfect]
5
+ test_one: %fn
6
+ test_two: %nested/fn
7
+ test_three: <%= @foo %>
@@ -0,0 +1,81 @@
1
+ # Set grouping view
2
+ # var gw = new Ext.grid.GroupingView({ forceFit: false });
3
+ gw: !groupingView
4
+ forceFit: false
5
+
6
+ # Set app title
7
+ # Admin.app.setTitle('List Ecommerces');
8
+ eval: !title List Ecommerces
9
+
10
+ # Set grid toolbar
11
+ # var tbar = new Ext.Toolbar({
12
+ # buttons: [{
13
+ # handler: add,
14
+ # text: Admin.locale.buttons.add,
15
+ # disabled: false,
16
+ # cls: "x-btn-text-icon add",
17
+ # id: "add"
18
+ # },{
19
+ # handler: edit,
20
+ # text: Admin.locale.buttons.edit,
21
+ # disabled: true,
22
+ # cls: "x-btn-text-icon edit",
23
+ # id: "edit"
24
+ # },{
25
+ # handler: remove,
26
+ # text: Admin.locale.buttons.remove,
27
+ # disabled: true,
28
+ # cls: "x-btn-text-icon remove",
29
+ # id: "remove"
30
+ # }]
31
+ # });
32
+ tbar: !toolbar # you can provide => {except: edit} or {only: [edit, add]}
33
+
34
+ # Set our selection model
35
+ # var sm = new Ext.grid.CheckboxSelectionModel();
36
+ sm: !checkBoxSelectionModel;
37
+
38
+ # Grouping Store
39
+ store: !groupingStore
40
+ url: /admin/ecommerces.json
41
+ reader: !jsonReader
42
+ fields: <%= @store.store_fields %>
43
+
44
+ # Paging toolbar
45
+ bbar: !pagingToolbar
46
+
47
+ # Grid
48
+ gridPanel:
49
+ Ext.grid.GridPanel:
50
+ bbar: bbar
51
+ clicksToEdit: 1
52
+ cm: cm
53
+ region: "center"
54
+ sm: sm
55
+ viewConfig: { "forceFit":true }
56
+ plugins: [new Ext.grid.Search()]
57
+ border: false
58
+ tbar: tbar
59
+ id: "grid-ecommerces"
60
+ bodyBorder: false
61
+ store: store
62
+ view: gw
63
+
64
+ # Fix an issue with some browser
65
+ eval: "gridPanel.on('dblclick', function() { setTimeout(function() { edit() }, 200);"
66
+
67
+ # Enable disable toolbar buttons when necessary
68
+ eval: |
69
+ gridPanelCheckboxSelectionModel.on('selectionchange', function(){
70
+ var n = gridPanelCheckboxSelectionModel.getSelected();
71
+ var btns = gridPanelToolbar.items.map;
72
+ if(!n){
73
+ btns.remove.disable();
74
+ btns.edit.disable();
75
+ return;
76
+ } else {
77
+ btns.remove.enable();
78
+ btns.edit.enable();
79
+ return;
80
+ }
81
+ });
data/test/helper.rb CHANGED
@@ -23,8 +23,7 @@ module Kernel
23
23
  def load_fixture(file)
24
24
  Object.send(:remove_const, :Account) if defined?(Account)
25
25
  file += ".rb" if file !~ /.rb$/
26
- load File.join(File.dirname(__FILE__), "fixtures", file)
27
- # silence_stdout { }
26
+ silence_stdout { load File.join(File.dirname(__FILE__), "fixtures", file) }
28
27
  end
29
28
  end
30
29
 
@@ -40,8 +39,8 @@ class Test::Unit::TestCase
40
39
  # given. Used in setup or individual spec methods to establish
41
40
  # the application.
42
41
  def mock_app(base=Padrino::Application, &block)
43
- base.use Rack::Session::Cookie # Need this because Sinatra 0.9.4 have use Rack::Session::Cookie if sessions? && !test?
44
42
  @app = Sinatra.new(base, &block)
43
+ @app.use Rack::Session::Cookie if Sinatra::VERSION =~ /0\.9\.\d+/ # Need this because Sinatra 0.9.x have use Rack::Session::Cookie if sessions? && !test?
45
44
  end
46
45
 
47
46
  def app
@@ -10,7 +10,7 @@ class TestAdminApplication < Test::Unit::TestCase
10
10
  mock_app do
11
11
  enable :authentication
12
12
  set :app_name, :test_me
13
- set :use_orm, :data_mapper
13
+ set :use_orm, :datamapper
14
14
 
15
15
  # Do a simple mapping
16
16
  access_control.roles_for :any do |role|
@@ -0,0 +1,41 @@
1
+ require 'helper'
2
+
3
+ class TestController < Test::Unit::TestCase
4
+
5
+ def setup
6
+ load_fixture 'data_mapper'
7
+ config = YAML.load <<-YAML
8
+ columns:
9
+ - method: name.upcase
10
+ header: Name Upcase
11
+ dataIndex: name
12
+ - method: surname
13
+ - method: category.name
14
+ - method: email
15
+ header: E-mail
16
+ sortable: false
17
+ - method: role
18
+ YAML
19
+ @column_store = Padrino::ExtJs::ColumnStore.new(Account, config)
20
+ @column_store_direct = Account.column_store("test/fixtures/test_column_store.jml")
21
+ end
22
+
23
+ should 'have correct column fileds' do
24
+ result = "[{\"name\":\"account[name]\",\"header\":\"Name upcase\",\"sortable\":true,\"id\":\"account_name\",\"dataIndex\":\"accounts.name\"},{\"name\":\"account[surname]\",\"header\":\"Surname\",\"sortable\":true,\"id\":\"account_surname\",\"dataIndex\":\"accounts.surname\"},{\"name\":\"category[name]\",\"header\":\"Category.name\",\"sortable\":true,\"id\":\"category_name\",\"dataIndex\":\"category.name\"},{\"name\":\"account[email]\",\"header\":\"E-mail\",\"sortable\":false,\"id\":\"account_email\",\"dataIndex\":\"accounts.email\"},{\"name\":\"account[role]\",\"header\":\"Role\",\"sortable\":true,\"id\":\"account_role\",\"dataIndex\":\"accounts.role\"}]"
25
+ assert_equal result, @column_store.column_fields
26
+ assert_equal result, @column_store_direct.column_fields
27
+ end
28
+
29
+ should 'have correct store fields' do
30
+ result = "[{\"mapping\":\"account_name\",\"name\":\"accounts.name\"},{\"mapping\":\"account_surname\",\"name\":\"accounts.surname\"},{\"mapping\":\"category_name\",\"name\":\"category.name\"},{\"mapping\":\"account_email\",\"name\":\"accounts.email\"},{\"mapping\":\"account_role\",\"name\":\"accounts.role\"}]"
31
+ assert_equal result, @column_store.store_fields
32
+ assert_equal result, @column_store_direct.store_fields
33
+ end
34
+
35
+ should 'store data' do
36
+ result = "{\"count\":2,\"results\":[{\"account_surname\":\"Not found\",\"account_email\":\"d.dagostino@lipsiasoft.com\",\"category_name\":\"Not found\",\"id\":1,\"account_role\":\"Admin\",\"account_name\":\"DADDYE\"},{\"account_surname\":\"Not found\",\"account_email\":\"editor@lipsiasoft.com\",\"category_name\":\"Not found\",\"id\":2,\"account_role\":\"Editor\",\"account_name\":\"DEXTER\"}]}"
37
+ assert_equal result, @column_store.store_data(:fields => "name,role", :query => "d", :sort => :name, :dir => :asc, :limit => 2, :offset => 0)
38
+ assert_equal result, @column_store_direct.store_data(:fields => "name,role", :query => "d", :sort => :name, :dir => :asc, :limit => 2, :offset => 0)
39
+ end
40
+
41
+ end