yousty-activeadmin 1.0.0.pre
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 +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1056 -0
- data/CONTRIBUTING.md +110 -0
- data/Gemfile +41 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.md +67 -0
- data/Rakefile +25 -0
- data/activeadmin.gemspec +33 -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 +6 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
- data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +152 -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 +123 -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/_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 +12 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -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 +21 -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 +32 -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 +43 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -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/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/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
- data/config/locales/bg.yml +101 -0
- data/config/locales/ca.yml +98 -0
- data/config/locales/cs.yml +105 -0
- data/config/locales/da.yml +102 -0
- data/config/locales/de-CH.yml +117 -0
- data/config/locales/de.yml +119 -0
- data/config/locales/en-GB.yml +91 -0
- data/config/locales/en.yml +110 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fi.yml +109 -0
- data/config/locales/fr.yml +97 -0
- data/config/locales/he.yml +91 -0
- data/config/locales/hr.yml +93 -0
- data/config/locales/hu.yml +92 -0
- data/config/locales/it.yml +89 -0
- data/config/locales/ja.yml +104 -0
- data/config/locales/ko.yml +84 -0
- data/config/locales/lt.yml +90 -0
- data/config/locales/lv.yml +89 -0
- data/config/locales/nl.yml +90 -0
- data/config/locales/no-NB.yml +85 -0
- data/config/locales/pl.yml +93 -0
- data/config/locales/pt-BR.yml +90 -0
- data/config/locales/pt-PT.yml +89 -0
- data/config/locales/ro.yml +93 -0
- data/config/locales/ru.yml +103 -0
- data/config/locales/sv-SE.yml +89 -0
- data/config/locales/tr.yml +90 -0
- data/config/locales/uk.yml +100 -0
- data/config/locales/vi.yml +90 -0
- data/config/locales/zh-CN.yml +90 -0
- data/config/locales/zh-TW.yml +90 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +84 -0
- data/docs/1-general-configuration.md +137 -0
- data/docs/10-custom-pages.md +98 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +227 -0
- data/docs/2-resource-customization.md +340 -0
- data/docs/3-index-pages/create-an-index.md +29 -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 +154 -0
- data/docs/3-index-pages.md +206 -0
- data/docs/4-csv-format.md +39 -0
- data/docs/5-forms.md +110 -0
- data/docs/6-show-pages.md +77 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +155 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/belongs_to.feature +63 -0
- data/features/breadcrumb.feature +27 -0
- data/features/comments/commenting.feature +140 -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 +127 -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 +38 -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 +195 -0
- data/features/index/index_blank_slate.feature +61 -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 +30 -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 +119 -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 +47 -0
- data/features/sidebar_sections.feature +198 -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 +13 -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 +8 -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 +39 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +112 -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/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +242 -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/authorization.rb +151 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +78 -0
- data/lib/active_admin/batch_actions/controller.rb +24 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -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 +66 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/callbacks.rb +87 -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 +49 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +70 -0
- data/lib/active_admin/dsl.rb +166 -0
- data/lib/active_admin/engine.rb +7 -0
- data/lib/active_admin/event.rb +33 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +89 -0
- data/lib/active_admin/filters/formtastic_addons.rb +70 -0
- data/lib/active_admin/filters/resource_extension.rb +136 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/form_builder.rb +152 -0
- data/lib/active_admin/helpers/collection.rb +23 -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 +108 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -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 +61 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -0
- data/lib/active_admin/inputs.rb +15 -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 +224 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +39 -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/active_admin_comments.rb +75 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +84 -0
- data/lib/active_admin/orm/active_record.rb +3 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -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/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 +27 -0
- data/lib/active_admin/resource.rb +153 -0
- data/lib/active_admin/resource_collection.rb +42 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +298 -0
- data/lib/active_admin/resource_controller/decorators.rb +20 -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_controller.rb +50 -0
- data/lib/active_admin/resource_dsl.rb +134 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +57 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -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 +34 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
- data/lib/active_admin/view_helpers/display_helper.rb +49 -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 +24 -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/view_helpers.rb +21 -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 +103 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +150 -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 +125 -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 +28 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +56 -0
- data/lib/active_admin/views/components/table_for.rb +191 -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 +264 -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 +147 -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 +53 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +125 -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 +86 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -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 +3 -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 +41 -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 +175 -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 +111 -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/post_decorator.rb +53 -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 +141 -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 +32 -0
- data/spec/unit/batch_actions/resource_spec.rb +91 -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 +106 -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 +32 -0
- data/spec/unit/csv_builder_spec.rb +103 -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 +423 -0
- data/spec/unit/filters/resource_spec.rb +119 -0
- data/spec/unit/form_builder_spec.rb +514 -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/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +72 -0
- data/spec/unit/pretty_format_spec.rb +35 -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 +43 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +160 -0
- data/spec/unit/resource_controller/data_access_spec.rb +73 -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 +243 -0
- data/spec/unit/routing_spec.rb +172 -0
- data/spec/unit/scope_spec.rb +108 -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 +149 -0
- data/spec/unit/view_helpers/display_name_spec.rb +41 -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 +56 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +230 -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 +142 -0
- data/spec/unit/views/components/index_list_spec.rb +32 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +227 -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 +37 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +95 -0
- data/spec/unit/views/components/table_for_spec.rb +201 -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 +896 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require 'inherited_resources'
|
|
2
|
+
|
|
3
|
+
require 'active_admin/base_controller/authorization'
|
|
4
|
+
require 'active_admin/base_controller/menu'
|
|
5
|
+
|
|
6
|
+
module ActiveAdmin
|
|
7
|
+
# BaseController for ActiveAdmin.
|
|
8
|
+
# It implements ActiveAdmin controllers core features.
|
|
9
|
+
class BaseController < ::InheritedResources::Base
|
|
10
|
+
helper ::ActiveAdmin::ViewHelpers
|
|
11
|
+
|
|
12
|
+
layout :determine_active_admin_layout
|
|
13
|
+
|
|
14
|
+
before_filter :only_render_implemented_actions
|
|
15
|
+
before_filter :authenticate_active_admin_user
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
# Ensure that this method is available for the DSL
|
|
19
|
+
public :actions
|
|
20
|
+
|
|
21
|
+
# Reference to the Resource object which initialized
|
|
22
|
+
# this controller
|
|
23
|
+
attr_accessor :active_admin_config
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# By default Rails will render un-implemented actions when the view exists. Becuase Active
|
|
27
|
+
# Admin allows you to not render any of the actions by using the #actions method, we need
|
|
28
|
+
# to check if they are implemented.
|
|
29
|
+
def only_render_implemented_actions
|
|
30
|
+
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
include Menu
|
|
34
|
+
include Authorization
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# Calls the authentication method as defined in ActiveAdmin.authentication_method
|
|
39
|
+
def authenticate_active_admin_user
|
|
40
|
+
send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def current_active_admin_user
|
|
44
|
+
send(active_admin_namespace.current_user_method) if active_admin_namespace.current_user_method
|
|
45
|
+
end
|
|
46
|
+
helper_method :current_active_admin_user
|
|
47
|
+
|
|
48
|
+
def current_active_admin_user?
|
|
49
|
+
!!current_active_admin_user
|
|
50
|
+
end
|
|
51
|
+
helper_method :current_active_admin_user?
|
|
52
|
+
|
|
53
|
+
def active_admin_config
|
|
54
|
+
self.class.active_admin_config
|
|
55
|
+
end
|
|
56
|
+
helper_method :active_admin_config
|
|
57
|
+
|
|
58
|
+
def active_admin_namespace
|
|
59
|
+
active_admin_config.namespace
|
|
60
|
+
end
|
|
61
|
+
helper_method :active_admin_namespace
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
|
|
65
|
+
|
|
66
|
+
# Determine which layout to use.
|
|
67
|
+
#
|
|
68
|
+
# 1. If we're rendering a standard Active Admin action, we want layout(false)
|
|
69
|
+
# because these actions are subclasses of the Base page (which implements
|
|
70
|
+
# all the required layout code)
|
|
71
|
+
# 2. If we're rendering a custom action, we'll use the active_admin layout so
|
|
72
|
+
# that users can render any template inside Active Admin.
|
|
73
|
+
def determine_active_admin_layout
|
|
74
|
+
ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module BatchActions
|
|
3
|
+
module Controller
|
|
4
|
+
|
|
5
|
+
# Controller Action that get's called when submitting the batch action form
|
|
6
|
+
def batch_action
|
|
7
|
+
if selected_batch_action
|
|
8
|
+
selected_ids = params[:collection_selection] || []
|
|
9
|
+
instance_exec selected_ids, &selected_batch_action.block
|
|
10
|
+
else
|
|
11
|
+
raise "Couldn't find batch action \"#{params[:batch_action]}\""
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
def selected_batch_action
|
|
18
|
+
return unless params[:batch_action].present?
|
|
19
|
+
active_admin_config.batch_actions.detect { |action| action.sym.to_s == params[:batch_action] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
module BatchActions
|
|
4
|
+
module ResourceExtension
|
|
5
|
+
def initialize(*)
|
|
6
|
+
super
|
|
7
|
+
@batch_actions = {}
|
|
8
|
+
add_default_batch_actions
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# @return [Array] The set of batch actions for this resource
|
|
12
|
+
def batch_actions
|
|
13
|
+
batch_actions_enabled? ? @batch_actions.values.sort : []
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @return [Boolean] If batch actions are enabled for this resource
|
|
17
|
+
def batch_actions_enabled?
|
|
18
|
+
# If the resource config has been set, use it. Otherwise
|
|
19
|
+
# return the namespace setting
|
|
20
|
+
@batch_actions_enabled.nil? ? namespace.batch_actions : @batch_actions_enabled
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Disable or Enable batch actions for this resource
|
|
24
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
25
|
+
def batch_actions=(bool)
|
|
26
|
+
@batch_actions_enabled = bool
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Add a new batch item to a resource
|
|
30
|
+
# @param [String] title
|
|
31
|
+
# @param [Hash] options
|
|
32
|
+
# => :if is a proc that will be called to determine if the BatchAction should be displayed
|
|
33
|
+
# => :sort_order is used to sort the batch actions ascending
|
|
34
|
+
# => :confirm is a string which the user will have to accept in order to process the action
|
|
35
|
+
#
|
|
36
|
+
def add_batch_action(sym, title, options = {}, &block)
|
|
37
|
+
@batch_actions[sym] = ActiveAdmin::BatchAction.new(sym, title, options, &block)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Remove a batch action
|
|
41
|
+
# @param [Symbol] sym
|
|
42
|
+
# @returns [ActiveAdmin::BatchAction] the batch action, if it was present
|
|
43
|
+
#
|
|
44
|
+
def remove_batch_action(sym)
|
|
45
|
+
@batch_actions.delete(sym.to_sym)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Clears all the existing batch actions for this resource
|
|
49
|
+
def clear_batch_actions!
|
|
50
|
+
@batch_actions = {}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Path to the batch action itself
|
|
54
|
+
def batch_action_path(params = {})
|
|
55
|
+
[route_collection_path(params), "batch_action"].join("/")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
# @return [ActiveAdmin::BatchAction] The default "delete" action
|
|
61
|
+
def add_default_batch_actions
|
|
62
|
+
destroy_options = {
|
|
63
|
+
:priority => 100,
|
|
64
|
+
:confirm => proc { I18n.t('active_admin.batch_actions.delete_confirmation', :plural_model => active_admin_config.plural_resource_label.downcase) },
|
|
65
|
+
:if => proc{ controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
add_batch_action :destroy, proc { I18n.t('active_admin.delete') }, destroy_options do |selected_ids|
|
|
69
|
+
active_admin_config.resource_class.find(selected_ids).each { |r| r.destroy }
|
|
70
|
+
|
|
71
|
+
redirect_to active_admin_config.route_collection_path(params),
|
|
72
|
+
:notice => I18n.t("active_admin.batch_actions.succesfully_destroyed",
|
|
73
|
+
:count => selected_ids.count,
|
|
74
|
+
:model => active_admin_config.resource_label.downcase,
|
|
75
|
+
:plural_model => active_admin_config.plural_resource_label(:count => selected_ids.count).downcase)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class BatchAction
|
|
83
|
+
|
|
84
|
+
include Comparable
|
|
85
|
+
|
|
86
|
+
attr_reader :block, :title, :sym, :confirm
|
|
87
|
+
|
|
88
|
+
# Create a Batch Action
|
|
89
|
+
#
|
|
90
|
+
# Examples:
|
|
91
|
+
#
|
|
92
|
+
# BatchAction.new :flag
|
|
93
|
+
# => Will create an action that appears in the action list popover
|
|
94
|
+
#
|
|
95
|
+
# BatchAction.new( :flag ) { |selection| redirect_to collection_path, :notice => "#{selection.length} users flagged" }
|
|
96
|
+
# => Will create an action that uses a block to process the request (which receives one paramater of the selected objects)
|
|
97
|
+
#
|
|
98
|
+
# BatchAction.new( "Perform Long Operation on the" ) { |selection| }
|
|
99
|
+
# => You can create batch actions with a title instead of a Symbol
|
|
100
|
+
#
|
|
101
|
+
# BatchAction.new( :flag, :if => proc { can? :flag, AdminUser } ) { |selection| }
|
|
102
|
+
# => You can provide an optional :if proc to optionally display the batch action
|
|
103
|
+
#
|
|
104
|
+
def initialize(sym, title, options = {}, &block)
|
|
105
|
+
@sym, @title, @options, @block, @confirm = sym, title, options, block, options[:confirm]
|
|
106
|
+
@block ||= proc {}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Returns the display if block. If the block was not explicitly defined
|
|
110
|
+
# a default block always returning true will be returned.
|
|
111
|
+
def display_if_block
|
|
112
|
+
@options[:if] || proc { true }
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Used for sorting
|
|
116
|
+
def priority
|
|
117
|
+
@options[:priority] || 10
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# sort operator
|
|
121
|
+
def <=>(other)
|
|
122
|
+
self.priority <=> other.priority
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'active_admin/component'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module BatchActions
|
|
5
|
+
|
|
6
|
+
# Build an BatchActionForm
|
|
7
|
+
class BatchActionForm < ActiveAdmin::Component
|
|
8
|
+
builder_method :batch_action_form
|
|
9
|
+
|
|
10
|
+
attr_reader :prefix_html
|
|
11
|
+
|
|
12
|
+
def build(options = {}, &block)
|
|
13
|
+
options[:id] ||= "collection_selection"
|
|
14
|
+
|
|
15
|
+
# Open a form
|
|
16
|
+
text_node form_tag(active_admin_config.batch_action_path(params), :id => options[:id])
|
|
17
|
+
input(:name => :batch_action, :id => :batch_action, :type => :hidden)
|
|
18
|
+
|
|
19
|
+
super(options)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Override the default to_s to include a closing form tag
|
|
23
|
+
def to_s
|
|
24
|
+
content + closing_form_tag
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def closing_form_tag
|
|
30
|
+
'</form>'.html_safe
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'active_admin/views/components/action_list_popover'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module BatchActions
|
|
5
|
+
# Build an BatchActionPopover
|
|
6
|
+
class BatchActionPopover < ActiveAdmin::Views::ActionListPopover
|
|
7
|
+
builder_method :batch_action_popover
|
|
8
|
+
|
|
9
|
+
def build(options = {}, &block)
|
|
10
|
+
options[:id] ||= "batch_actions_popover"
|
|
11
|
+
super(options)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def action(batch_action, options = {})
|
|
15
|
+
options[:class] ||= []
|
|
16
|
+
options[:class] += %w(batch_action)
|
|
17
|
+
options.merge! "data-action" => batch_action.sym,
|
|
18
|
+
"data-confirm" => batch_action.confirm
|
|
19
|
+
|
|
20
|
+
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => batch_action.title)
|
|
21
|
+
label = I18n.t("active_admin.batch_actions.action_label", :title => title)
|
|
22
|
+
|
|
23
|
+
super(label, "#", options)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'active_admin/component'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module BatchActions
|
|
5
|
+
|
|
6
|
+
class BatchActionSelector < ActiveAdmin::Component
|
|
7
|
+
builder_method :batch_action_selector
|
|
8
|
+
|
|
9
|
+
# Build a new batch actions selector
|
|
10
|
+
#
|
|
11
|
+
# @param [Array] batch_actions An array of batch actions
|
|
12
|
+
def build(batch_actions)
|
|
13
|
+
@batch_actions = Array(batch_actions)
|
|
14
|
+
@drop_down = build_drop_down
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# We don't want to wrap the action list (or any other children) in
|
|
18
|
+
# an unecessary div, so instead we just return the children
|
|
19
|
+
def to_s
|
|
20
|
+
children.to_s
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def build_drop_down
|
|
26
|
+
dropdown_menu I18n.t("active_admin.batch_actions.button_label"),
|
|
27
|
+
:id => "batch_actions_selector",
|
|
28
|
+
:button => { :class => "disabled" } do
|
|
29
|
+
batch_actions_to_display.each do |batch_action|
|
|
30
|
+
confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
|
|
31
|
+
|
|
32
|
+
options = {
|
|
33
|
+
:class => "batch_action",
|
|
34
|
+
"data-action" => batch_action.sym,
|
|
35
|
+
"data-confirm" => confirmation_text
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
default_title = render_or_call_method_or_proc_on(self, batch_action.title)
|
|
39
|
+
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => default_title)
|
|
40
|
+
label = I18n.t("active_admin.batch_actions.action_label", :title => title)
|
|
41
|
+
|
|
42
|
+
item label, "#", options
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Return the set of batch actions that should be displayed
|
|
48
|
+
def batch_actions_to_display
|
|
49
|
+
@batch_actions.select do |batch_action|
|
|
50
|
+
call_method_or_proc_on(self, batch_action.display_if_block)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# def build_batch_action_button
|
|
55
|
+
# a :class => 'table_tools_button dropdown_button disabled', :href => "#batch_actions_popover", :id => "batch_actions_button" do
|
|
56
|
+
# text_node I18n.t("active_admin.batch_actions.button_label")
|
|
57
|
+
# end
|
|
58
|
+
# end
|
|
59
|
+
|
|
60
|
+
# def build_batch_action_popover
|
|
61
|
+
# end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'active_admin/component'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module BatchActions
|
|
5
|
+
|
|
6
|
+
# Creates the toggle checkbox used to toggle the collection selection on/off
|
|
7
|
+
class ResourceSelectionToggleCell < ActiveAdmin::Component
|
|
8
|
+
builder_method :resource_selection_toggle_cell
|
|
9
|
+
|
|
10
|
+
def build
|
|
11
|
+
input( :type => "checkbox", :id => "collection_selection_toggle_all", :name => "collection_selection_toggle_all", :class => "toggle_all" )
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Creates the checkbox used to select a resource in the collection selection
|
|
16
|
+
class ResourceSelectionCell < ActiveAdmin::Component
|
|
17
|
+
builder_method :resource_selection_cell
|
|
18
|
+
|
|
19
|
+
def build(resource)
|
|
20
|
+
input :type => "checkbox", :id => "batch_action_item_#{resource.id}", :value => resource.id, :class => "collection_selection", :name => "collection_selection[]"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Creates a wrapper panel for all index pages, except for the table, as the table has the checkbox in the thead
|
|
25
|
+
class ResourceSelectionTogglePanel < ActiveAdmin::Component
|
|
26
|
+
builder_method :resource_selection_toggle_panel
|
|
27
|
+
|
|
28
|
+
def build
|
|
29
|
+
super(:id => "collection_selection_toggle_panel")
|
|
30
|
+
resource_selection_toggle_cell
|
|
31
|
+
div(:id => "collection_selection_toggle_explaination" ) { I18n.t('active_admin.batch_actions.selection_toggle_explanation', :default => "(Toggle Selection)") }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
ActiveAdmin.before_load do |app|
|
|
2
|
+
require "active_admin/batch_actions/resource_extension"
|
|
3
|
+
require "active_admin/batch_actions/controller"
|
|
4
|
+
|
|
5
|
+
# Add our Extensions
|
|
6
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::BatchActions::ResourceExtension
|
|
7
|
+
ActiveAdmin::ResourceController.send :include, ActiveAdmin::BatchActions::Controller
|
|
8
|
+
|
|
9
|
+
# Require all the views
|
|
10
|
+
require "active_admin/batch_actions/views/batch_action_form"
|
|
11
|
+
require "active_admin/batch_actions/views/batch_action_popover"
|
|
12
|
+
require "active_admin/batch_actions/views/selection_cells"
|
|
13
|
+
require "active_admin/batch_actions/views/batch_action_selector"
|
|
14
|
+
|
|
15
|
+
# Register the views with the view factory
|
|
16
|
+
app.view_factory.register :batch_action_selector => ActiveAdmin::BatchActions::BatchActionSelector
|
|
17
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Callbacks
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
protected
|
|
6
|
+
|
|
7
|
+
# Simple callback system. Implements before and after callbacks for
|
|
8
|
+
# use within the controllers.
|
|
9
|
+
#
|
|
10
|
+
# We didn't use the ActiveSupport callbacks becuase they do not support
|
|
11
|
+
# passing in any arbitrary object into the callback method (which we
|
|
12
|
+
# need to do)
|
|
13
|
+
|
|
14
|
+
def call_callback_with(method, *args)
|
|
15
|
+
case method
|
|
16
|
+
when Symbol
|
|
17
|
+
send(method, *args)
|
|
18
|
+
when Proc
|
|
19
|
+
instance_exec(*args, &method)
|
|
20
|
+
else
|
|
21
|
+
raise "Please register with callbacks using a symbol or a block/proc."
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
module ClassMethods
|
|
26
|
+
|
|
27
|
+
# Define a new callback.
|
|
28
|
+
#
|
|
29
|
+
# Example:
|
|
30
|
+
#
|
|
31
|
+
# class MyClassWithCallbacks
|
|
32
|
+
# include ActiveAdmin::Callbacks
|
|
33
|
+
#
|
|
34
|
+
# define_active_admin_callbacks :save
|
|
35
|
+
#
|
|
36
|
+
# before_save do |arg1, arg2|
|
|
37
|
+
# # runs before save
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# after_save :call_after_save
|
|
41
|
+
#
|
|
42
|
+
# def save
|
|
43
|
+
# # Will run before, yield, then after
|
|
44
|
+
# run_save_callbacks :arg1, :arg2 do
|
|
45
|
+
# save!
|
|
46
|
+
# end
|
|
47
|
+
# end
|
|
48
|
+
#
|
|
49
|
+
# protected
|
|
50
|
+
#
|
|
51
|
+
# def call_after_save(arg1, arg2)
|
|
52
|
+
# # runs after save
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
#
|
|
56
|
+
def define_active_admin_callbacks(*names)
|
|
57
|
+
names.each do |name|
|
|
58
|
+
[:before, :after].each do |type|
|
|
59
|
+
|
|
60
|
+
# Define a method to set the callback
|
|
61
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
62
|
+
# def self.before_create_callbacks
|
|
63
|
+
def self.#{type}_#{name}_callbacks
|
|
64
|
+
@#{type}_#{name}_callbacks ||= []
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# def self.before_create
|
|
68
|
+
def self.#{type}_#{name}(method = nil, &block)
|
|
69
|
+
#{type}_#{name}_callbacks << (method || block)
|
|
70
|
+
end
|
|
71
|
+
EOS
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Define a method to run the callbacks
|
|
75
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
76
|
+
def run_#{name}_callbacks(*args)
|
|
77
|
+
self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
78
|
+
value = yield if block_given?
|
|
79
|
+
self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
80
|
+
return value
|
|
81
|
+
end
|
|
82
|
+
EOS
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'cancan'
|
|
2
|
+
|
|
3
|
+
# Add a setting to the application to configure the ability
|
|
4
|
+
ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
|
|
5
|
+
|
|
6
|
+
module ActiveAdmin
|
|
7
|
+
|
|
8
|
+
class CanCanAdapter < AuthorizationAdapter
|
|
9
|
+
|
|
10
|
+
def authorized?(action, subject = nil)
|
|
11
|
+
cancan_ability.can?(action, subject)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def cancan_ability
|
|
15
|
+
@cancan_ability ||= initialize_cancan_ability
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def scope_collection(collection, action = ActiveAdmin::Auth::READ)
|
|
19
|
+
collection.accessible_by(cancan_ability, action)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
# The setting allows the class to be stored as a string
|
|
25
|
+
# to enable reloading in development.
|
|
26
|
+
def initialize_cancan_ability
|
|
27
|
+
ability_class_name = resource.namespace.cancan_ability_class
|
|
28
|
+
|
|
29
|
+
if ability_class_name.is_a?(String)
|
|
30
|
+
ability_class = ActiveSupport::Dependencies.constantize(ability_class_name)
|
|
31
|
+
else
|
|
32
|
+
ability_class = ability_class_name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
ability_class.new(user)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
# CSVBuilder stores CSV configuration
|
|
3
|
+
#
|
|
4
|
+
# Usage example:
|
|
5
|
+
#
|
|
6
|
+
# csv_builder = CSVBuilder.new
|
|
7
|
+
# csv_builder.column :id
|
|
8
|
+
# csv_builder.column("Name") { |resource| resource.full_name }
|
|
9
|
+
#
|
|
10
|
+
# csv_builder = CSVBuilder.new :col_sep => ";"
|
|
11
|
+
# csv_builder.column :id
|
|
12
|
+
#
|
|
13
|
+
#
|
|
14
|
+
class CSVBuilder
|
|
15
|
+
|
|
16
|
+
# Return a default CSVBuilder for a resource
|
|
17
|
+
# The CSVBuilder's columns would be Id followed by this
|
|
18
|
+
# resource's content columns
|
|
19
|
+
def self.default_for_resource(resource)
|
|
20
|
+
new.tap do |csv_builder|
|
|
21
|
+
csv_builder.column(:id)
|
|
22
|
+
resource.content_columns.each do |content_column|
|
|
23
|
+
csv_builder.column(content_column.name.to_sym)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
attr_reader :columns, :options
|
|
29
|
+
|
|
30
|
+
def initialize(options={}, &block)
|
|
31
|
+
@columns, @options = [], options
|
|
32
|
+
instance_eval &block if block_given?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Add a column
|
|
36
|
+
def column(name, &block)
|
|
37
|
+
@columns << Column.new(name, block)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class Column
|
|
41
|
+
attr_reader :name, :data
|
|
42
|
+
|
|
43
|
+
def initialize(name, block = nil)
|
|
44
|
+
@name = name.is_a?(Symbol) ? name.to_s.titleize : name
|
|
45
|
+
@data = block || name.to_sym
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Deprecation
|
|
3
|
+
module_function
|
|
4
|
+
|
|
5
|
+
def warn(message, callstack = caller)
|
|
6
|
+
ActiveSupport::Deprecation.warn "Active Admin: #{message}", callstack
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Deprecate a method.
|
|
10
|
+
#
|
|
11
|
+
# @param [Module] klass the Class or Module to deprecate the method on
|
|
12
|
+
# @param [Symbol] method the method to deprecate
|
|
13
|
+
# @param [String] message the message to display to the end user
|
|
14
|
+
#
|
|
15
|
+
# Example:
|
|
16
|
+
#
|
|
17
|
+
# class MyClass
|
|
18
|
+
# def my_method
|
|
19
|
+
# # ...
|
|
20
|
+
# end
|
|
21
|
+
# ActiveAdmin::Deprecation.deprecate self, :my_method,
|
|
22
|
+
# "MyClass#my_method is being removed in the next release"
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
def deprecate(klass, method, message)
|
|
26
|
+
klass.class_eval <<-EOC, __FILE__, __LINE__ + 1
|
|
27
|
+
alias_method :deprecated_#{method}, :#{method}
|
|
28
|
+
def #{method}(*args)
|
|
29
|
+
ActiveAdmin::Deprecation.warn('#{message}', caller)
|
|
30
|
+
send(:deprecated_#{method}, *args)
|
|
31
|
+
end
|
|
32
|
+
EOC
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|