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,377 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# # Index as a Table
|
|
5
|
+
#
|
|
6
|
+
# By default, the index page is a table with each of the models content columns and links to
|
|
7
|
+
# show, edit and delete the object. There are many ways to customize what gets
|
|
8
|
+
# displayed.
|
|
9
|
+
#
|
|
10
|
+
# ## Defining Columns
|
|
11
|
+
#
|
|
12
|
+
# To display an attribute or a method on a resource, simply pass a symbol into the
|
|
13
|
+
# column method:
|
|
14
|
+
#
|
|
15
|
+
# ```ruby
|
|
16
|
+
# index do
|
|
17
|
+
# selectable_column
|
|
18
|
+
# column :title
|
|
19
|
+
# end
|
|
20
|
+
# ```
|
|
21
|
+
#
|
|
22
|
+
# For association columns we make an educated guess on what to display by
|
|
23
|
+
# calling the following methods in the following order:
|
|
24
|
+
#
|
|
25
|
+
# ```ruby
|
|
26
|
+
# :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
|
|
27
|
+
# ```
|
|
28
|
+
#
|
|
29
|
+
# This can be customized in `config/initializers/active_admin.rb`.
|
|
30
|
+
#
|
|
31
|
+
# If the default title does not work for you, pass it as the first argument:
|
|
32
|
+
#
|
|
33
|
+
# ```ruby
|
|
34
|
+
# index do
|
|
35
|
+
# selectable_column
|
|
36
|
+
# column "My Custom Title", :title
|
|
37
|
+
# end
|
|
38
|
+
# ```
|
|
39
|
+
#
|
|
40
|
+
# Sometimes that just isn't enough and you need to write some view-specific code.
|
|
41
|
+
# For example, say we wanted a "Title" column that links to the posts admin screen.
|
|
42
|
+
#
|
|
43
|
+
# `column` accepts a block that will be rendered for each of the objects in the collection.
|
|
44
|
+
# The block is called once for each resource, which is passed as an argument to the block.
|
|
45
|
+
#
|
|
46
|
+
# ```ruby
|
|
47
|
+
# index do
|
|
48
|
+
# selectable_column
|
|
49
|
+
# column "Title" do |post|
|
|
50
|
+
# link_to post.title, admin_post_path(post)
|
|
51
|
+
# end
|
|
52
|
+
# end
|
|
53
|
+
# ```
|
|
54
|
+
#
|
|
55
|
+
# ## Defining Actions
|
|
56
|
+
#
|
|
57
|
+
# To setup links to View, Edit and Delete a resource, use the `actions` method:
|
|
58
|
+
#
|
|
59
|
+
# ```ruby
|
|
60
|
+
# index do
|
|
61
|
+
# selectable_column
|
|
62
|
+
# column :title
|
|
63
|
+
# actions
|
|
64
|
+
# end
|
|
65
|
+
# ```
|
|
66
|
+
#
|
|
67
|
+
# You can also append custom links to the default links:
|
|
68
|
+
#
|
|
69
|
+
# ```ruby
|
|
70
|
+
# index do
|
|
71
|
+
# selectable_column
|
|
72
|
+
# column :title
|
|
73
|
+
# actions do |post|
|
|
74
|
+
# item "Preview", admin_preview_post_path(post), class: "member_link"
|
|
75
|
+
# end
|
|
76
|
+
# end
|
|
77
|
+
# ```
|
|
78
|
+
#
|
|
79
|
+
# Or forego the default links entirely:
|
|
80
|
+
#
|
|
81
|
+
# ```ruby
|
|
82
|
+
# index do
|
|
83
|
+
# column :title
|
|
84
|
+
# actions defaults: false do |post|
|
|
85
|
+
# item "View", admin_post_path(post)
|
|
86
|
+
# end
|
|
87
|
+
# end
|
|
88
|
+
# ```
|
|
89
|
+
#
|
|
90
|
+
# Or append custom action with custom html via arbo:
|
|
91
|
+
#
|
|
92
|
+
# ```ruby
|
|
93
|
+
# index do
|
|
94
|
+
# column :title
|
|
95
|
+
# actions do |post|
|
|
96
|
+
# a "View", href: admin_post_path(post)
|
|
97
|
+
# end
|
|
98
|
+
# end
|
|
99
|
+
# ```
|
|
100
|
+
#
|
|
101
|
+
# In case you prefer to list actions links in a dropdown menu:
|
|
102
|
+
#
|
|
103
|
+
# ```ruby
|
|
104
|
+
# index do
|
|
105
|
+
# selectable_column
|
|
106
|
+
# column :title
|
|
107
|
+
# actions dropdown: true do |post|
|
|
108
|
+
# item "Preview", admin_preview_post_path(post)
|
|
109
|
+
# end
|
|
110
|
+
# end
|
|
111
|
+
# ```
|
|
112
|
+
#
|
|
113
|
+
# In addition, you can insert the position of the row in the greater collection by using the index_column special command:
|
|
114
|
+
#
|
|
115
|
+
# ```ruby
|
|
116
|
+
# index do
|
|
117
|
+
# selectable_column
|
|
118
|
+
# index_column
|
|
119
|
+
# column :title
|
|
120
|
+
# end
|
|
121
|
+
# ```
|
|
122
|
+
#
|
|
123
|
+
# index_column take an optional offset parameter to allow a developer to set the starting number for the index (default is 1).
|
|
124
|
+
#
|
|
125
|
+
# ## Sorting
|
|
126
|
+
#
|
|
127
|
+
# When a column is generated from an Active Record attribute, the table is
|
|
128
|
+
# sortable by default. If you are creating a custom column, you may need to give
|
|
129
|
+
# Active Admin a hint for how to sort the table.
|
|
130
|
+
#
|
|
131
|
+
# You can pass the key specifying the attribute which gets used to sort objects using Active Record.
|
|
132
|
+
# By default, this is the column on the resource's table that the attribute corresponds to.
|
|
133
|
+
# Otherwise, any attribute that the resource collection responds to can be used.
|
|
134
|
+
#
|
|
135
|
+
# ```ruby
|
|
136
|
+
# index do
|
|
137
|
+
# column :title, sortable: :title do |post|
|
|
138
|
+
# link_to post.title, admin_post_path(post)
|
|
139
|
+
# end
|
|
140
|
+
# end
|
|
141
|
+
# ```
|
|
142
|
+
#
|
|
143
|
+
# You can turn off sorting on any column by passing false:
|
|
144
|
+
#
|
|
145
|
+
# ```ruby
|
|
146
|
+
# index do
|
|
147
|
+
# column :title, sortable: false
|
|
148
|
+
# end
|
|
149
|
+
# ```
|
|
150
|
+
#
|
|
151
|
+
# It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
|
|
152
|
+
# option to a `column->'key'` value:
|
|
153
|
+
#
|
|
154
|
+
# ```ruby
|
|
155
|
+
# index do
|
|
156
|
+
# column :keywords, sortable: "meta->'keywords'"
|
|
157
|
+
# end
|
|
158
|
+
# ```
|
|
159
|
+
#
|
|
160
|
+
# ## Custom sorting
|
|
161
|
+
#
|
|
162
|
+
# It is also possible to use database specific expressions and options for sorting by column
|
|
163
|
+
#
|
|
164
|
+
# ```ruby
|
|
165
|
+
# order_by(:title) do |order_clause|
|
|
166
|
+
# if order_clause.order == 'desc'
|
|
167
|
+
# [order_clause.to_sql, 'NULLS LAST'].join(' ')
|
|
168
|
+
# else
|
|
169
|
+
# [order_clause.to_sql, 'NULLS FIRST'].join(' ')
|
|
170
|
+
# end
|
|
171
|
+
# end
|
|
172
|
+
#
|
|
173
|
+
# index do
|
|
174
|
+
# column :title
|
|
175
|
+
# end
|
|
176
|
+
# ```
|
|
177
|
+
#
|
|
178
|
+
# ## Associated Sorting
|
|
179
|
+
#
|
|
180
|
+
# You're normally able to sort columns alphabetically, but by default you
|
|
181
|
+
# can't sort by associated objects. Though with a few simple changes, you can.
|
|
182
|
+
#
|
|
183
|
+
# Assuming you're on the Books index page, and Book has_one Publisher:
|
|
184
|
+
#
|
|
185
|
+
# ```ruby
|
|
186
|
+
# controller do
|
|
187
|
+
# def scoped_collection
|
|
188
|
+
# super.includes :publisher # prevents N+1 queries to your database
|
|
189
|
+
# end
|
|
190
|
+
# end
|
|
191
|
+
# ```
|
|
192
|
+
#
|
|
193
|
+
# Then it's simple to sort by any Publisher attribute from within the index table:
|
|
194
|
+
#
|
|
195
|
+
# ```ruby
|
|
196
|
+
# index do
|
|
197
|
+
# column :publisher, sortable: 'publishers.name'
|
|
198
|
+
# end
|
|
199
|
+
# ```
|
|
200
|
+
#
|
|
201
|
+
# ## Showing and Hiding Columns
|
|
202
|
+
#
|
|
203
|
+
# The entire index block is rendered within the context of the view, so you can
|
|
204
|
+
# easily do things that show or hide columns based on the current context.
|
|
205
|
+
#
|
|
206
|
+
# For example, if you were using CanCan:
|
|
207
|
+
#
|
|
208
|
+
# ```ruby
|
|
209
|
+
# index do
|
|
210
|
+
# column :title, sortable: false
|
|
211
|
+
# column :secret_data if can? :manage, Post
|
|
212
|
+
# end
|
|
213
|
+
# ```
|
|
214
|
+
#
|
|
215
|
+
# ## Custom row class
|
|
216
|
+
#
|
|
217
|
+
# In order to add special class to table rows pass the proc object as a `:row_class` option
|
|
218
|
+
# of the `index` method.
|
|
219
|
+
#
|
|
220
|
+
# ```ruby
|
|
221
|
+
# index row_class: ->elem { 'active' if elem.active? } do
|
|
222
|
+
# # columns
|
|
223
|
+
# end
|
|
224
|
+
# ```
|
|
225
|
+
#
|
|
226
|
+
class IndexAsTable < ActiveAdmin::Component
|
|
227
|
+
|
|
228
|
+
def build(page_presenter, collection)
|
|
229
|
+
table_options = {
|
|
230
|
+
id: "index_table_#{active_admin_config.resource_name.plural}",
|
|
231
|
+
class: "index_table index",
|
|
232
|
+
i18n: active_admin_config.resource_class,
|
|
233
|
+
sortable: true,
|
|
234
|
+
paginator: page_presenter[:paginator] != false,
|
|
235
|
+
row_class: page_presenter[:row_class]
|
|
236
|
+
}
|
|
237
|
+
if page_presenter.block
|
|
238
|
+
insert_tag IndexTableFor, collection, table_options do |t|
|
|
239
|
+
instance_exec(t, &page_presenter.block)
|
|
240
|
+
end
|
|
241
|
+
else
|
|
242
|
+
render partial: 'index_as_table', locals: { default_table_options: table_options }
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def self.index_name
|
|
247
|
+
"table"
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
#
|
|
251
|
+
# Extend the default ActiveAdmin::Views::TableFor with some
|
|
252
|
+
# methods for quickly displaying items on the index page
|
|
253
|
+
#
|
|
254
|
+
class IndexTableFor < ::ActiveAdmin::Views::TableFor
|
|
255
|
+
builder_method :index_table_for
|
|
256
|
+
|
|
257
|
+
# Display a column for checkbox
|
|
258
|
+
def selectable_column
|
|
259
|
+
return unless active_admin_config.batch_actions.any?
|
|
260
|
+
column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
|
|
261
|
+
resource_selection_cell resource
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def index_column(start_value = 1)
|
|
266
|
+
column '#', class: 'col-index', sortable: false do |resource|
|
|
267
|
+
@collection.offset_value + @collection.index(resource) + start_value
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Display a column for the id
|
|
272
|
+
def id_column
|
|
273
|
+
raise "#{resource_class.name} has no primary_key!" unless resource_class.primary_key
|
|
274
|
+
column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
|
|
275
|
+
if controller.action_methods.include?('show')
|
|
276
|
+
link_to resource.id, resource_path(resource), class: "resource_id_link"
|
|
277
|
+
elsif controller.action_methods.include?('edit')
|
|
278
|
+
link_to resource.id, edit_resource_path(resource), class: "resource_id_link"
|
|
279
|
+
else
|
|
280
|
+
resource.id
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def default_actions
|
|
286
|
+
raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Add links to perform actions.
|
|
290
|
+
#
|
|
291
|
+
# ```ruby
|
|
292
|
+
# # Add default links.
|
|
293
|
+
# actions
|
|
294
|
+
#
|
|
295
|
+
# # Add default links with a custom column title (empty by default).
|
|
296
|
+
# actions name: 'A title!'
|
|
297
|
+
#
|
|
298
|
+
# # Append some actions onto the end of the default actions.
|
|
299
|
+
# actions do |admin_user|
|
|
300
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
301
|
+
# item 'Grant User', grant_user_admin_user_path(admin_user)
|
|
302
|
+
# end
|
|
303
|
+
#
|
|
304
|
+
# # Append some actions onto the end of the default actions using arbo dsl.
|
|
305
|
+
# actions do |admin_user|
|
|
306
|
+
# a 'Grant Admin', href: grant_admin_admin_user_path(admin_user)
|
|
307
|
+
# end
|
|
308
|
+
#
|
|
309
|
+
# # Custom actions without the defaults.
|
|
310
|
+
# actions defaults: false do |admin_user|
|
|
311
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
312
|
+
# end
|
|
313
|
+
#
|
|
314
|
+
# # Append some actions onto the end of the default actions displayed in a Dropdown Menu
|
|
315
|
+
# actions dropdown: true do |admin_user|
|
|
316
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
317
|
+
# end
|
|
318
|
+
#
|
|
319
|
+
# # Custom actions without the defaults displayed in a Dropdown Menu.
|
|
320
|
+
# actions defaults: false, dropdown: true, dropdown_name: 'Additional actions' do |admin_user|
|
|
321
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
322
|
+
# end
|
|
323
|
+
#
|
|
324
|
+
# ```
|
|
325
|
+
def actions(options = {}, &block)
|
|
326
|
+
name = options.delete(:name) { '' }
|
|
327
|
+
defaults = options.delete(:defaults) { true }
|
|
328
|
+
dropdown = options.delete(:dropdown) { false }
|
|
329
|
+
dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
|
|
330
|
+
|
|
331
|
+
options[:class] ||= 'col-actions'
|
|
332
|
+
|
|
333
|
+
column name, options do |resource|
|
|
334
|
+
if dropdown
|
|
335
|
+
dropdown_menu dropdown_name do
|
|
336
|
+
defaults(resource) if defaults
|
|
337
|
+
instance_exec(resource, &block) if block_given?
|
|
338
|
+
end
|
|
339
|
+
else
|
|
340
|
+
table_actions do
|
|
341
|
+
defaults(resource, css_class: :member_link) if defaults
|
|
342
|
+
if block_given?
|
|
343
|
+
block_result = instance_exec(resource, &block)
|
|
344
|
+
text_node block_result unless block_result.is_a? Arbo::Element
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
private
|
|
352
|
+
|
|
353
|
+
def defaults(resource, options = {})
|
|
354
|
+
if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
|
|
355
|
+
item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}", title: I18n.t('active_admin.view')
|
|
356
|
+
end
|
|
357
|
+
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
|
358
|
+
item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: I18n.t('active_admin.edit')
|
|
359
|
+
end
|
|
360
|
+
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
|
361
|
+
item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}", title: I18n.t('active_admin.delete'),
|
|
362
|
+
method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
class TableActions < ActiveAdmin::Component
|
|
367
|
+
builder_method :table_actions
|
|
368
|
+
|
|
369
|
+
def item *args, **kwargs
|
|
370
|
+
text_node link_to(*args, **kwargs)
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
end # IndexTableFor
|
|
374
|
+
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
end
|
data/lib/active_admin.rb
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require 'active_support/core_ext'
|
|
2
|
+
require 'set'
|
|
3
|
+
|
|
4
|
+
require 'ransack'
|
|
5
|
+
require 'ransack_ext'
|
|
6
|
+
require 'kaminari'
|
|
7
|
+
require 'formtastic'
|
|
8
|
+
require 'formtastic_i18n'
|
|
9
|
+
require 'sass-rails'
|
|
10
|
+
require 'inherited_resources'
|
|
11
|
+
require 'jquery-rails'
|
|
12
|
+
require 'jquery-ui-rails'
|
|
13
|
+
require 'arbo'
|
|
14
|
+
require 'sprockets/es6'
|
|
15
|
+
|
|
16
|
+
require 'active_admin/helpers/i18n'
|
|
17
|
+
|
|
18
|
+
module ActiveAdmin
|
|
19
|
+
|
|
20
|
+
autoload :VERSION, 'active_admin/version'
|
|
21
|
+
autoload :Application, 'active_admin/application'
|
|
22
|
+
autoload :AssetRegistration, 'active_admin/asset_registration'
|
|
23
|
+
autoload :Authorization, 'active_admin/authorization_adapter'
|
|
24
|
+
autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
|
|
25
|
+
autoload :Callbacks, 'active_admin/callbacks'
|
|
26
|
+
autoload :Component, 'active_admin/component'
|
|
27
|
+
autoload :BaseController, 'active_admin/base_controller'
|
|
28
|
+
autoload :CanCanAdapter, 'active_admin/cancan_adapter'
|
|
29
|
+
autoload :ControllerAction, 'active_admin/controller_action'
|
|
30
|
+
autoload :CSVBuilder, 'active_admin/csv_builder'
|
|
31
|
+
autoload :Dependency, 'active_admin/dependency'
|
|
32
|
+
autoload :Deprecation, 'active_admin/deprecation'
|
|
33
|
+
autoload :Devise, 'active_admin/devise'
|
|
34
|
+
autoload :DSL, 'active_admin/dsl'
|
|
35
|
+
autoload :Event, 'active_admin/event'
|
|
36
|
+
autoload :FormBuilder, 'active_admin/form_builder'
|
|
37
|
+
autoload :Inputs, 'active_admin/inputs'
|
|
38
|
+
autoload :Localizers, 'active_admin/localizers'
|
|
39
|
+
autoload :Menu, 'active_admin/menu'
|
|
40
|
+
autoload :MenuCollection, 'active_admin/menu_collection'
|
|
41
|
+
autoload :MenuItem, 'active_admin/menu_item'
|
|
42
|
+
autoload :Namespace, 'active_admin/namespace'
|
|
43
|
+
autoload :OrderClause, 'active_admin/order_clause'
|
|
44
|
+
autoload :Page, 'active_admin/page'
|
|
45
|
+
autoload :PagePresenter, 'active_admin/page_presenter'
|
|
46
|
+
autoload :PageController, 'active_admin/page_controller'
|
|
47
|
+
autoload :PageDSL, 'active_admin/page_dsl'
|
|
48
|
+
autoload :PunditAdapter, 'active_admin/pundit_adapter'
|
|
49
|
+
autoload :Resource, 'active_admin/resource'
|
|
50
|
+
autoload :ResourceController, 'active_admin/resource_controller'
|
|
51
|
+
autoload :ResourceDSL, 'active_admin/resource_dsl'
|
|
52
|
+
autoload :Scope, 'active_admin/scope'
|
|
53
|
+
autoload :ScopeChain, 'active_admin/helpers/scope_chain'
|
|
54
|
+
autoload :SidebarSection, 'active_admin/sidebar_section'
|
|
55
|
+
autoload :TableBuilder, 'active_admin/table_builder'
|
|
56
|
+
autoload :ViewFactory, 'active_admin/view_factory'
|
|
57
|
+
autoload :ViewHelpers, 'active_admin/view_helpers'
|
|
58
|
+
autoload :Views, 'active_admin/views'
|
|
59
|
+
|
|
60
|
+
class << self
|
|
61
|
+
|
|
62
|
+
attr_accessor :application
|
|
63
|
+
|
|
64
|
+
def application
|
|
65
|
+
@application ||= ::ActiveAdmin::Application.new
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Gets called within the initializer
|
|
69
|
+
def setup
|
|
70
|
+
application.setup!
|
|
71
|
+
yield(application)
|
|
72
|
+
application.prepare!
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
delegate :configure_resource, to: :application
|
|
76
|
+
delegate :configure_page, to: :application
|
|
77
|
+
delegate :register, to: :application
|
|
78
|
+
delegate :register_page, to: :application
|
|
79
|
+
delegate :unload!, to: :application
|
|
80
|
+
delegate :load!, to: :application
|
|
81
|
+
delegate :routes, to: :application
|
|
82
|
+
|
|
83
|
+
# A callback is triggered each time (before) Active Admin loads the configuration files.
|
|
84
|
+
# In development mode, this will happen whenever the user changes files. In production
|
|
85
|
+
# it only happens on boot.
|
|
86
|
+
#
|
|
87
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
88
|
+
#
|
|
89
|
+
# Example:
|
|
90
|
+
#
|
|
91
|
+
# ActiveAdmin.before_load do |app|
|
|
92
|
+
# # Do some stuff before AA loads
|
|
93
|
+
# end
|
|
94
|
+
#
|
|
95
|
+
# @param [Block] block A block to call each time (before) AA loads resources
|
|
96
|
+
def before_load(&block)
|
|
97
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::BeforeLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# A callback is triggered each time (after) Active Admin loads the configuration files. This
|
|
101
|
+
# is an opportunity to hook into Resources after they've been loaded.
|
|
102
|
+
#
|
|
103
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
104
|
+
#
|
|
105
|
+
# Example:
|
|
106
|
+
#
|
|
107
|
+
# ActiveAdmin.after_load do |app|
|
|
108
|
+
# app.namespaces.each do |name, namespace|
|
|
109
|
+
# puts "Namespace: #{name} loaded!"
|
|
110
|
+
# end
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
# @param [Block] block A block to call each time (after) AA loads resources
|
|
114
|
+
def after_load(&block)
|
|
115
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::AfterLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Require things that don't support autoload
|
|
123
|
+
require 'active_admin/engine'
|
|
124
|
+
require 'active_admin/error'
|
|
125
|
+
|
|
126
|
+
# Require internal plugins
|
|
127
|
+
require 'active_admin/batch_actions'
|
|
128
|
+
require 'active_admin/filters'
|
|
129
|
+
|
|
130
|
+
# Require ORM-specific plugins
|
|
131
|
+
require 'active_admin/orm/active_record' if defined? ActiveRecord
|
|
132
|
+
require 'active_admin/orm/mongoid' if defined? Mongoid
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'active_admin'
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'bundler/inline'
|
|
3
|
+
rescue LoadError => e
|
|
4
|
+
STDERR.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
|
|
5
|
+
raise e
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
gemfile(true) do
|
|
9
|
+
source 'https://rubygems.org'
|
|
10
|
+
|
|
11
|
+
# Use local changes or ActiveAdmin main.
|
|
12
|
+
if ENV['ACTIVE_ADMIN_PATH']
|
|
13
|
+
gem 'activeadmin-rails', path: ENV['ACTIVE_ADMIN_PATH'], require: false
|
|
14
|
+
else
|
|
15
|
+
gem 'activeadmin-rails', github: 'varyonic/activeadmin-rails', require: false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Change Rails version if necessary.
|
|
19
|
+
gem 'rails', '~> 5.1.0'
|
|
20
|
+
|
|
21
|
+
gem 'sqlite3', '< 1.4', platform: :mri
|
|
22
|
+
gem 'activerecord-jdbcsqlite3-adapter', "~> 51.0", platform: :jruby
|
|
23
|
+
gem 'jruby-openssl', '~> 0.10.1', platforms: :jruby
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require 'active_record'
|
|
27
|
+
|
|
28
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
|
29
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
|
30
|
+
|
|
31
|
+
ActiveRecord::Schema.define do
|
|
32
|
+
create_table :active_admin_comments, force: true do |_t|
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
create_table :users, force: true do |t|
|
|
36
|
+
t.string :full_name
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
require 'action_controller/railtie'
|
|
41
|
+
require 'action_view/railtie'
|
|
42
|
+
require 'active_admin'
|
|
43
|
+
|
|
44
|
+
class TestApp < Rails::Application
|
|
45
|
+
config.root = __dir__
|
|
46
|
+
config.session_store :cookie_store, key: "cookie_store_key"
|
|
47
|
+
secrets.secret_token = 'secret_token'
|
|
48
|
+
secrets.secret_key_base = 'secret_key_base'
|
|
49
|
+
|
|
50
|
+
config.eager_load = false
|
|
51
|
+
config.logger = Logger.new($stdout)
|
|
52
|
+
Rails.logger = config.logger
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class ApplicationController < ActionController::Base
|
|
56
|
+
include Rails.application.routes.url_helpers
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class User < ActiveRecord::Base
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
ActiveAdmin.setup do |config|
|
|
63
|
+
# Authentication disabled by default. Override if necessary.
|
|
64
|
+
config.authentication_method = false
|
|
65
|
+
config.current_user_method = false
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Rails.application.initialize!
|
|
69
|
+
|
|
70
|
+
ActiveAdmin.register_page 'Dashboard' do
|
|
71
|
+
menu priority: 1, label: proc { I18n.t('active_admin.dashboard') }
|
|
72
|
+
content do
|
|
73
|
+
'Test Me'
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
ActiveAdmin.register User do
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
Rails.application.routes.draw do
|
|
81
|
+
ActiveAdmin.routes(self)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
require 'minitest/autorun'
|
|
85
|
+
require 'rack/test'
|
|
86
|
+
require 'rails/test_help'
|
|
87
|
+
|
|
88
|
+
# Replace this with the code necessary to make your test fail.
|
|
89
|
+
class BugTest < ActionDispatch::IntegrationTest
|
|
90
|
+
|
|
91
|
+
def test_admin_root_success?
|
|
92
|
+
get admin_root_url
|
|
93
|
+
assert_response :success
|
|
94
|
+
assert_match 'Test Me', response.body # has content
|
|
95
|
+
assert_match 'Users', response.body # has 'Your Models' in menu
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_admin_users
|
|
99
|
+
User.create! full_name: 'John Doe'
|
|
100
|
+
get admin_users_url
|
|
101
|
+
assert_response :success
|
|
102
|
+
assert_match 'John Doe', response.body # has created row
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def app
|
|
108
|
+
Rails.application
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Generators
|
|
3
|
+
class AssetsGenerator < Rails::Generators::Base
|
|
4
|
+
|
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
6
|
+
|
|
7
|
+
def install_assets
|
|
8
|
+
template 'active_admin.js', 'app/assets/javascripts/active_admin.js'
|
|
9
|
+
template "active_admin.scss", "app/assets/stylesheets/active_admin.scss"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//= require active_admin/base
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SASS variable overrides must be declared before loading up Active Admin's styles.
|
|
2
|
+
//
|
|
3
|
+
// To view the variables that Active Admin provides, take a look at
|
|
4
|
+
// `app/assets/stylesheets/active_admin/mixins/_variables.scss` in the
|
|
5
|
+
// Active Admin source.
|
|
6
|
+
//
|
|
7
|
+
// For example, to change the sidebar width:
|
|
8
|
+
// $sidebar-width: 242px;
|
|
9
|
+
|
|
10
|
+
// Active Admin's got SASS!
|
|
11
|
+
@import "active_admin/mixins";
|
|
12
|
+
@import "active_admin/base";
|
|
13
|
+
|
|
14
|
+
// Overriding any non-variable SASS must be done after the fact.
|
|
15
|
+
// For example, to change the default status-tag color:
|
|
16
|
+
//
|
|
17
|
+
// .status_tag { background: #6090DB; }
|