activeadmin-rails 1.7.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/.codeclimate.yml +64 -0
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.github/workflows/ci.yaml +64 -0
- data/.github/workflows/daily.yaml +64 -0
- data/.github/workflows/pages.yml +72 -0
- data/.gitignore +23 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +84 -0
- data/.simplecov +13 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +514 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +190 -0
- data/Gemfile +51 -0
- data/LICENSE +20 -0
- data/README.md +84 -0
- data/Rakefile +56 -0
- data/activeadmin-rails.gemspec +39 -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/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
- data/app/assets/stylesheets/active_admin/_header.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.scss +287 -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 +41 -0
- data/app/views/active_admin/_head.html.erb +14 -0
- data/app/views/active_admin/base/_action_items.html.arb +7 -0
- data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
- data/app/views/active_admin/base/_footer.html.arb +11 -0
- data/app/views/active_admin/base/_header.html.arb +5 -0
- data/app/views/active_admin/base/_sidebar.html.arb +3 -0
- data/app/views/active_admin/base/_title_bar.html.arb +9 -0
- data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -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 +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/app/views/active_admin/page/_content.html.arb +1 -0
- data/app/views/active_admin/page/index.html.arb +8 -0
- data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
- data/app/views/active_admin/resource/_form.html.arb +11 -0
- data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
- data/app/views/active_admin/resource/_show.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +13 -0
- data/app/views/active_admin/resource/index.html.arb +101 -0
- data/app/views/active_admin/resource/new.html.arb +13 -0
- data/app/views/active_admin/resource/show.html.arb +22 -0
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin.html.erb +33 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
- data/codecov.yml +25 -0
- data/config/i18n-tasks.yml +26 -0
- data/config/locales/ar.yml +133 -0
- data/config/locales/bg.yml +118 -0
- data/config/locales/bs.yml +119 -0
- data/config/locales/ca.yml +104 -0
- data/config/locales/cs.yml +107 -0
- data/config/locales/da.yml +135 -0
- data/config/locales/de-CH.yml +99 -0
- data/config/locales/de.yml +142 -0
- data/config/locales/el.yml +124 -0
- data/config/locales/en-CA.yml +137 -0
- data/config/locales/en-GB.yml +137 -0
- data/config/locales/en.yml +160 -0
- data/config/locales/eo.yml +143 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +160 -0
- data/config/locales/fa.yml +117 -0
- data/config/locales/fi.yml +110 -0
- data/config/locales/fr.yml +139 -0
- data/config/locales/he.yml +140 -0
- data/config/locales/hr.yml +121 -0
- data/config/locales/hu.yml +96 -0
- data/config/locales/id.yml +133 -0
- data/config/locales/it.yml +142 -0
- data/config/locales/ja.yml +139 -0
- data/config/locales/ko.yml +118 -0
- data/config/locales/lt.yml +140 -0
- data/config/locales/lv.yml +90 -0
- data/config/locales/nb.yml +128 -0
- data/config/locales/nl.yml +142 -0
- data/config/locales/pl.yml +166 -0
- data/config/locales/pt-BR.yml +141 -0
- data/config/locales/pt-PT.yml +90 -0
- data/config/locales/ro.yml +94 -0
- data/config/locales/ru.yml +139 -0
- data/config/locales/sk.yml +107 -0
- data/config/locales/sv-SE.yml +133 -0
- data/config/locales/tr.yml +142 -0
- data/config/locales/uk.yml +134 -0
- data/config/locales/vi.yml +132 -0
- data/config/locales/zh-CN.yml +141 -0
- data/config/locales/zh-TW.yml +133 -0
- data/config/mdl_style.rb +9 -0
- data/cucumber.yml +6 -0
- data/docs/0-installation.md +121 -0
- data/docs/1-general-configuration.md +207 -0
- data/docs/10-custom-pages.md +148 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbo-components.md +200 -0
- data/docs/13-authorization-adapter.md +288 -0
- data/docs/14-gotchas.md +141 -0
- data/docs/2-resource-customization.md +480 -0
- data/docs/3-index-pages/custom-index.md +39 -0
- data/docs/3-index-pages/index-as-block.md +23 -0
- data/docs/3-index-pages/index-as-blog.md +73 -0
- data/docs/3-index-pages/index-as-grid.md +31 -0
- data/docs/3-index-pages/index-as-table.md +259 -0
- data/docs/3-index-pages.md +349 -0
- data/docs/4-csv-format.md +86 -0
- data/docs/5-forms.md +233 -0
- data/docs/6-show-pages.md +61 -0
- data/docs/7-sidebars.md +63 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +248 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +7 -0
- data/docs/README.md +24 -0
- data/docs/_config.yml +15 -0
- data/docs/_includes/nav_footer_custom.html +3 -0
- data/docs/documentation.md +61 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/index.css +835 -0
- data/docs/index.html +105 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +124 -0
- data/features/breadcrumb.feature +76 -0
- data/features/comments/commenting.feature +178 -0
- data/features/comments/viewing_index.feature +18 -0
- data/features/create_another.feature +55 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +28 -0
- data/features/edit_page.feature +116 -0
- data/features/favicon.feature +20 -0
- data/features/filter_attributes.feature +46 -0
- data/features/first_boot.feature +16 -0
- data/features/footer.feature +29 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +55 -0
- data/features/index/batch_actions.feature +218 -0
- data/features/index/filters.feature +251 -0
- data/features/index/format_as_csv.feature +273 -0
- data/features/index/formats.feature +88 -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 +291 -0
- data/features/index/index_blank_slate.feature +83 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +325 -0
- data/features/index/page_title.feature +41 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +85 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +136 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +237 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +29 -0
- data/features/root_to.feature +18 -0
- data/features/show/attributes_table_title.feature +54 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +58 -0
- data/features/show/tabs.feature +47 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +118 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +19 -0
- data/features/step_definitions/additional_web_steps.rb +81 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/attributes_table_title_steps.rb +11 -0
- data/features/step_definitions/batch_action_steps.rb +78 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +13 -0
- data/features/step_definitions/column_steps.rb +8 -0
- data/features/step_definitions/comment_steps.rb +32 -0
- data/features/step_definitions/configuration_steps.rb +102 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +35 -0
- data/features/step_definitions/filter_steps.rb +57 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/footer_steps.rb +21 -0
- data/features/step_definitions/format_steps.rb +60 -0
- data/features/step_definitions/i18n_steps.rb +11 -0
- data/features/step_definitions/index_scope_steps.rb +42 -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/meta_tag_steps.rb +3 -0
- data/features/step_definitions/pagination_steps.rb +15 -0
- data/features/step_definitions/root_steps.rb +9 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/site_title_steps.rb +31 -0
- data/features/step_definitions/tab_steps.rb +17 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +69 -0
- data/features/support/env.rb +129 -0
- data/features/support/paths.rb +75 -0
- data/features/support/regular_env.rb +7 -0
- data/features/support/reload_env.rb +7 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +32 -0
- data/features/users/logging_out.feature +29 -0
- data/features/users/resetting_password.feature +30 -0
- data/gemfiles/rails_42.gemfile +12 -0
- data/gemfiles/rails_52.gemfile +15 -0
- data/gemfiles/rails_60.gemfile +16 -0
- data/gemfiles/rails_61.gemfile +15 -0
- data/gemfiles/rails_61_turbolinks.gemfile +15 -0
- data/gemfiles/rails_70.gemfile +15 -0
- data/gemfiles/rails_70_hotwire.gemfile +15 -0
- data/gemfiles/rails_71.gemfile +17 -0
- data/lib/active_admin/abstract_view_factory.rb +47 -0
- data/lib/active_admin/application.rb +255 -0
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +129 -0
- data/lib/active_admin/base_controller/authorization.rb +126 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +91 -0
- data/lib/active_admin/batch_actions/controller.rb +45 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/callbacks.rb +88 -0
- data/lib/active_admin/cancan_adapter.rb +36 -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 +136 -0
- data/lib/active_admin/dependency.rb +96 -0
- data/lib/active_admin/deprecation.rb +10 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +193 -0
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +22 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters/active.rb +29 -0
- data/lib/active_admin/filters/active_filter.rb +123 -0
- data/lib/active_admin/filters/active_sidebar.rb +50 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +85 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/resource_extension.rb +153 -0
- data/lib/active_admin/filters.rb +11 -0
- data/lib/active_admin/form_builder.rb +182 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +19 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/inputs/datepicker_input.rb +27 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +58 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +21 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/menu.rb +106 -0
- data/lib/active_admin/menu_collection.rb +55 -0
- data/lib/active_admin/menu_item.rb +79 -0
- data/lib/active_admin/namespace.rb +325 -0
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/order_clause.rb +48 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +35 -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/views/active_admin_comments.rb +95 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +99 -0
- data/lib/active_admin/orm/active_record.rb +5 -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 +114 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +35 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource/action_items.rb +120 -0
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +48 -0
- data/lib/active_admin/resource/controllers.rb +19 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +65 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +90 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +134 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +52 -0
- data/lib/active_admin/resource/sidebars.rb +32 -0
- data/lib/active_admin/resource.rb +215 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +341 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -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/streaming.rb +47 -0
- data/lib/active_admin/resource_controller.rb +116 -0
- data/lib/active_admin/resource_dsl.rb +221 -0
- data/lib/active_admin/router.rb +113 -0
- data/lib/active_admin/scope.rb +60 -0
- data/lib/active_admin/settings_node.rb +19 -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 +10 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
- data/lib/active_admin/view_helpers/display_helper.rb +95 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
- data/lib/active_admin/view_helpers/form_helper.rb +20 -0
- data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -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/components/action_link.rb +13 -0
- data/lib/active_admin/views/components/active_admin_form.rb +163 -0
- data/lib/active_admin/views/components/attributes_panel.rb +23 -0
- data/lib/active_admin/views/components/attributes_table.rb +94 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +161 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
- data/lib/active_admin/views/components/index_list.rb +69 -0
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +159 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +72 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +88 -0
- data/lib/active_admin/views/components/table_for.rb +209 -0
- data/lib/active_admin/views/components/tabs.rb +40 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +155 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +377 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +132 -0
- data/lib/activeadmin-rails.rb +1 -0
- data/lib/bug_report_templates/active_admin_main.rb +110 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
- data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -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.erb +16 -0
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
- data/lib/ransack_ext.rb +20 -0
- data/spec/bug_report_templates_spec.rb +28 -0
- data/spec/changelog_spec.rb +15 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -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/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_runner.rb +19 -0
- data/spec/rails_helper.rb +67 -0
- data/spec/requests/default_namespace_spec.rb +81 -0
- data/spec/requests/memory_spec.rb +25 -0
- data/spec/requests/pages/form_spec.rb +73 -0
- data/spec/requests/pages/index_spec.rb +96 -0
- data/spec/requests/pages/layout_spec.rb +59 -0
- data/spec/requests/pages/show_spec.rb +38 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/active_admin_integration_spec_helper.rb +79 -0
- data/spec/support/active_admin_request_helpers.rb +39 -0
- data/spec/support/rails_template.rb +224 -0
- data/spec/support/rails_template_with_data.rb +328 -0
- data/spec/support/templates/admin/stores.rb +7 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/manifest.js +3 -0
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +44 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +78 -0
- data/spec/unit/action_builder_spec.rb +160 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +180 -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 +43 -0
- data/spec/unit/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +103 -0
- data/spec/unit/batch_actions/resource_spec.rb +84 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +76 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +204 -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 +41 -0
- data/spec/unit/csv_builder_spec.rb +321 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +110 -0
- data/spec/unit/dsl_spec.rb +120 -0
- data/spec/unit/dynamic_settings_spec.rb +28 -0
- data/spec/unit/filters/active_filter_spec.rb +222 -0
- data/spec/unit/filters/active_spec.rb +24 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +1013 -0
- data/spec/unit/generators/install_spec.rb +31 -0
- data/spec/unit/helpers/collection_spec.rb +68 -0
- data/spec/unit/helpers/scope_chain_spec.rb +35 -0
- data/spec/unit/i18n_spec.rb +29 -0
- data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
- data/spec/unit/menu_collection_spec.rb +40 -0
- data/spec/unit/menu_item_spec.rb +82 -0
- data/spec/unit/menu_spec.rb +60 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +99 -0
- data/spec/unit/namespace/register_resource_spec.rb +162 -0
- data/spec/unit/namespace_spec.rb +132 -0
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +128 -0
- data/spec/unit/pretty_format_spec.rb +133 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +83 -0
- data/spec/unit/resource/attributes_spec.rb +56 -0
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +120 -0
- data/spec/unit/resource/ordering_spec.rb +35 -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 +125 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +175 -0
- data/spec/unit/resource_controller/data_access_spec.rb +234 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
- data/spec/unit/resource_controller_spec.rb +290 -0
- data/spec/unit/resource_registration_spec.rb +61 -0
- data/spec/unit/resource_spec.rb +320 -0
- data/spec/unit/routing_spec.rb +211 -0
- data/spec/unit/scope_spec.rb +225 -0
- data/spec/unit/settings_node_spec.rb +26 -0
- data/spec/unit/view_factory_spec.rb +13 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +203 -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/flash_helper_spec.rb +24 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
- data/spec/unit/views/components/attributes_table_spec.rb +271 -0
- data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
- data/spec/unit/views/components/blank_slate_spec.rb +27 -0
- data/spec/unit/views/components/columns_spec.rb +187 -0
- data/spec/unit/views/components/index_list_spec.rb +49 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/menu_item_spec.rb +29 -0
- data/spec/unit/views/components/menu_spec.rb +168 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
- data/spec/unit/views/components/panel_spec.rb +58 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
- data/spec/unit/views/components/site_title_spec.rb +82 -0
- data/spec/unit/views/components/status_tag_spec.rb +265 -0
- data/spec/unit/views/components/table_for_spec.rb +441 -0
- data/spec/unit/views/components/tabs_spec.rb +99 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/tasks/docs.rake +64 -0
- data/tasks/lint.rake +21 -0
- data/tasks/local.rake +25 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +24 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +1012 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe "AA installation" do
|
|
4
|
+
context "should create" do
|
|
5
|
+
|
|
6
|
+
it "active_admin.scss" do
|
|
7
|
+
path = Rails.root + "app/assets/stylesheets/active_admin.scss"
|
|
8
|
+
|
|
9
|
+
expect(File.exist?(path)).to eq true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "active_admin.js" do
|
|
13
|
+
path = Rails.root + "app/assets/javascripts/active_admin.js"
|
|
14
|
+
|
|
15
|
+
expect(File.exist?(path)).to eq true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "the dashboard" do
|
|
19
|
+
path = Rails.root + "app/admin/dashboard.rb"
|
|
20
|
+
|
|
21
|
+
expect(File.exist?(path)).to eq true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "the initializer" do
|
|
25
|
+
path = Rails.root + "config/initializers/active_admin.rb"
|
|
26
|
+
|
|
27
|
+
expect(File.exist?(path)).to eq true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::Helpers::Collection do
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin::Helpers::Collection
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
Post.create!(title: "A post")
|
|
9
|
+
Post.create!(title: "A post")
|
|
10
|
+
Post.create!(title: "An other post")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#collection_size" do
|
|
14
|
+
it "should return the collection size for an ActiveRecord class" do
|
|
15
|
+
expect(collection_size(Post.where(nil))).to eq 3
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should return the collection size for an ActiveRecord::Relation" do
|
|
19
|
+
expect(collection_size(Post.where(title: "A post"))).to eq 2
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should return the collection size for a collection with group by" do
|
|
23
|
+
expect(collection_size(Post.group(:title))).to eq 2
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should return the collection size for a collection with group by, select and custom order" do
|
|
27
|
+
expect(collection_size(Post.select("title, count(*) as nb_posts").group(:title).order("nb_posts"))).to eq 2
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should return the collection size for an Array" do
|
|
31
|
+
expect(collection_size(Post.where(title: "A post").to_a)).to eq 2
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should take the defined collection by default" do
|
|
35
|
+
def collection; Post.where(nil); end
|
|
36
|
+
|
|
37
|
+
expect(collection_size).to eq 3
|
|
38
|
+
|
|
39
|
+
def collection; Post.where(title: "An other post"); end
|
|
40
|
+
|
|
41
|
+
expect(collection_size).to eq 1
|
|
42
|
+
|
|
43
|
+
def collection; Post.where(title: "A post").to_a end
|
|
44
|
+
|
|
45
|
+
expect(collection_size).to eq 2
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "#collection_is_empty?" do
|
|
50
|
+
it "should return true when the collection is empty" do
|
|
51
|
+
expect(collection_is_empty?(Post.where(title: "Non existing post"))).to eq true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should return false when the collection is not empty" do
|
|
55
|
+
expect(collection_is_empty?(Post.where(title: "A post"))).to eq false
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should take the defined collection by default" do
|
|
59
|
+
def collection; Post.where(nil); end
|
|
60
|
+
|
|
61
|
+
expect(collection_is_empty?).to eq false
|
|
62
|
+
|
|
63
|
+
def collection; Post.where(title: "Non existing post"); end
|
|
64
|
+
|
|
65
|
+
expect(collection_is_empty?).to eq true
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::ScopeChain do
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin::ScopeChain
|
|
6
|
+
|
|
7
|
+
describe "#scope_chain" do
|
|
8
|
+
let(:relation) { double }
|
|
9
|
+
|
|
10
|
+
context "when Scope has a scope method" do
|
|
11
|
+
let(:scope) { ActiveAdmin::Scope.new :published }
|
|
12
|
+
|
|
13
|
+
it "should call the method on the relation and return it" do
|
|
14
|
+
expect(relation).to receive(:published).and_return(:scoped_relation)
|
|
15
|
+
expect(scope_chain(scope, relation)).to eq :scoped_relation
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "when Scope has the scope method method ':all'" do
|
|
20
|
+
let(:scope) { ActiveAdmin::Scope.new :all }
|
|
21
|
+
|
|
22
|
+
it "should return the relation" do
|
|
23
|
+
expect(scope_chain(scope, relation)).to eq relation
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context "when Scope has a name and a scope block" do
|
|
28
|
+
let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| :scoped_relation } }
|
|
29
|
+
|
|
30
|
+
it "should instance_exec the block and return it" do
|
|
31
|
+
expect(scope_chain(scope, relation)).to eq :scoped_relation
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
require 'i18n/tasks'
|
|
3
|
+
|
|
4
|
+
Dir.glob('config/locales/*.yml') do |locale_file|
|
|
5
|
+
RSpec.describe locale_file do
|
|
6
|
+
it { is_expected.to be_parseable }
|
|
7
|
+
it { is_expected.to have_one_top_level_namespace }
|
|
8
|
+
it { is_expected.to be_named_like_top_level_namespace }
|
|
9
|
+
it { is_expected.to_not have_legacy_interpolations }
|
|
10
|
+
it { is_expected.to have_a_valid_locale }
|
|
11
|
+
it { is_expected.to be_a_subset_of 'config/locales/en.yml' }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
RSpec.describe 'I18n' do
|
|
16
|
+
let(:i18n) { I18n::Tasks::BaseTask.new }
|
|
17
|
+
let(:unused_keys) { i18n.unused_keys }
|
|
18
|
+
|
|
19
|
+
let(:failure_msg) do
|
|
20
|
+
<<-MSG.squish
|
|
21
|
+
#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to
|
|
22
|
+
show them
|
|
23
|
+
MSG
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'does not have unused keys' do
|
|
27
|
+
expect(unused_keys).to be_empty, failure_msg
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.shared_examples_for "ActiveAdmin::Localizers::ResourceLocalizer" do
|
|
4
|
+
it "should use proper translation" do
|
|
5
|
+
string = ActiveAdmin::Localizers::ResourceLocalizer.t(action, model: model, model_name: model_name)
|
|
6
|
+
expect(string).to eq translation
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should accessible via ActiveAdmin::Localizers" do
|
|
10
|
+
resource = double(resource_label: model, resource_name: double(i18n_key: model_name))
|
|
11
|
+
localizer = ActiveAdmin::Localizers.resource(resource)
|
|
12
|
+
expect(localizer.t(action)).to eq translation
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
RSpec.describe ActiveAdmin::Localizers::ResourceLocalizer do
|
|
17
|
+
let(:action) { 'new_model' }
|
|
18
|
+
let(:model) { 'Comment' }
|
|
19
|
+
let(:model_name) { 'comment' }
|
|
20
|
+
|
|
21
|
+
it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
|
|
22
|
+
let(:translation) { 'New Comment' }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "model action specified" do
|
|
26
|
+
around do |example|
|
|
27
|
+
with_translation active_admin: {resources: {comment: {new_model: 'Write comment'}}} do
|
|
28
|
+
example.call
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
|
|
33
|
+
let(:translation) { 'Write comment' }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::MenuCollection do
|
|
4
|
+
|
|
5
|
+
let(:menus) { ActiveAdmin::MenuCollection.new }
|
|
6
|
+
|
|
7
|
+
describe "#add" do
|
|
8
|
+
|
|
9
|
+
it "should initialize a new menu when first item" do
|
|
10
|
+
menus.add :default, label: "Hello World"
|
|
11
|
+
|
|
12
|
+
expect(menus.fetch(:default).items.size).to eq 1
|
|
13
|
+
expect(menus.fetch(:default)["Hello World"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should add items to an existing menu" do
|
|
17
|
+
menus.add :default, label: "Hello World"
|
|
18
|
+
menus.add :default, label: "Hello World Again"
|
|
19
|
+
|
|
20
|
+
expect(menus.fetch(:default).items.size).to eq 2
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "#clear!" do
|
|
26
|
+
|
|
27
|
+
it "should remove all menus" do
|
|
28
|
+
menus.add :default, label: "Hello World"
|
|
29
|
+
|
|
30
|
+
menus.clear!
|
|
31
|
+
|
|
32
|
+
expect {
|
|
33
|
+
menus.fetch(:non_default_menu)
|
|
34
|
+
}.to raise_error(ActiveAdmin::NoMenuError)
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
require 'active_admin/menu'
|
|
3
|
+
require 'active_admin/menu_item'
|
|
4
|
+
|
|
5
|
+
module ActiveAdmin
|
|
6
|
+
RSpec.describe MenuItem do
|
|
7
|
+
|
|
8
|
+
it "should have a label" do
|
|
9
|
+
item = MenuItem.new(label: "Dashboard")
|
|
10
|
+
expect(item.label).to eq "Dashboard"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should have a url" do
|
|
14
|
+
item = MenuItem.new(url: "/admin")
|
|
15
|
+
expect(item.url).to eq "/admin"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should have a priority of 10 by default" do
|
|
19
|
+
item = MenuItem.new
|
|
20
|
+
expect(item.priority).to eq 10
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should default to an empty hash for html_options" do
|
|
24
|
+
item = MenuItem.new
|
|
25
|
+
expect(item.html_options).to be_empty
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should accept an options hash for link_to" do
|
|
29
|
+
item = MenuItem.new html_options: { target: :blank }
|
|
30
|
+
expect(item.html_options).to include(target: :blank)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context "with no items" do
|
|
34
|
+
it "should be empty" do
|
|
35
|
+
item = MenuItem.new
|
|
36
|
+
expect(item.items).to be_empty
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should accept new children" do
|
|
40
|
+
item = MenuItem.new label: "Dashboard"
|
|
41
|
+
item.add label: "My Child Dashboard"
|
|
42
|
+
expect(item.items.first).to be_a MenuItem
|
|
43
|
+
expect(item.items.first.label).to eq "My Child Dashboard"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "with many children" do
|
|
48
|
+
let(:item) do
|
|
49
|
+
i = MenuItem.new(label: "Dashboard")
|
|
50
|
+
i.add label: "Blog"
|
|
51
|
+
i.add label: "Cars"
|
|
52
|
+
i.add label: "Users", priority: 1
|
|
53
|
+
i.add label: "Settings", priority: 2
|
|
54
|
+
i.add label: "Analytics", priority: 44
|
|
55
|
+
i
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should contain 5 submenu items" do
|
|
59
|
+
expect(item.items.count).to eq 5
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should give access to the menu item as an array" do
|
|
63
|
+
expect(item['Blog'].label).to eq 'Blog'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "children should hold a reference to their parent" do
|
|
67
|
+
expect(item["Blog"].parent).to eq item
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "#id" do
|
|
72
|
+
it "should be normalized" do
|
|
73
|
+
expect(MenuItem.new(id: "Foo Bar").id).to eq "foo_bar"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should not accept Procs" do
|
|
77
|
+
expect{ MenuItem.new(id: proc{"Dynamic"}).id }.to raise_error TypeError
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
require 'active_admin/menu'
|
|
3
|
+
require 'active_admin/menu_item'
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin
|
|
6
|
+
|
|
7
|
+
RSpec.describe ActiveAdmin::Menu do
|
|
8
|
+
|
|
9
|
+
context "with no items" do
|
|
10
|
+
it "should have an empty item collection" do
|
|
11
|
+
menu = Menu.new
|
|
12
|
+
expect(menu.items).to be_empty
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should accept new items" do
|
|
16
|
+
menu = Menu.new
|
|
17
|
+
menu.add label: "Dashboard"
|
|
18
|
+
expect(menu.items.first.label).to eq "Dashboard"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "with many items" do
|
|
23
|
+
let(:menu) do
|
|
24
|
+
Menu.new do |m|
|
|
25
|
+
m.add label: "Dashboard"
|
|
26
|
+
m.add label: "Blog"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should give access to the menu item as an array" do
|
|
31
|
+
expect(menu['Dashboard'].label).to eq 'Dashboard'
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "adding items with children" do
|
|
36
|
+
it "should add an empty item if the parent does not exist" do
|
|
37
|
+
menu = Menu.new
|
|
38
|
+
menu.add parent: "Admin", label: "Users"
|
|
39
|
+
|
|
40
|
+
expect(menu["Admin"]["Users"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should add a child to a parent if it exists" do
|
|
44
|
+
menu = Menu.new
|
|
45
|
+
menu.add parent: "Admin", label: "Users"
|
|
46
|
+
menu.add parent: "Admin", label: "Projects"
|
|
47
|
+
|
|
48
|
+
expect(menu["Admin"]["Projects"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should assign children regardless of resource file load order" do
|
|
52
|
+
menu = Menu.new
|
|
53
|
+
menu.add parent: "Users", label: "Posts"
|
|
54
|
+
menu.add label: "Users", url: "/some/url"
|
|
55
|
+
|
|
56
|
+
expect(menu["Users"].url).to eq "/some/url"
|
|
57
|
+
expect(menu["Users"]["Posts"]).to be_a ActiveAdmin::MenuItem
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::Resource, "authorization" do
|
|
4
|
+
|
|
5
|
+
let(:app){ ActiveAdmin::Application.new }
|
|
6
|
+
let(:namespace){ ActiveAdmin::Namespace.new(app, :admin) }
|
|
7
|
+
let(:auth){ double }
|
|
8
|
+
|
|
9
|
+
describe "authorization_adapter" do
|
|
10
|
+
|
|
11
|
+
it "should return AuthorizationAdapter by default" do
|
|
12
|
+
expect(app.authorization_adapter).to eq ActiveAdmin::AuthorizationAdapter
|
|
13
|
+
expect(namespace.authorization_adapter).to eq ActiveAdmin::AuthorizationAdapter
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should be settable on the namespace" do
|
|
17
|
+
namespace.authorization_adapter = auth
|
|
18
|
+
expect(namespace.authorization_adapter).to eq auth
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should be settable on the application" do
|
|
22
|
+
app.authorization_adapter = auth
|
|
23
|
+
expect(app.authorization_adapter).to eq auth
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::Namespace, "registering a page" do
|
|
4
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
5
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
6
|
+
let(:menu){ namespace.fetch_menu(:default) }
|
|
7
|
+
|
|
8
|
+
context "with no configuration" do
|
|
9
|
+
before do
|
|
10
|
+
namespace.register_page "Status"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should store the namespaced registered configuration" do
|
|
14
|
+
expect(namespace.resources.keys).to include('Status')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should create a new controller in the default namespace" do
|
|
18
|
+
expect(defined?(Admin::StatusController)).to eq 'constant'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should create a menu item" do
|
|
22
|
+
expect(menu["Status"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "with a block configuration" do
|
|
27
|
+
it "should be evaluated in the dsl" do
|
|
28
|
+
expect{ |block|
|
|
29
|
+
namespace.register_page "Status", &block
|
|
30
|
+
}.to yield_control
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "adding to the menu" do
|
|
35
|
+
describe "adding as a top level item" do
|
|
36
|
+
before do
|
|
37
|
+
namespace.register_page "Status"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should add a new menu item" do
|
|
41
|
+
expect(menu['Status']).to_not eq nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "adding as a child" do
|
|
46
|
+
before do
|
|
47
|
+
namespace.register_page "Status" do
|
|
48
|
+
menu parent: 'Extra'
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should generate the parent menu item" do
|
|
53
|
+
expect(menu['Extra']).to_not eq nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should generate its own child item" do
|
|
57
|
+
expect(menu['Extra']['Status']).to_not eq nil
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "disabling the menu" do
|
|
62
|
+
before do
|
|
63
|
+
namespace.register_page "Status" do
|
|
64
|
+
menu false
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should not create a menu item" do
|
|
69
|
+
expect(menu["Status"]).to eq nil
|
|
70
|
+
end
|
|
71
|
+
end # describe "disabling the menu"
|
|
72
|
+
end # describe "adding to the menu"
|
|
73
|
+
|
|
74
|
+
describe "adding as a belongs to" do
|
|
75
|
+
context "when not optional" do
|
|
76
|
+
before do
|
|
77
|
+
namespace.register_page "Reports" do
|
|
78
|
+
belongs_to :author
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should be excluded from the menu" do
|
|
83
|
+
expect(menu["Reports"]).to be_nil
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context "when optional" do
|
|
88
|
+
before do
|
|
89
|
+
namespace.register_page "Reports" do
|
|
90
|
+
belongs_to :author, optional: true
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should be in the menu" do
|
|
95
|
+
expect(menu["Reports"]).to_not be_nil
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end # describe "adding as a belongs to"
|
|
99
|
+
end
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
# TODO: refactor this file so it doesn't depend on the Admin namespace in such a broken way.
|
|
4
|
+
# Specifically, the dashboard is already defined.
|
|
5
|
+
|
|
6
|
+
RSpec.describe ActiveAdmin::Namespace, "registering a resource" do
|
|
7
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
8
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
9
|
+
let(:menu){ namespace.fetch_menu(:default) }
|
|
10
|
+
|
|
11
|
+
after { namespace.unload! }
|
|
12
|
+
|
|
13
|
+
context "with no configuration" do
|
|
14
|
+
before do
|
|
15
|
+
namespace.register Category
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should store the namespaced registered configuration" do
|
|
19
|
+
expect(namespace.resources.keys).to include('Category')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should create a new controller in the default namespace" do
|
|
23
|
+
expect(defined?(Admin::CategoriesController)).to eq 'constant'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
skip "should not create the dashboard controller" do
|
|
27
|
+
defined?(Admin::DashboardController).to_not eq 'constant'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should create a menu item" do
|
|
31
|
+
expect(menu["Categories"]).to be_a ActiveAdmin::MenuItem
|
|
32
|
+
expect(menu["Categories"].instance_variable_get(:@url)).to be_a Proc
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context "with a block configuration" do
|
|
37
|
+
it "should be evaluated in the dsl" do
|
|
38
|
+
expect{ |block|
|
|
39
|
+
namespace.register Category, &block
|
|
40
|
+
}.to yield_control
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "with a resource that's namespaced" do
|
|
45
|
+
before do
|
|
46
|
+
module ::Mock; class Resource; def self.has_many(arg1, arg2); end; end; end
|
|
47
|
+
namespace.register Mock::Resource
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should store the namespaced registered configuration" do
|
|
51
|
+
expect(namespace.resources.keys).to include('Mock::Resource')
|
|
52
|
+
end
|
|
53
|
+
it "should create a new controller in the default namespace" do
|
|
54
|
+
expect(defined?(Admin::MockResourcesController)).to eq 'constant'
|
|
55
|
+
end
|
|
56
|
+
it "should create a menu item" do
|
|
57
|
+
expect(menu["Mock Resources"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should use the resource as the model in the controller" do
|
|
61
|
+
expect(Admin::MockResourcesController.resource_class).to eq Mock::Resource
|
|
62
|
+
end
|
|
63
|
+
end # context "with a resource that's namespaced"
|
|
64
|
+
|
|
65
|
+
describe "finding resource instances" do
|
|
66
|
+
it "should return the resource when its been registered" do
|
|
67
|
+
post = namespace.register Post
|
|
68
|
+
expect(namespace.resource_for(Post)).to eq post
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'should return nil when the resource has not been registered' do
|
|
72
|
+
expect(namespace.resource_for(Post)).to eq nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should return the parent when the parent class has been registered and the child has not" do
|
|
76
|
+
user = namespace.register User
|
|
77
|
+
expect(namespace.resource_for(Publisher)).to eq user
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return the resource if it and it's parent were registered" do
|
|
81
|
+
user = namespace.register User
|
|
82
|
+
publisher = namespace.register Publisher
|
|
83
|
+
expect(namespace.resource_for(Publisher)).to eq publisher
|
|
84
|
+
end
|
|
85
|
+
end # describe "finding resource instances"
|
|
86
|
+
|
|
87
|
+
describe "adding to the menu" do
|
|
88
|
+
describe "adding as a top level item" do
|
|
89
|
+
before do
|
|
90
|
+
namespace.register Category
|
|
91
|
+
end
|
|
92
|
+
it "should add a new menu item" do
|
|
93
|
+
expect(menu['Categories']).to_not eq nil
|
|
94
|
+
end
|
|
95
|
+
end # describe "adding as a top level item"
|
|
96
|
+
|
|
97
|
+
describe "adding as a child" do
|
|
98
|
+
before do
|
|
99
|
+
namespace.register Category do
|
|
100
|
+
menu parent: 'Blog'
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
it "should generate the parent menu item" do
|
|
104
|
+
expect(menu['Blog']).to_not eq nil
|
|
105
|
+
end
|
|
106
|
+
it "should generate its own child item" do
|
|
107
|
+
expect(menu['Blog']['Categories']).to_not eq nil
|
|
108
|
+
end
|
|
109
|
+
end # describe "adding as a child"
|
|
110
|
+
|
|
111
|
+
describe "disabling the menu" do
|
|
112
|
+
before do
|
|
113
|
+
namespace.register Category do
|
|
114
|
+
menu false
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
it "should not create a menu item" do
|
|
118
|
+
expect(menu["Categories"]).to eq nil
|
|
119
|
+
end
|
|
120
|
+
end # describe "disabling the menu"
|
|
121
|
+
|
|
122
|
+
describe "adding as a belongs to" do
|
|
123
|
+
context "when not optional" do
|
|
124
|
+
before do
|
|
125
|
+
namespace.register Post do
|
|
126
|
+
belongs_to :author
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
it "should not show up in the menu" do
|
|
130
|
+
expect(menu["Posts"]).to eq nil
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
context "when optional" do
|
|
134
|
+
before do
|
|
135
|
+
namespace.register Post do
|
|
136
|
+
belongs_to :author, optional: true
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
it "should show up in the menu" do
|
|
140
|
+
expect(menu["Posts"]).to_not eq nil
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end # describe "adding to the menu"
|
|
145
|
+
|
|
146
|
+
describe "dashboard controller name" do
|
|
147
|
+
context "when namespaced" do
|
|
148
|
+
it "should be namespaced" do
|
|
149
|
+
namespace = ActiveAdmin::Namespace.new(application, :one)
|
|
150
|
+
namespace.register Category
|
|
151
|
+
expect(defined?(One::CategoriesController)).to eq 'constant'
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
context "when not namespaced" do
|
|
155
|
+
it "should not be namespaced" do
|
|
156
|
+
namespace = ActiveAdmin::Namespace.new(application, :two)
|
|
157
|
+
namespace.register Category
|
|
158
|
+
expect(defined?(Two::CategoriesController)).to eq 'constant'
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end # describe "dashboard controller name"
|
|
162
|
+
end # describe "registering a resource"
|