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,441 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::Views::TableFor do
|
|
4
|
+
describe "creating with the dsl" do
|
|
5
|
+
|
|
6
|
+
let(:collection) do
|
|
7
|
+
[
|
|
8
|
+
Post.new(title: "First Post", starred: true),
|
|
9
|
+
Post.new(title: "Second Post"),
|
|
10
|
+
Post.new(title: "Third Post", starred: false)
|
|
11
|
+
]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
let(:assigns){ { collection: collection } }
|
|
15
|
+
let(:helpers){ mock_action_view }
|
|
16
|
+
|
|
17
|
+
context "when creating a column using symbol argument" do
|
|
18
|
+
let(:table) do
|
|
19
|
+
render_component assigns, helpers do
|
|
20
|
+
table_for(collection, :title)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should create a table header based on the symbol" do
|
|
25
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should create a table row for each element in the collection" do
|
|
29
|
+
expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
["First Post", "Second Post", "Third Post"].each_with_index do |content, index|
|
|
33
|
+
it "should create a cell with #{content}" do
|
|
34
|
+
expect(table.find_by_tag("td")[index].content).to eq content
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context "when creating many columns using symbol arguments" do
|
|
40
|
+
let(:table) do
|
|
41
|
+
render_component assigns, helpers do
|
|
42
|
+
table_for(collection, :title, :created_at)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should create a table header based on the symbol" do
|
|
47
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
48
|
+
expect(table.find_by_tag("th").last.content).to eq "Created At"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should add a class to each table header based on the col name" do
|
|
52
|
+
expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
53
|
+
expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should create a table row for each element in the collection" do
|
|
57
|
+
expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should create a cell for each column" do
|
|
61
|
+
expect(table.find_by_tag("td").size).to eq 6
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should add a class for each cell based on the col name" do
|
|
65
|
+
expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
66
|
+
expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when creating a column using symbol arguments and another using block" do
|
|
71
|
+
let(:table) do
|
|
72
|
+
render_component assigns, helpers do
|
|
73
|
+
table_for(collection, :title) do
|
|
74
|
+
column :created_at
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should create a table header based on the symbol" do
|
|
80
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
81
|
+
expect(table.find_by_tag("th").last.content).to eq "Created At"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should add a class to each table header based on the col name" do
|
|
85
|
+
expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
86
|
+
expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should create a table row for each element in the collection" do
|
|
90
|
+
expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should create a cell for each column" do
|
|
94
|
+
expect(table.find_by_tag("td").size).to eq 6
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should add a class for each cell based on the col name" do
|
|
98
|
+
expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
99
|
+
expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
context "when creating a column with a symbol" do
|
|
104
|
+
let(:table) do
|
|
105
|
+
render_component assigns, helpers do
|
|
106
|
+
table_for(collection) do
|
|
107
|
+
column :title
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should create a table header based on the symbol" do
|
|
113
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should create a table row for each element in the collection" do
|
|
117
|
+
expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
["First Post", "Second Post", "Third Post"].each_with_index do |content, index|
|
|
121
|
+
it "should create a cell with #{content}" do
|
|
122
|
+
expect(table.find_by_tag("td")[index].content).to eq content
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "when creating many columns with symbols" do
|
|
128
|
+
let(:table) do
|
|
129
|
+
render_component assigns, helpers do
|
|
130
|
+
table_for(collection) do
|
|
131
|
+
column :title
|
|
132
|
+
column :created_at
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should create a table header based on the symbol" do
|
|
138
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
139
|
+
expect(table.find_by_tag("th").last.content).to eq "Created At"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "should add a class to each table header based on the col name" do
|
|
143
|
+
expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
144
|
+
expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "should create a table row for each element in the collection" do
|
|
148
|
+
expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "should create a cell for each column" do
|
|
152
|
+
expect(table.find_by_tag("td").size).to eq 6
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "should add a class for each cell based on the col name" do
|
|
156
|
+
expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
|
|
157
|
+
expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "when creating a column with block content" do
|
|
162
|
+
let(:table) do
|
|
163
|
+
render_component assigns, helpers do
|
|
164
|
+
table_for(collection) do
|
|
165
|
+
column :title do |post|
|
|
166
|
+
span(post.title)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should add a class to each table header based on the col name" do
|
|
173
|
+
expect(table.find_by_tag("th").first.class_list).to include("col-title")
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
[ "<span>First Post</span>",
|
|
177
|
+
"<span>Second Post</span>",
|
|
178
|
+
"<span>Third Post</span>"
|
|
179
|
+
].each_with_index do |content, index|
|
|
180
|
+
it "should create a cell with #{content}" do
|
|
181
|
+
expect(table.find_by_tag("td")[index].content.strip).to eq content
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
context "when creating a column with multiple block content" do
|
|
187
|
+
let(:table) do
|
|
188
|
+
render_component assigns, helpers do
|
|
189
|
+
table_for(collection) do
|
|
190
|
+
column :title do |post|
|
|
191
|
+
span(post.title)
|
|
192
|
+
span(post.title)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
3.times do |index|
|
|
199
|
+
it "should create a cell with multiple elements in row #{index}" do
|
|
200
|
+
expect(table.find_by_tag("td")[index].find_by_tag("span").size).to eq 2
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
context "when creating many columns with symbols, blocks and strings" do
|
|
206
|
+
let(:table) do
|
|
207
|
+
render_component assigns, helpers do
|
|
208
|
+
table_for(collection) do
|
|
209
|
+
column "My Custom Title", :title
|
|
210
|
+
column :created_at, class: "datetime"
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it "should add a class to each header based on class option or the col name" do
|
|
216
|
+
expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
|
|
217
|
+
expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col datetime"
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "should add a class to each cell based on class option or the col name" do
|
|
221
|
+
expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
|
|
222
|
+
expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col datetime"
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
context "when using a single record instead of a collection" do
|
|
227
|
+
let(:table) do
|
|
228
|
+
render_component nil, helpers do
|
|
229
|
+
table_for Post.new do
|
|
230
|
+
column :title
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "should render" do
|
|
236
|
+
expect(table.find_by_tag("th").first.content).to eq "Title"
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
context "when using a single Hash" do
|
|
241
|
+
let(:table) do
|
|
242
|
+
render_component nil, helpers do
|
|
243
|
+
table_for foo: 1, bar: 2 do
|
|
244
|
+
column :foo
|
|
245
|
+
column :bar
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it "should render" do
|
|
251
|
+
expect(table.find_by_tag("th")[0].content).to eq "Foo"
|
|
252
|
+
expect(table.find_by_tag("th")[1].content).to eq "Bar"
|
|
253
|
+
expect(table.find_by_tag("td")[0].content).to eq "1"
|
|
254
|
+
expect(table.find_by_tag("td")[1].content).to eq "2"
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
context "when using an Array of Hashes" do
|
|
259
|
+
let(:table) do
|
|
260
|
+
render_component nil, helpers do
|
|
261
|
+
table_for [{foo: 1}, {foo: 2}] do
|
|
262
|
+
column :foo
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "should render" do
|
|
268
|
+
expect(table.find_by_tag("th")[0].content).to eq "Foo"
|
|
269
|
+
expect(table.find_by_tag("td")[0].content).to eq "1"
|
|
270
|
+
expect(table.find_by_tag("td")[1].content).to eq "2"
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
context "when record attribute is boolean" do
|
|
275
|
+
let(:table) do
|
|
276
|
+
render_component assigns, helpers do
|
|
277
|
+
table_for(collection) do
|
|
278
|
+
column :starred
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "should render boolean attribute within status tag" do
|
|
284
|
+
expect(table.find_by_tag("span").first.class_list.to_a.join(' ')).to eq "status_tag yes"
|
|
285
|
+
expect(table.find_by_tag("span").first.content).to eq "Yes"
|
|
286
|
+
expect(table.find_by_tag("span").last.class_list.to_a.join(' ')).to eq "status_tag no"
|
|
287
|
+
expect(table.find_by_tag("span").last.content).to eq "No"
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
context 'when row_class' do
|
|
292
|
+
let(:table) do
|
|
293
|
+
render_component assigns, helpers do
|
|
294
|
+
table_for(collection, row_class: -> e { 'starred' if e.starred }) do
|
|
295
|
+
column :starred
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it 'should render boolean attribute within status tag' do
|
|
301
|
+
trs = table.find_by_tag('tr')
|
|
302
|
+
expect(trs.size).to eq 4
|
|
303
|
+
expect(trs.first.class_list.to_a.join(' ')).to eq ''
|
|
304
|
+
expect(trs.second.class_list.to_a.join(' ')).to eq 'odd starred'
|
|
305
|
+
expect(trs.third.class_list.to_a.join(' ')).to eq 'even'
|
|
306
|
+
expect(trs.fourth.class_list.to_a.join(' ')).to eq 'odd'
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
context "when i18n option is specified" do
|
|
311
|
+
around do |example|
|
|
312
|
+
with_translation(activerecord: { attributes: { post: { title: "Name" } } }) do
|
|
313
|
+
example.call
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
let(:table) do
|
|
318
|
+
render_component assigns, helpers do
|
|
319
|
+
table_for(collection, i18n: Post) do
|
|
320
|
+
column :title
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
it "should use localized column key" do
|
|
326
|
+
expect(table.find_by_tag("th").first.content).to eq "Name"
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
context "when i18n option is not specified" do
|
|
331
|
+
around do |example|
|
|
332
|
+
with_translation(activerecord: { attributes: { post: { title: "Name" } } }) do
|
|
333
|
+
example.call
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
let(:collection) do
|
|
338
|
+
Post.create([
|
|
339
|
+
{ title: "First Post", starred: true },
|
|
340
|
+
{ title: "Second Post" },
|
|
341
|
+
])
|
|
342
|
+
Post.where(starred: true)
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
let(:table) do
|
|
346
|
+
render_component assigns, helpers do
|
|
347
|
+
table_for(collection) do
|
|
348
|
+
column :title
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
it "should predict localized key based on AR collection klass" do
|
|
354
|
+
expect(table.find_by_tag("th").first.content).to eq "Name"
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
describe "column sorting" do
|
|
360
|
+
def build_column(*args, &block)
|
|
361
|
+
ActiveAdmin::Views::TableFor::Column.new(*args, &block)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
subject { table_column }
|
|
365
|
+
|
|
366
|
+
context "when default" do
|
|
367
|
+
let(:table_column){ build_column(:username) }
|
|
368
|
+
it { is_expected.to be_sortable }
|
|
369
|
+
|
|
370
|
+
describe '#sort_key' do
|
|
371
|
+
subject { super().sort_key }
|
|
372
|
+
it{ is_expected.to eq("username") }
|
|
373
|
+
end
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
context "when a block given with no sort key" do
|
|
377
|
+
let(:table_column){ build_column("Username"){ } }
|
|
378
|
+
it { is_expected.to be_sortable }
|
|
379
|
+
|
|
380
|
+
describe '#sort_key' do
|
|
381
|
+
subject { super().sort_key }
|
|
382
|
+
it { is_expected.to eq("Username") }
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
context "when a block given with a sort key" do
|
|
387
|
+
let(:table_column){ build_column("Username", sortable: :username){ } }
|
|
388
|
+
it { is_expected.to be_sortable }
|
|
389
|
+
|
|
390
|
+
describe '#sort_key' do
|
|
391
|
+
subject { super().sort_key }
|
|
392
|
+
it{ is_expected.to eq("username") }
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
context 'when a block given with virtual attribute and no sort key' do
|
|
397
|
+
let(:table_column) { build_column(:virtual, nil, Post) { } }
|
|
398
|
+
it { is_expected.not_to be_sortable }
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
context 'when symbol given as a data column should be sortable' do
|
|
402
|
+
let(:table_column){ build_column('Username column', :username) }
|
|
403
|
+
it { is_expected.to be_sortable }
|
|
404
|
+
|
|
405
|
+
describe '#sort_key' do
|
|
406
|
+
subject { super().sort_key }
|
|
407
|
+
it { is_expected.to eq 'username' }
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
context 'when sortable: true with a symbol and string' do
|
|
412
|
+
let(:table_column){ build_column('Username column', :username, sortable: true) }
|
|
413
|
+
it { is_expected.to be_sortable }
|
|
414
|
+
|
|
415
|
+
describe '#sort_key' do
|
|
416
|
+
subject { super().sort_key }
|
|
417
|
+
it { is_expected.to eq 'username' }
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
context "when sortable: false with a symbol" do
|
|
422
|
+
let(:table_column){ build_column(:username, sortable: false) }
|
|
423
|
+
it { is_expected.not_to be_sortable }
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
context "when sortable: false with a symbol and string" do
|
|
427
|
+
let(:table_column){ build_column("Username", :username, sortable: false) }
|
|
428
|
+
it { is_expected.not_to be_sortable }
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
context "when :sortable column is an association" do
|
|
432
|
+
let(:table_column){ build_column("Category", :category, Post) }
|
|
433
|
+
it { is_expected.not_to be_sortable }
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
context 'when :sortable column is an association and block given' do
|
|
437
|
+
let(:table_column){ build_column('Category', :category, Post) { } }
|
|
438
|
+
it { is_expected.not_to be_sortable }
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ActiveAdmin::Views::Tabs do
|
|
4
|
+
describe "creating with the dsl" do
|
|
5
|
+
context "when creating tabs with a symbol" do
|
|
6
|
+
before do
|
|
7
|
+
allow(I18n).to receive(:t).with("i18n.transliterate.rule".to_sym, anything).and_call_original
|
|
8
|
+
expect(I18n).to receive(:t).at_least(:once).with(:tab_key).and_return "テスト"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:tabs) do
|
|
12
|
+
render_component do
|
|
13
|
+
tabs do
|
|
14
|
+
tab :overview
|
|
15
|
+
tab I18n.t(:tab_key), id: :something_unique, html_options: { class: :some_css_class }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
let(:subject) { Capybara.string(tabs.to_s) }
|
|
21
|
+
|
|
22
|
+
it "should create a tab navigation bar based on the symbol" do
|
|
23
|
+
expect(subject).to have_content('Overview')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should have tab with id based on symbol" do
|
|
27
|
+
expect(subject).to have_selector('div#overview')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should have link with fragment based on symbol" do
|
|
31
|
+
expect(subject).to have_selector('a[href="#overview"]')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should handle translation" do
|
|
35
|
+
expect(subject).to have_content('テスト')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should have tab with id based on options" do
|
|
39
|
+
expect(subject).to have_selector('div#something_unique')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should have link with fragment based on options" do
|
|
43
|
+
expect(subject).to have_selector('a[href="#something_unique"]')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should have li with specific css class" do
|
|
47
|
+
expect(subject).to have_selector('li.some_css_class')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when creating a tab with a block" do
|
|
53
|
+
let(:tabs) do
|
|
54
|
+
render_component do
|
|
55
|
+
tabs do
|
|
56
|
+
tab :overview do
|
|
57
|
+
span 'tab 1'
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should create a tab navigation bar based on the symbol" do
|
|
64
|
+
expect(tabs.find_by_tag('li').first.content).to include("Overview")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should create a tab with a span inside of it" do
|
|
68
|
+
expect(tabs.find_by_tag('span').first.content).to eq('tab 1')
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when creating a tab with non-transliteratable string" do
|
|
73
|
+
let(:tabs) do
|
|
74
|
+
render_component do
|
|
75
|
+
tabs do
|
|
76
|
+
tab '🤗' do
|
|
77
|
+
'content'
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
let(:subject) { Capybara.string(tabs.to_s) }
|
|
84
|
+
|
|
85
|
+
it "should create a tab navigation bar based on the string" do
|
|
86
|
+
expect(subject).to have_content('🤗')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should have tab with id based on URL-encoded string" do
|
|
90
|
+
tab_content = subject.find('.tabs .tab-content div', text: 'content')
|
|
91
|
+
expect(tab_content['id']).to eq(CGI.escape('🤗'))
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should have link with fragment based on URL-encoded string" do
|
|
95
|
+
expect(subject).to have_link('🤗', href: "##{CGI.escape('🤗')}")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
include ActiveAdmin
|
|
4
|
+
RSpec.describe ActiveAdmin::Views::IndexAsBlog do
|
|
5
|
+
subject { described_class.new }
|
|
6
|
+
|
|
7
|
+
describe '#build' do
|
|
8
|
+
let(:page_presenter) { double('page_presenter', block: nil) }
|
|
9
|
+
let(:collection) { double('collection') }
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
expect(subject).to receive('build_posts')
|
|
13
|
+
expect(subject).to receive('add_class').with('index')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context 'when page_presenter has no block' do
|
|
17
|
+
before do
|
|
18
|
+
subject.build(page_presenter, collection)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it do
|
|
22
|
+
expect(subject.instance_variable_get(:@page_presenter))
|
|
23
|
+
.to eq(page_presenter)
|
|
24
|
+
expect(subject.instance_variable_get(:@collection)).to eq(collection)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context 'when page_presenter has block' do
|
|
29
|
+
let(:block) { Proc.new { double('proc_method') } }
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
allow(page_presenter).to receive(:block).and_return(block)
|
|
33
|
+
allow(subject).to receive('instance_exec')
|
|
34
|
+
subject.build(page_presenter, collection)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it do
|
|
38
|
+
expect(subject).to have_received('instance_exec')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
%w(title body).each do |method|
|
|
44
|
+
describe "#{method}" do
|
|
45
|
+
context 'when block given' do
|
|
46
|
+
let(:block_result) { double('block_result') }
|
|
47
|
+
|
|
48
|
+
it "should use the block to set the #{method}" do
|
|
49
|
+
expect(
|
|
50
|
+
subject.public_send("#{method}") do
|
|
51
|
+
block_result
|
|
52
|
+
end.yield
|
|
53
|
+
).to eq(block_result)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'when no block and method given' do
|
|
58
|
+
let(:method) { double('method') }
|
|
59
|
+
|
|
60
|
+
it "should use method to set the #{method}" do
|
|
61
|
+
expect(subject.public_send("#{method}", method)).to eq(method)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context 'when no block and no method given' do
|
|
66
|
+
it 'should be nil' do
|
|
67
|
+
expect(subject.public_send("#{method}")).to eq(nil)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe '.index_name' do
|
|
74
|
+
it { expect(described_class.index_name).to eq('blog') }
|
|
75
|
+
end
|
|
76
|
+
end
|
data/tasks/docs.rake
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'yard'
|
|
2
|
+
require 'yard/rake/yardoc_task'
|
|
3
|
+
|
|
4
|
+
namespace :docs do
|
|
5
|
+
|
|
6
|
+
YARD::Rake::YardocTask.new do |t|
|
|
7
|
+
t.files = ['lib/**/*.rb']
|
|
8
|
+
t.options = ['--no-output']
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def jekyll_redirect_string(filename)
|
|
12
|
+
<<-EOD.strip_heredoc
|
|
13
|
+
---
|
|
14
|
+
redirect_from: /docs/3-index-pages/#{filename}
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
EOD
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def filename_from_module(mod)
|
|
21
|
+
mod.name.to_s.underscore.tr('_', '-')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def write_docstrings_to(path, mods)
|
|
25
|
+
mods.each do |mod|
|
|
26
|
+
filename = filename_from_module(mod)
|
|
27
|
+
|
|
28
|
+
File.open("#{path}/#{filename}.md", 'w+') do |f|
|
|
29
|
+
f << jekyll_redirect_string("#{filename}.html") + mod.docstring + "\n"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def docs_syncronized?
|
|
35
|
+
# Do not print diff and yield whether exit code was zero
|
|
36
|
+
sh('git diff --quiet docs/3-index-pages') do |outcome, _|
|
|
37
|
+
return if outcome
|
|
38
|
+
|
|
39
|
+
# Output diff before raising error
|
|
40
|
+
sh('git diff docs/3-index-pages')
|
|
41
|
+
|
|
42
|
+
raise <<-MSG.strip_heredoc
|
|
43
|
+
The docs/3-index-pages directory is out of sync.
|
|
44
|
+
Run rake generate_cops_documentation and commit the results.
|
|
45
|
+
MSG
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
desc "Update docs in the docs folder"
|
|
50
|
+
task build: :yard do
|
|
51
|
+
require 'yard'
|
|
52
|
+
require 'active_support/all'
|
|
53
|
+
|
|
54
|
+
YARD::Registry.load!
|
|
55
|
+
views = YARD::Registry.at("ActiveAdmin::Views")
|
|
56
|
+
|
|
57
|
+
# Index Types
|
|
58
|
+
index_types = views.children.select{|obj| obj.name.to_s =~ /^IndexAs/ }
|
|
59
|
+
write_docstrings_to "docs/3-index-pages", index_types
|
|
60
|
+
|
|
61
|
+
docs_syncronized? if ENV["CI"]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
data/tasks/lint.rake
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
desc "Lints ActiveAdmin code base"
|
|
2
|
+
task lint: ["lint:rubocop", "lint:mdl"]
|
|
3
|
+
|
|
4
|
+
namespace :lint do
|
|
5
|
+
require "rubocop/rake_task"
|
|
6
|
+
desc "Checks ruby code style with RuboCop"
|
|
7
|
+
RuboCop::RakeTask.new
|
|
8
|
+
|
|
9
|
+
desc "Checks markdown code style with Markdownlint"
|
|
10
|
+
task :mdl do
|
|
11
|
+
puts "Running mdl..."
|
|
12
|
+
|
|
13
|
+
targets = [
|
|
14
|
+
*Dir.glob("docs/**/*.md"),
|
|
15
|
+
"CONTRIBUTING.md",
|
|
16
|
+
".github/ISSUE_TEMPLATE.md"
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
abort unless system("mdl", *targets)
|
|
20
|
+
end
|
|
21
|
+
end
|