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