activeadministration 0.0.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.
- checksums.yaml +7 -0
- data/.gitignore +47 -0
- data/.travis.yml +19 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1074 -0
- data/CONTRIBUTING.md +139 -0
- data/Gemfile +52 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.md +8 -0
- data/Rakefile +33 -0
- data/activeadministration.gemspec +34 -0
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/application.js.coffee +30 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +36 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +85 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +75 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +36 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +42 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +329 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +127 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +111 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +46 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +14 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +27 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +17 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +23 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
- data/config/locales/bg.yml +102 -0
- data/config/locales/bs.yml +121 -0
- data/config/locales/ca.yml +102 -0
- data/config/locales/cs.yml +106 -0
- data/config/locales/da.yml +103 -0
- data/config/locales/de-CH.yml +118 -0
- data/config/locales/de.yml +143 -0
- data/config/locales/el.yml +111 -0
- data/config/locales/en-GB.yml +95 -0
- data/config/locales/en.yml +117 -0
- data/config/locales/es.yml +127 -0
- data/config/locales/es_MX.yml +110 -0
- data/config/locales/fi.yml +110 -0
- data/config/locales/fr.yml +109 -0
- data/config/locales/he.yml +92 -0
- data/config/locales/hr.yml +121 -0
- data/config/locales/hu.yml +96 -0
- data/config/locales/it.yml +114 -0
- data/config/locales/ja.yml +114 -0
- data/config/locales/ko.yml +85 -0
- data/config/locales/lt.yml +118 -0
- data/config/locales/lv.yml +90 -0
- data/config/locales/nl.yml +94 -0
- data/config/locales/no-NB.yml +111 -0
- data/config/locales/pl.yml +100 -0
- data/config/locales/pt-BR.yml +117 -0
- data/config/locales/pt-PT.yml +90 -0
- data/config/locales/ro.yml +94 -0
- data/config/locales/ru.yml +121 -0
- data/config/locales/sv-SE.yml +90 -0
- data/config/locales/tr.yml +94 -0
- data/config/locales/uk.yml +121 -0
- data/config/locales/vi.yml +91 -0
- data/config/locales/zh-CN.yml +112 -0
- data/config/locales/zh-TW.yml +94 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +84 -0
- data/docs/1-general-configuration.md +138 -0
- data/docs/10-custom-pages.md +84 -0
- data/docs/11-decorators.md +50 -0
- data/docs/12-arbre-components.md +150 -0
- data/docs/13-authorization-adapter.md +239 -0
- data/docs/2-resource-customization.md +359 -0
- data/docs/3-index-pages.md +245 -0
- data/docs/3-index-pages/create-an-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +21 -0
- data/docs/3-index-pages/index-as-blog.md +71 -0
- data/docs/3-index-pages/index-as-grid.md +29 -0
- data/docs/3-index-pages/index-as-table.md +163 -0
- data/docs/4-csv-format.md +39 -0
- data/docs/5-forms.md +118 -0
- data/docs/6-show-pages.md +77 -0
- data/docs/7-sidebars.md +63 -0
- data/docs/8-custom-actions.md +159 -0
- data/docs/9-batch-actions.md +233 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +66 -0
- data/features/breadcrumb.feature +75 -0
- data/features/comments/commenting.feature +159 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +41 -0
- data/features/development_reloading.feature +31 -0
- data/features/edit_page.feature +114 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +43 -0
- data/features/index/batch_actions.feature +123 -0
- data/features/index/filters.feature +138 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +66 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +208 -0
- data/features/index/index_blank_slate.feature +83 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +251 -0
- data/features/index/page_title.feature +41 -0
- data/features/index/pagination.feature +59 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/new_page.feature +106 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +58 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +93 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +82 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/batch_action_steps.rb +55 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/comment_steps.rb +12 -0
- data/features/step_definitions/configuration_steps.rb +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +34 -0
- data/features/step_definitions/filter_steps.rb +17 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +45 -0
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/index_scope_steps.rb +21 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +12 -0
- data/features/step_definitions/site_title_steps.rb +15 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +119 -0
- data/features/step_definitions/user_steps.rb +41 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +72 -0
- data/features/support/env.rb +119 -0
- data/features/support/paths.rb +71 -0
- data/features/support/selectors.rb +45 -0
- data/features/symbol_leak.feature +35 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +135 -0
- data/lib/active_admin/abstract_view_factory.rb +86 -0
- data/lib/active_admin/application.rb +250 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +132 -0
- data/lib/active_admin/base_controller.rb +78 -0
- data/lib/active_admin/base_controller/authorization.rb +151 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +29 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +154 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +57 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/callbacks.rb +84 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +70 -0
- data/lib/active_admin/dependencies.rb +38 -0
- data/lib/active_admin/deprecation.rb +35 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +165 -0
- data/lib/active_admin/engine.rb +7 -0
- data/lib/active_admin/error.rb +22 -0
- data/lib/active_admin/event.rb +33 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +87 -0
- data/lib/active_admin/filters/formtastic_addons.rb +73 -0
- data/lib/active_admin/filters/resource_extension.rb +135 -0
- data/lib/active_admin/form_builder.rb +185 -0
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +106 -0
- data/lib/active_admin/iconic.rb +54 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filter_base.rb +40 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +48 -0
- data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
- data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
- data/lib/active_admin/inputs/filter_select_input.rb +53 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -0
- data/lib/active_admin/menu.rb +107 -0
- data/lib/active_admin/menu_collection.rb +96 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +231 -0
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +3 -0
- data/lib/active_admin/orm/active_record/comments.rb +84 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +49 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +88 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +42 -0
- data/lib/active_admin/resource.rb +156 -0
- data/lib/active_admin/resource/action_items.rb +91 -0
- data/lib/active_admin/resource/belongs_to.rb +36 -0
- data/lib/active_admin/resource/controllers.rb +18 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +84 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +19 -0
- data/lib/active_admin/resource/routes.rb +99 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +50 -0
- data/lib/active_admin/resource/sidebars.rb +28 -0
- data/lib/active_admin/resource_collection.rb +70 -0
- data/lib/active_admin/resource_controller.rb +50 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +284 -0
- data/lib/active_admin/resource_controller/decorators.rb +100 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_dsl.rb +171 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +57 -0
- data/lib/active_admin/sidebar_section.rb +45 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -0
- data/lib/active_admin/view_helpers.rb +21 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +37 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +27 -0
- data/lib/active_admin/view_helpers/display_helper.rb +64 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
- data/lib/active_admin/view_helpers/form_helper.rb +21 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +105 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +157 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +126 -0
- data/lib/active_admin/views/components/panel.rb +34 -0
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +29 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +67 -0
- data/lib/active_admin/views/components/table_for.rb +212 -0
- data/lib/active_admin/views/footer.rb +20 -0
- data/lib/active_admin/views/header.rb +32 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +156 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +277 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +163 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +59 -0
- data/lib/active_admin/views/tabbed_navigation.rb +62 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
- data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +66 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +243 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +17 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +44 -0
- data/script/use_rails +53 -0
- data/spec/integration/default_namespace_spec.rb +61 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/memory_spec.rb +29 -0
- data/spec/integration/stylesheets_spec.rb +18 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +182 -0
- data/spec/spec_helper_without_rails.rb +16 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +42 -0
- data/spec/support/integration_example_group.rb +31 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +117 -0
- data/spec/support/rails_template_with_data.rb +59 -0
- data/spec/support/templates/admin/stores.rb +11 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/support/templates/cucumber_with_reloading.rb +5 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +11 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +126 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +140 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
- data/spec/unit/auto_link_spec.rb +34 -0
- data/spec/unit/batch_actions/resource_spec.rb +92 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +42 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +144 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +37 -0
- data/spec/unit/csv_builder_spec.rb +134 -0
- data/spec/unit/devise_spec.rb +116 -0
- data/spec/unit/dsl_spec.rb +61 -0
- data/spec/unit/event_spec.rb +47 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +418 -0
- data/spec/unit/filters/resource_spec.rb +121 -0
- data/spec/unit/form_builder_spec.rb +576 -0
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +71 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +74 -0
- data/spec/unit/namespace/register_resource_spec.rb +163 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/order_clause_spec.rb +57 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +72 -0
- data/spec/unit/pretty_format_spec.rb +63 -0
- data/spec/unit/pundit_adapter_spec.rb +36 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +122 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +73 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +158 -0
- data/spec/unit/resource_controller/data_access_spec.rb +73 -0
- data/spec/unit/resource_controller/decorators_spec.rb +86 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +265 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +263 -0
- data/spec/unit/routing_spec.rb +172 -0
- data/spec/unit/scope_spec.rb +114 -0
- data/spec/unit/settings_spec.rb +88 -0
- data/spec/unit/view_factory_spec.rb +21 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +180 -0
- data/spec/unit/view_helpers/display_name_spec.rb +68 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +97 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +29 -0
- data/spec/unit/views/components/attributes_table_spec.rb +259 -0
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +17 -0
- data/spec/unit/views/components/columns_spec.rb +172 -0
- data/spec/unit/views/components/index_list_spec.rb +32 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +229 -0
- data/spec/unit/views/components/panel_spec.rb +51 -0
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +47 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +102 -0
- data/spec/unit/views/components/table_for_spec.rb +242 -0
- data/spec/unit/views/pages/form_spec.rb +35 -0
- data/spec/unit/views/pages/layout_spec.rb +63 -0
- data/spec/unit/views/pages/show_spec.rb +20 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
- data/tasks/docs.rake +37 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +7 -0
- metadata +741 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class AbstractViewFactory
|
|
3
|
+
@@default_views = {}
|
|
4
|
+
|
|
5
|
+
def self.register(view_hash)
|
|
6
|
+
view_hash.each do |view_key, view_class|
|
|
7
|
+
@@default_views[view_key] = view_class
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
12
|
+
@views = {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Register a new view key with the view factory
|
|
16
|
+
#
|
|
17
|
+
# eg:
|
|
18
|
+
#
|
|
19
|
+
# factory = AbstractViewFactory.new
|
|
20
|
+
# factory.register my_view: SomeViewClass
|
|
21
|
+
#
|
|
22
|
+
# You can setup many at the same time:
|
|
23
|
+
#
|
|
24
|
+
# factory.register my_view: SomeClass,
|
|
25
|
+
# another_view: OtherViewClass
|
|
26
|
+
#
|
|
27
|
+
def register(view_hash)
|
|
28
|
+
view_hash.each do |view_key, view_class|
|
|
29
|
+
@views[view_key] = view_class
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def default_for(key)
|
|
34
|
+
@@default_views[key.to_sym]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def has_key?(key)
|
|
38
|
+
@views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def [](key)
|
|
42
|
+
get_view_for_key(key)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def []=(key, value)
|
|
46
|
+
set_view_for_key(key, value)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Override respond to to include keys
|
|
50
|
+
def respond_to?(method)
|
|
51
|
+
key = key_from_method_name(method)
|
|
52
|
+
if has_key?(key)
|
|
53
|
+
true
|
|
54
|
+
else
|
|
55
|
+
super
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def method_missing(method, *args)
|
|
62
|
+
key = key_from_method_name(method)
|
|
63
|
+
if has_key?(key)
|
|
64
|
+
if method.to_s.include?('=')
|
|
65
|
+
set_view_for_key key, args.first
|
|
66
|
+
else
|
|
67
|
+
get_view_for_key key
|
|
68
|
+
end
|
|
69
|
+
else
|
|
70
|
+
super
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def key_from_method_name(method)
|
|
75
|
+
method.to_s.gsub('=', '').to_sym
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def get_view_for_key(key)
|
|
79
|
+
@views[key.to_sym] || @@default_views[key.to_sym]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def set_view_for_key(key, view)
|
|
83
|
+
@views[key.to_sym] = view
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
require 'active_admin/router'
|
|
2
|
+
require 'active_admin/helpers/settings'
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
class Application
|
|
6
|
+
include Settings
|
|
7
|
+
include Settings::Inheritance
|
|
8
|
+
|
|
9
|
+
settings_inherited_by Namespace
|
|
10
|
+
|
|
11
|
+
# The default namespace to put controllers and routes inside. Set this
|
|
12
|
+
# in config/initializers/active_admin.rb using:
|
|
13
|
+
#
|
|
14
|
+
# config.default_namespace = :super_admin
|
|
15
|
+
#
|
|
16
|
+
setting :default_namespace, :admin
|
|
17
|
+
|
|
18
|
+
attr_reader :namespaces
|
|
19
|
+
def initialize
|
|
20
|
+
@namespaces = {}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Load paths for admin configurations. Add folders to this load path
|
|
24
|
+
# to load up other resources for administration. External gems can
|
|
25
|
+
# include their paths in this load path to provide active_admin UIs
|
|
26
|
+
setting :load_paths, [File.expand_path('app/admin', Rails.root)]
|
|
27
|
+
|
|
28
|
+
# The default number of resources to display on index pages
|
|
29
|
+
inheritable_setting :default_per_page, 30
|
|
30
|
+
|
|
31
|
+
# The title which gets displayed in the main layout
|
|
32
|
+
inheritable_setting :site_title, ""
|
|
33
|
+
|
|
34
|
+
# Set the site title link href (defaults to AA dashboard)
|
|
35
|
+
inheritable_setting :site_title_link, ""
|
|
36
|
+
|
|
37
|
+
# Set the site title image displayed in the main layout (has precendence over :site_title)
|
|
38
|
+
inheritable_setting :site_title_image, ""
|
|
39
|
+
|
|
40
|
+
# Set a favicon
|
|
41
|
+
inheritable_setting :favicon, false
|
|
42
|
+
|
|
43
|
+
# The view factory to use to generate all the view classes. Take
|
|
44
|
+
# a look at ActiveAdmin::ViewFactory
|
|
45
|
+
inheritable_setting :view_factory, ActiveAdmin::ViewFactory.new
|
|
46
|
+
|
|
47
|
+
# The method to call in controllers to get the current user
|
|
48
|
+
inheritable_setting :current_user_method, false
|
|
49
|
+
|
|
50
|
+
# The method to call in the controllers to ensure that there
|
|
51
|
+
# is a currently authenticated admin user
|
|
52
|
+
inheritable_setting :authentication_method, false
|
|
53
|
+
|
|
54
|
+
# The path to log user's out with. If set to a symbol, we assume
|
|
55
|
+
# that it's a method to call which returns the path
|
|
56
|
+
inheritable_setting :logout_link_path, :destroy_admin_user_session_path
|
|
57
|
+
|
|
58
|
+
# The method to use when generating the link for user logout
|
|
59
|
+
inheritable_setting :logout_link_method, :get
|
|
60
|
+
|
|
61
|
+
# Whether the batch actions are enabled or not
|
|
62
|
+
inheritable_setting :batch_actions, false
|
|
63
|
+
|
|
64
|
+
# Whether filters are enabled
|
|
65
|
+
inheritable_setting :filters, true
|
|
66
|
+
|
|
67
|
+
# The namespace root.
|
|
68
|
+
inheritable_setting :root_to, 'dashboard#index'
|
|
69
|
+
|
|
70
|
+
# Display breadcrumbs
|
|
71
|
+
inheritable_setting :breadcrumb, true
|
|
72
|
+
|
|
73
|
+
# Default CSV options
|
|
74
|
+
inheritable_setting :csv_options, {col_sep: ','}
|
|
75
|
+
|
|
76
|
+
# Default Download Links options
|
|
77
|
+
inheritable_setting :download_links, true
|
|
78
|
+
|
|
79
|
+
# The authorization adapter to use
|
|
80
|
+
inheritable_setting :authorization_adapter, ActiveAdmin::AuthorizationAdapter
|
|
81
|
+
|
|
82
|
+
# A proc to be used when a user is not authorized to view the current resource
|
|
83
|
+
inheritable_setting :on_unauthorized_access, :rescue_active_admin_access_denied
|
|
84
|
+
|
|
85
|
+
# Active Admin makes educated guesses when displaying objects, this is
|
|
86
|
+
# the list of methods it tries calling in order
|
|
87
|
+
setting :display_name_methods, [ :display_name,
|
|
88
|
+
:full_name,
|
|
89
|
+
:name,
|
|
90
|
+
:username,
|
|
91
|
+
:login,
|
|
92
|
+
:title,
|
|
93
|
+
:email,
|
|
94
|
+
:to_s ]
|
|
95
|
+
|
|
96
|
+
# == Deprecated Settings
|
|
97
|
+
|
|
98
|
+
# (none currently)
|
|
99
|
+
|
|
100
|
+
include AssetRegistration
|
|
101
|
+
|
|
102
|
+
# Event that gets triggered on load of Active Admin
|
|
103
|
+
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
|
104
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
|
105
|
+
|
|
106
|
+
# Runs before the app's AA initializer
|
|
107
|
+
def setup!
|
|
108
|
+
register_default_assets
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Runs after the app's AA initializer
|
|
112
|
+
def prepare!
|
|
113
|
+
remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
114
|
+
attach_reloader
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Registers a brand new configuration for the given resource.
|
|
118
|
+
def register(resource, options = {}, &block)
|
|
119
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
120
|
+
namespace(ns).register resource, options, &block
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Creates a namespace for the given name
|
|
124
|
+
#
|
|
125
|
+
# Yields the namespace if a block is given
|
|
126
|
+
#
|
|
127
|
+
# @returns [Namespace] the new or existing namespace
|
|
128
|
+
def namespace(name)
|
|
129
|
+
name ||= :root
|
|
130
|
+
|
|
131
|
+
if namespaces[name]
|
|
132
|
+
namespace = namespaces[name]
|
|
133
|
+
else
|
|
134
|
+
namespace = namespaces[name] = Namespace.new(self, name)
|
|
135
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
yield(namespace) if block_given?
|
|
139
|
+
|
|
140
|
+
namespace
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Register a page
|
|
144
|
+
#
|
|
145
|
+
# @param name [String] The page name
|
|
146
|
+
# @options [Hash] Accepts option :namespace.
|
|
147
|
+
# @&block The registration block.
|
|
148
|
+
#
|
|
149
|
+
def register_page(name, options = {}, &block)
|
|
150
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
151
|
+
namespace(ns).register_page name, options, &block
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Whether all configuration files have been loaded
|
|
155
|
+
def loaded?
|
|
156
|
+
@@loaded ||= false
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Removes all defined controllers from memory. Useful in
|
|
160
|
+
# development, where they are reloaded on each request.
|
|
161
|
+
def unload!
|
|
162
|
+
namespaces.values.each &:unload!
|
|
163
|
+
@@loaded = false
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Loads all ruby files that are within the load_paths setting.
|
|
167
|
+
# To reload everything simply call `ActiveAdmin.unload!`
|
|
168
|
+
def load!
|
|
169
|
+
unless loaded?
|
|
170
|
+
ActiveAdmin::Event.dispatch BeforeLoadEvent, self # before_load hook
|
|
171
|
+
files.each{ |file| load file } # load files
|
|
172
|
+
namespace(default_namespace) # init AA resources
|
|
173
|
+
ActiveAdmin::Event.dispatch AfterLoadEvent, self # after_load hook
|
|
174
|
+
@@loaded = true
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def load(file)
|
|
179
|
+
super
|
|
180
|
+
rescue ActiveRecord::StatementInvalid => exception
|
|
181
|
+
raise DatabaseHitDuringLoad.new exception
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Returns ALL the files to be loaded
|
|
185
|
+
def files
|
|
186
|
+
load_paths.flatten.compact.uniq.map{ |path| Dir["#{path}/**/*.rb"] }.flatten
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def router
|
|
190
|
+
@router ||= Router.new(self)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# One-liner called by user's config/routes.rb file
|
|
194
|
+
def routes(rails_router)
|
|
195
|
+
load!
|
|
196
|
+
router.apply(rails_router)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Adds before, around and after filters to all controllers.
|
|
200
|
+
# Example usage:
|
|
201
|
+
# ActiveAdmin.before_filter :authenticate_admin!
|
|
202
|
+
#
|
|
203
|
+
%w(before_filter skip_before_filter after_filter skip_after_filter around_filter skip_filter).each do |name|
|
|
204
|
+
define_method name do |*args, &block|
|
|
205
|
+
ActiveAdmin::BaseController.send name, *args, &block
|
|
206
|
+
ActiveAdmin::Devise::PasswordsController.send name, *args, &block
|
|
207
|
+
ActiveAdmin::Devise::SessionsController.send name, *args, &block
|
|
208
|
+
ActiveAdmin::Devise::UnlocksController.send name, *args, &block
|
|
209
|
+
ActiveAdmin::Devise::RegistrationsController.send name, *args, &block
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
private
|
|
214
|
+
|
|
215
|
+
def register_default_assets
|
|
216
|
+
register_stylesheet 'active_admin.css', media: 'screen'
|
|
217
|
+
register_stylesheet 'active_admin/print.css', media: 'print'
|
|
218
|
+
|
|
219
|
+
register_javascript 'active_admin.js'
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Since app/admin is alphabetically before app/models, we have to remove it
|
|
223
|
+
# from the host app's +autoload_paths+ to prevent missing constant errors.
|
|
224
|
+
#
|
|
225
|
+
# As well, we have to remove it from +eager_load_paths+ to prevent the
|
|
226
|
+
# files from being loaded twice in production.
|
|
227
|
+
def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
228
|
+
ActiveSupport::Dependencies.autoload_paths -= load_paths
|
|
229
|
+
Rails.application.config.eager_load_paths -= load_paths
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Hooks the app/admin directory into our Rails Engine's +watchable_dirs+, so the
|
|
233
|
+
# files are automatically reloaded in your development environment.
|
|
234
|
+
#
|
|
235
|
+
# If files have changed on disk, we forcibly unload all AA configurations, and
|
|
236
|
+
# tell the host application to redraw routes (triggering AA itself to reload).
|
|
237
|
+
def attach_reloader
|
|
238
|
+
load_paths.each do |path|
|
|
239
|
+
ActiveAdmin::Engine.config.watchable_dirs[path] = [:rb]
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
Rails.application.config.after_initialize do
|
|
243
|
+
ActionDispatch::Reloader.to_prepare do
|
|
244
|
+
ActiveAdmin.application.unload!
|
|
245
|
+
Rails.application.reload_routes!
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module AssetRegistration
|
|
3
|
+
|
|
4
|
+
def register_stylesheet(path, options = {})
|
|
5
|
+
stylesheets[path] = options
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def stylesheets
|
|
9
|
+
@stylesheets ||= {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def clear_stylesheets!
|
|
13
|
+
@stylesheets = {}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def register_javascript(name)
|
|
17
|
+
javascripts.add name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def javascripts
|
|
21
|
+
@javascripts ||= Set.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def clear_javascripts!
|
|
25
|
+
@javascripts = Set.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
# Default Authorization permissions for Active Admin
|
|
4
|
+
module Authorization
|
|
5
|
+
READ = :read
|
|
6
|
+
CREATE = :create
|
|
7
|
+
UPDATE = :update
|
|
8
|
+
DESTROY = :destroy
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Auth = Authorization
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Active Admin's default authorization adapter. This adapter returns true
|
|
15
|
+
# for all requests to `#authorized?`. It should be the starting point for
|
|
16
|
+
# implementing your own authorization adapter.
|
|
17
|
+
#
|
|
18
|
+
# To view an example subclass, check out `ActiveAdmin::CanCanAdapter`
|
|
19
|
+
class AuthorizationAdapter
|
|
20
|
+
attr_reader :resource, :user
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Initialize a new authorization adapter. This happens on each and
|
|
24
|
+
# every request to a controller.
|
|
25
|
+
#
|
|
26
|
+
# @param [ActiveAdmin::Resource, ActiveAdmin::Page] resource The resource
|
|
27
|
+
# that the user is currently on. Note, we may be authorizing access
|
|
28
|
+
# to a different subject, so don't rely on this other than to
|
|
29
|
+
# pull configuration information from.
|
|
30
|
+
#
|
|
31
|
+
# @param [any] user The current user. The user is set to whatever is returned
|
|
32
|
+
# from `#current_active_admin_user` in the controller.
|
|
33
|
+
#
|
|
34
|
+
def initialize(resource, user)
|
|
35
|
+
@resource = resource
|
|
36
|
+
@user = user
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Returns true of false depending on if the user is authorized to perform
|
|
40
|
+
# the action on the subject.
|
|
41
|
+
#
|
|
42
|
+
# @param [Symbol] action The name of the action to perform. Usually this will be
|
|
43
|
+
# one of the `ActiveAdmin::Auth::*` symbols.
|
|
44
|
+
#
|
|
45
|
+
# @param [any] subject The subject the action is being performed on usually this
|
|
46
|
+
# is a model object. Note, that this is NOT always in instance, it can be
|
|
47
|
+
# the class of the subject also. For example, Active Admin uses the class
|
|
48
|
+
# of the resource to decide if the resource should be displayed in the
|
|
49
|
+
# global navigation. To deal with this nicely in a case statement, take
|
|
50
|
+
# a look at `#normalized(klasss)`
|
|
51
|
+
#
|
|
52
|
+
# @returns [Boolean]
|
|
53
|
+
def authorized?(action, subject = nil)
|
|
54
|
+
true
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# A hook method for authorization libraries to scope the collection. By
|
|
59
|
+
# default, we just return the same collection. The returned scope is used
|
|
60
|
+
# as the starting point for all queries to the db in the controller.
|
|
61
|
+
#
|
|
62
|
+
# @param [ActiveRecord::Relation] collection The collection the user is
|
|
63
|
+
# attempting to view.
|
|
64
|
+
#
|
|
65
|
+
# @param [Symbol] action The name of the action to perform. Usually this will be
|
|
66
|
+
# one of the `ActiveAdmin::Auth::*` symbols. Defaults to `Auth::READ` if
|
|
67
|
+
# no action passed in.
|
|
68
|
+
#
|
|
69
|
+
# @returns [ActiveRecord::Relation] A new collection, scoped to the
|
|
70
|
+
# objects that the current user has access to.
|
|
71
|
+
def scope_collection(collection, action = Auth::READ)
|
|
72
|
+
collection
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
# The `#authorized?` method's subject can be set to both instances as well
|
|
78
|
+
# as classes of objects. This can make it much difficult to create simple
|
|
79
|
+
# case statements for authorization since you have to handle both the
|
|
80
|
+
# class level match and the instance level match.
|
|
81
|
+
#
|
|
82
|
+
# For example:
|
|
83
|
+
#
|
|
84
|
+
# class MyAuthAdapter < ActiveAdmin::AuthorizationAdapter
|
|
85
|
+
#
|
|
86
|
+
# def authorized?(action, subject = nil)
|
|
87
|
+
# case subject
|
|
88
|
+
# when Post
|
|
89
|
+
# true
|
|
90
|
+
# when Class
|
|
91
|
+
# if subject == Post
|
|
92
|
+
# true
|
|
93
|
+
# end
|
|
94
|
+
# end
|
|
95
|
+
# end
|
|
96
|
+
#
|
|
97
|
+
# end
|
|
98
|
+
#
|
|
99
|
+
# To handle this, the normalized method takes care of returning a object
|
|
100
|
+
# which implements `===` to be matched in a case statement.
|
|
101
|
+
#
|
|
102
|
+
# The above now becomes:
|
|
103
|
+
#
|
|
104
|
+
# class MyAuthAdapter < ActiveAdmin::AuthorizationAdapter
|
|
105
|
+
#
|
|
106
|
+
# def authorized?(action, subject = nil)
|
|
107
|
+
# case subject
|
|
108
|
+
# when normalized(Post)
|
|
109
|
+
# true
|
|
110
|
+
# end
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
# end
|
|
114
|
+
def normalized(klass)
|
|
115
|
+
NormalizedMatcher.new(klass)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
class NormalizedMatcher
|
|
119
|
+
|
|
120
|
+
def initialize(klass)
|
|
121
|
+
@klass = klass
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def ===(other)
|
|
125
|
+
@klass == other || other.is_a?(@klass)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|