aa-rails4 0.6.0
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/.document +5 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +894 -0
- data/CONTRIBUTING.md +121 -0
- data/Gemfile +40 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.rdoc +118 -0
- data/Rakefile +26 -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 +3 -0
- data/app/assets/javascripts/active_admin/base.js +5 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +21 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +281 -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 +108 -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 +24 -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 +26 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -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 +18 -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 +92 -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 +90 -0
- data/config/locales/en.yml +101 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fr.yml +89 -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 +87 -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 +89 -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 +56 -0
- data/docs/1-general-configuration.md +129 -0
- data/docs/10-custom-pages.md +96 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +206 -0
- data/docs/2-resource-customization.md +292 -0
- data/docs/3-index-pages.md +191 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +120 -0
- data/docs/4-csv-format.md +32 -0
- data/docs/5-forms.md +72 -0
- data/docs/6-show-pages.md +43 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +161 -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 +128 -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 +94 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +39 -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 +93 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +33 -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 +46 -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/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 +82 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +118 -0
- data/features/support/paths.rb +63 -0
- data/features/support/selectors.rb +45 -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 +120 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +245 -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 +153 -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 +25 -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/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/comments.rb +83 -0
- data/lib/active_admin/comments/comment.rb +49 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +2 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +75 -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.rb +9 -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 +50 -0
- data/lib/active_admin/filters/resource_extension.rb +129 -0
- data/lib/active_admin/form_builder.rb +189 -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.rb +51 -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 +11 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -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 +40 -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 +45 -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 +221 -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.rb +160 -0
- data/lib/active_admin/resource/action_items.rb +93 -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 +78 -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_collection.rb +42 -0
- data/lib/active_admin/resource_controller.rb +51 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +81 -0
- data/lib/active_admin/resource_controller/data_access.rb +303 -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_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 +28 -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 +34 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
- data/lib/active_admin/view_helpers/display_helper.rb +47 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +50 -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/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 +70 -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 +123 -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 +65 -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/dashboard_section_renderer.rb +19 -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 +150 -0
- data/lib/active_admin/views/index_as_grid.rb +76 -0
- data/lib/active_admin/views/index_as_table.rb +238 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +158 -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/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 +78 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +214 -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 +11 -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 +104 -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 +56 -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 +39 -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 +27 -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 +338 -0
- data/spec/unit/filters/resource_spec.rb +87 -0
- data/spec/unit/form_builder_spec.rb +478 -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 +108 -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 +79 -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 +22 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +152 -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 +97 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +131 -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 +247 -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 +182 -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 +39 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +6 -0
- metadata +883 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
extend ActiveSupport::Autoload
|
|
4
|
+
|
|
5
|
+
autoload :DatepickerInput
|
|
6
|
+
|
|
7
|
+
autoload :FilterBase
|
|
8
|
+
autoload :FilterStringInput
|
|
9
|
+
autoload :FilterDateRangeInput
|
|
10
|
+
autoload :FilterNumericInput
|
|
11
|
+
autoload :FilterSelectInput
|
|
12
|
+
autoload :FilterCheckBoxesInput
|
|
13
|
+
autoload :FilterBooleanInput
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
module FilterBase
|
|
4
|
+
include ::Formtastic::Inputs::Base
|
|
5
|
+
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
6
|
+
|
|
7
|
+
extend ::ActiveSupport::Autoload
|
|
8
|
+
autoload :SearchMethodSelect
|
|
9
|
+
|
|
10
|
+
def input_wrapping(&block)
|
|
11
|
+
template.content_tag :div, template.capture(&block), wrapper_html_options
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def required?
|
|
15
|
+
false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def wrapper_html_options
|
|
19
|
+
{ :class => "filter_form_field #{as}" }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Override the standard finder to accept a proc
|
|
23
|
+
def collection_from_options
|
|
24
|
+
if options[:collection].is_a?(Proc)
|
|
25
|
+
template.instance_eval(&options[:collection])
|
|
26
|
+
else
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# This is a common set of Formtastic overrides needed to build a filter form
|
|
2
|
+
# that lets you select from a set of search methods for a given attribute.
|
|
3
|
+
#
|
|
4
|
+
# Your class must declare available filters for this module to work.
|
|
5
|
+
# Those filters must be recognizable by Metasearch. For example:
|
|
6
|
+
#
|
|
7
|
+
# class FilterNumericInput < ::Formtastic::Inputs::NumberInput
|
|
8
|
+
# include FilterBase
|
|
9
|
+
# include FilterBase::SearchMethodSelect
|
|
10
|
+
#
|
|
11
|
+
# filter :equals, :greater_than, :less_than
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
module ActiveAdmin
|
|
15
|
+
module Inputs
|
|
16
|
+
module FilterBase
|
|
17
|
+
module SearchMethodSelect
|
|
18
|
+
|
|
19
|
+
def self.included(base)
|
|
20
|
+
base.extend ClassMethods
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module ClassMethods
|
|
24
|
+
attr_reader :filters
|
|
25
|
+
|
|
26
|
+
def filter(*filters)
|
|
27
|
+
(@filters ||= []).push *filters
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def wrapper_html_options
|
|
32
|
+
opts = super
|
|
33
|
+
(opts[:class] ||= '') << ' select_and_search'
|
|
34
|
+
opts
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def to_html
|
|
38
|
+
input_wrapping do
|
|
39
|
+
label_html << # your label
|
|
40
|
+
select_html << # the dropdown that holds the available search methods
|
|
41
|
+
input_html # your input field
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def input_html
|
|
46
|
+
builder.text_field current_filter, input_html_options
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def select_html
|
|
50
|
+
template.select_tag '', template.options_for_select(filter_options, current_filter)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def filters
|
|
54
|
+
options[:filters] || self.class.filters
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def current_filter
|
|
58
|
+
@current_filter ||= begin
|
|
59
|
+
methods = filters.map{ |f| "#{method}_#{f}" }
|
|
60
|
+
methods.detect{ |m| @object.send m } || methods.first
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def filter_options
|
|
65
|
+
filters.collect do |filter|
|
|
66
|
+
[I18n.t("active_admin.filters.predicates.#{filter}"), "#{method}_#{filter}"]
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
class FilterBooleanInput < ::Formtastic::Inputs::BooleanInput
|
|
4
|
+
include FilterBase
|
|
5
|
+
|
|
6
|
+
def to_html
|
|
7
|
+
input_wrapping do
|
|
8
|
+
[ label_html,
|
|
9
|
+
check_box_html
|
|
10
|
+
].join("\n").html_safe
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def search_method
|
|
15
|
+
method =~ search_conditions ? method : "#{method}_eq"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def checked?
|
|
19
|
+
object && boolean_checked?(object.send(search_method), checked_value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def input_html_options
|
|
23
|
+
{ :name => "q[#{ search_method }]" }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def search_conditions
|
|
27
|
+
/_(true|false|present|blank|null|not_null)\z/
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
class FilterCheckBoxesInput < ::Formtastic::Inputs::CheckBoxesInput
|
|
4
|
+
include FilterBase
|
|
5
|
+
|
|
6
|
+
def input_name
|
|
7
|
+
"#{object_name}[#{association_primary_key || method}_in][]"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def selected_values
|
|
11
|
+
@object.send("#{association_primary_key || method}_in") || []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Add whitespace before label
|
|
15
|
+
def choice_label(choice)
|
|
16
|
+
' ' + super
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Don't wrap in UL tag
|
|
20
|
+
def choices_group_wrapping(&block)
|
|
21
|
+
template.capture(&block)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Don't wrap in LI tag
|
|
25
|
+
def choice_wrapping(html_options, &block)
|
|
26
|
+
template.capture(&block)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Don't render hidden fields
|
|
30
|
+
def hidden_field_for_all
|
|
31
|
+
""
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Don't render hidden fields
|
|
35
|
+
def hidden_fields?
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
class FilterDateRangeInput < ::Formtastic::Inputs::StringInput
|
|
4
|
+
include FilterBase
|
|
5
|
+
|
|
6
|
+
def to_html
|
|
7
|
+
input_wrapping do
|
|
8
|
+
[ label_html,
|
|
9
|
+
builder.text_field(gt_input_name, input_html_options(gt_input_name)),
|
|
10
|
+
template.content_tag(:span, "-", :class => "seperator"),
|
|
11
|
+
builder.text_field(lt_input_name, input_html_options(lt_input_name)),
|
|
12
|
+
].join("\n").html_safe
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def gt_input_name
|
|
17
|
+
"#{method}_gteq"
|
|
18
|
+
end
|
|
19
|
+
alias :input_name :gt_input_name
|
|
20
|
+
|
|
21
|
+
def lt_input_name
|
|
22
|
+
"#{method}_lteq"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def input_html_options(input_name = gt_input_name)
|
|
26
|
+
current_value = @object.send(input_name)
|
|
27
|
+
{ :size => 12,
|
|
28
|
+
:class => "datepicker",
|
|
29
|
+
:max => 10,
|
|
30
|
+
:value => current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "" }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
class FilterSelectInput < ::Formtastic::Inputs::SelectInput
|
|
4
|
+
include FilterBase
|
|
5
|
+
|
|
6
|
+
# When it's a HABTM or has_many association, Formtastic builds "object_ids".
|
|
7
|
+
# That doesn't fit our scenario, so we override it here.
|
|
8
|
+
def input_name
|
|
9
|
+
name = method.to_s
|
|
10
|
+
name.concat '_id' if reflection
|
|
11
|
+
name.concat multiple? ? '_in' : '_eq'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Include the "Any" option if it's a dropdown, but not if it's a multi-select.
|
|
15
|
+
def input_options
|
|
16
|
+
super.merge :include_blank => multiple? ? false : I18n.t('active_admin.any')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# was "#{object_name}[#{association_primary_key}]"
|
|
20
|
+
def input_html_options_name
|
|
21
|
+
"#{object_name}[#{input_name}]"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Would normally return true for has_many and HABTM, which would subsequently
|
|
25
|
+
# cause the select field to be multi-select instead of a dropdown.
|
|
26
|
+
def multiple_by_association?
|
|
27
|
+
false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Provides an efficient default lookup query if the attribute is a DB column.
|
|
31
|
+
def collection
|
|
32
|
+
if !options[:collection] && column
|
|
33
|
+
pluck_column
|
|
34
|
+
else
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def pluck_column
|
|
40
|
+
klass.reorder("#{method} asc").uniq.pluck method
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Inputs
|
|
3
|
+
class FilterStringInput < ::Formtastic::Inputs::StringInput
|
|
4
|
+
include FilterBase
|
|
5
|
+
include FilterBase::SearchMethodSelect
|
|
6
|
+
|
|
7
|
+
filter :contains, :equals, :starts_with, :ends_with
|
|
8
|
+
|
|
9
|
+
# If the filter method includes a search condition, build a normal string search field.
|
|
10
|
+
# Else, build a search field with a companion dropdown to choose a search condition from.
|
|
11
|
+
def to_html
|
|
12
|
+
if method.to_s =~ /_(#{filters.join('|')})\z/
|
|
13
|
+
input_wrapping do
|
|
14
|
+
label_html <<
|
|
15
|
+
builder.text_field(method, input_html_options)
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
super # SearchMethodSelect#to_html
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
# Each Namespace builds up it's own menu as the global navigation
|
|
4
|
+
#
|
|
5
|
+
# To build a new menu:
|
|
6
|
+
#
|
|
7
|
+
# menu = Menu.new do |m|
|
|
8
|
+
# m.add label: 'Dashboard', url: '/'
|
|
9
|
+
# m.add label: 'Users', url: '/users'
|
|
10
|
+
# end
|
|
11
|
+
#
|
|
12
|
+
# If you're interested in configuring a menu item, take a look at the
|
|
13
|
+
# options available in `ActiveAdmin::MenuItem`
|
|
14
|
+
#
|
|
15
|
+
class Menu
|
|
16
|
+
|
|
17
|
+
def initialize
|
|
18
|
+
super # MenuNode
|
|
19
|
+
yield(self) if block_given?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module MenuNode
|
|
23
|
+
def initialize
|
|
24
|
+
@children = {}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def [](id)
|
|
28
|
+
@children[normalize_id(id)]
|
|
29
|
+
end
|
|
30
|
+
def []=(id, child)
|
|
31
|
+
@children[normalize_id(id)] = child
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Recursively builds any given menu items. There are two syntaxes supported,
|
|
35
|
+
# as shown in the below examples. Both create an identical menu structure.
|
|
36
|
+
#
|
|
37
|
+
# Example 1:
|
|
38
|
+
# menu = Menu.new
|
|
39
|
+
# menu.add label: 'Dashboard' do |dash|
|
|
40
|
+
# dash.add label: 'My Child Dashboard'
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# Example 2:
|
|
44
|
+
# menu = Menu.new
|
|
45
|
+
# menu.add label: 'Dashboard'
|
|
46
|
+
# menu.add parent: 'Dashboard', label: 'My Child Dashboard'
|
|
47
|
+
#
|
|
48
|
+
def add(options)
|
|
49
|
+
item = if parent = options.delete(:parent)
|
|
50
|
+
(self[parent] || add(:label => parent)).add options
|
|
51
|
+
else
|
|
52
|
+
_add options.merge :parent => self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
yield(item) if block_given?
|
|
56
|
+
|
|
57
|
+
item
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Whether any children match the given item.
|
|
61
|
+
def include?(item)
|
|
62
|
+
@children.values.include? item
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Used in the UI to visually distinguish which menu item is selected.
|
|
66
|
+
def current?(item)
|
|
67
|
+
self == item || include?(item)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Returns sorted array of menu items that should be displayed in this context.
|
|
71
|
+
# Sorts by priority first, then alphabetically by label if needed.
|
|
72
|
+
def items(context = nil)
|
|
73
|
+
@children.values.select{ |i| i.display?(context) }.sort do |a,b|
|
|
74
|
+
result = a.priority <=> b.priority
|
|
75
|
+
result = a.label(context) <=> b.label(context) if result == 0
|
|
76
|
+
result
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
attr_reader :children
|
|
81
|
+
private
|
|
82
|
+
attr_writer :children
|
|
83
|
+
|
|
84
|
+
# The method that actually adds new menu items. Called by the public method.
|
|
85
|
+
# If this ID is already taken, transfer the children of the existing item to the new item.
|
|
86
|
+
def _add(options)
|
|
87
|
+
item = ActiveAdmin::MenuItem.new(options)
|
|
88
|
+
item.send :children=, self[item.id].children if self[item.id]
|
|
89
|
+
self[item.id] = item
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def normalize_id(id)
|
|
93
|
+
case id
|
|
94
|
+
when String, Symbol, ActiveModel::Name
|
|
95
|
+
id.to_s.downcase.gsub ' ', '_'
|
|
96
|
+
when ActiveAdmin::Resource::Name
|
|
97
|
+
id.param_key
|
|
98
|
+
else
|
|
99
|
+
raise TypeError, "#{id.class} isn't supported as a Menu ID"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
include MenuNode
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
DEFAULT_MENU = :default
|
|
4
|
+
|
|
5
|
+
# A MenuCollection stores multiple menus for any given namespace. Namespaces delegate
|
|
6
|
+
# the addition of menu items to this class.
|
|
7
|
+
class MenuCollection
|
|
8
|
+
|
|
9
|
+
NoMenuError = Class.new(KeyError)
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
12
|
+
@menus = {}
|
|
13
|
+
@build_callbacks = []
|
|
14
|
+
@built = false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Add a new menu item to a menu in the collection
|
|
18
|
+
def add(menu_name, menu_item_options = {})
|
|
19
|
+
menu = find_or_create(menu_name)
|
|
20
|
+
|
|
21
|
+
menu.add menu_item_options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def clear!
|
|
25
|
+
@menus = {}
|
|
26
|
+
@built = false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def exists?(menu_name)
|
|
30
|
+
@menus.keys.include? menu_name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def fetch(menu_name)
|
|
34
|
+
build_menus!
|
|
35
|
+
|
|
36
|
+
@menus[menu_name] or
|
|
37
|
+
raise NoMenuError, "No menu by the name of #{menu_name.inspect} in availble menus: #{@menus.keys.join(", ")}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Add callbacks that will be run when the menu is going to be built. This
|
|
41
|
+
# helps use with reloading and allows configurations to add items to menus.
|
|
42
|
+
#
|
|
43
|
+
# @param [Proc] block A block which will be ran when the menu is built. The
|
|
44
|
+
# will have the menu collection yielded.
|
|
45
|
+
def on_build(&block)
|
|
46
|
+
@build_callbacks << block
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Add callbacks that will be run before the menu is built
|
|
50
|
+
def before_build(&block)
|
|
51
|
+
@build_callbacks.unshift(block)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def menu(menu_name)
|
|
55
|
+
menu = find_or_create(menu_name)
|
|
56
|
+
|
|
57
|
+
yield(menu) if block_given?
|
|
58
|
+
|
|
59
|
+
menu
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def built?
|
|
65
|
+
@built
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def build_menus!
|
|
69
|
+
return if built?
|
|
70
|
+
|
|
71
|
+
build_default_menu
|
|
72
|
+
run_on_build_callbacks
|
|
73
|
+
|
|
74
|
+
@built = true
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def run_on_build_callbacks
|
|
78
|
+
@build_callbacks.each do |callback|
|
|
79
|
+
callback.call(self)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def build_default_menu
|
|
84
|
+
find_or_create DEFAULT_MENU
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def find_or_create(menu_name)
|
|
88
|
+
menu_name ||= DEFAULT_MENU
|
|
89
|
+
@menus[menu_name] ||= ActiveAdmin::Menu.new
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|