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,68 @@
|
|
|
1
|
+
ActiveAdmin::Dependency.pundit!
|
|
2
|
+
|
|
3
|
+
require 'pundit'
|
|
4
|
+
|
|
5
|
+
# Add a setting to the application to configure the pundit default policy
|
|
6
|
+
ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
|
|
7
|
+
|
|
8
|
+
module ActiveAdmin
|
|
9
|
+
|
|
10
|
+
class PunditAdapter < AuthorizationAdapter
|
|
11
|
+
|
|
12
|
+
def authorized?(action, subject = nil)
|
|
13
|
+
policy = retrieve_policy(subject)
|
|
14
|
+
action = format_action(action, subject)
|
|
15
|
+
|
|
16
|
+
policy.respond_to?(action) && policy.public_send(action)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def scope_collection(collection, action = Auth::READ)
|
|
20
|
+
# scoping is appliable only to read/index action
|
|
21
|
+
# which means there is no way how to scope other actions
|
|
22
|
+
Pundit.policy_scope!(user, collection)
|
|
23
|
+
rescue Pundit::NotDefinedError => e
|
|
24
|
+
if default_policy_class && default_policy_class.const_defined?(:Scope)
|
|
25
|
+
default_policy_class::Scope.new(user, collection).resolve
|
|
26
|
+
else
|
|
27
|
+
raise e
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def retrieve_policy(subject)
|
|
32
|
+
case subject
|
|
33
|
+
when nil then Pundit.policy!(user, resource)
|
|
34
|
+
when Class then Pundit.policy!(user, subject.new)
|
|
35
|
+
else Pundit.policy!(user, subject)
|
|
36
|
+
end
|
|
37
|
+
rescue Pundit::NotDefinedError => e
|
|
38
|
+
if default_policy_class
|
|
39
|
+
default_policy(user, subject)
|
|
40
|
+
else
|
|
41
|
+
raise e
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def format_action(action, subject)
|
|
46
|
+
# https://github.com/elabs/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
|
|
47
|
+
case action
|
|
48
|
+
when Auth::CREATE then :create?
|
|
49
|
+
when Auth::UPDATE then :update?
|
|
50
|
+
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
|
51
|
+
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
|
52
|
+
else "#{action}?"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def default_policy_class
|
|
59
|
+
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def default_policy(user, subject)
|
|
63
|
+
default_policy_class.new(user, subject)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require 'active_admin/helpers/optional_display'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
class Resource
|
|
6
|
+
module ActionItems
|
|
7
|
+
|
|
8
|
+
# Adds the default action items to a resource when it's initialized
|
|
9
|
+
def initialize(*args)
|
|
10
|
+
super
|
|
11
|
+
add_default_action_items
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# @return [Array] The set of action items for this resource
|
|
15
|
+
def action_items
|
|
16
|
+
@action_items ||= []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Add a new action item to a resource
|
|
20
|
+
#
|
|
21
|
+
# @param [Symbol] name
|
|
22
|
+
# @param [Hash] options valid keys include:
|
|
23
|
+
# :only: A single or array of controller actions to display
|
|
24
|
+
# this action item on.
|
|
25
|
+
# :except: A single or array of controller actions not to
|
|
26
|
+
# display this action item on.
|
|
27
|
+
# :priority: A single integer value. To control the display order. Default is 10.
|
|
28
|
+
def add_action_item(name, options = {}, &block)
|
|
29
|
+
self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def remove_action_item(name)
|
|
33
|
+
self.action_items.delete_if { |item| item.name == name }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns a set of action items to display for a specific controller action
|
|
37
|
+
#
|
|
38
|
+
# @param [String, Symbol] action the action to retrieve action items for
|
|
39
|
+
#
|
|
40
|
+
# @return [Array] Array of ActionItems for the controller actions
|
|
41
|
+
def action_items_for(action, render_context = nil)
|
|
42
|
+
action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Clears all the existing action items for this resource
|
|
46
|
+
def clear_action_items!
|
|
47
|
+
@action_items = []
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Used by active_admin Base view
|
|
51
|
+
def action_items?
|
|
52
|
+
!!@action_items && @action_items.any?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
# Adds the default action items to each resource
|
|
58
|
+
def add_default_action_items
|
|
59
|
+
add_default_new_action_item
|
|
60
|
+
add_default_edit_action_item
|
|
61
|
+
add_default_show_action_item
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Adds the default New link on index
|
|
65
|
+
def add_default_new_action_item
|
|
66
|
+
add_action_item :new, only: :index do
|
|
67
|
+
if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
|
|
68
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
69
|
+
link_to localizer.t(:new_model), new_resource_path
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Adds the default Edit link on show
|
|
75
|
+
def add_default_edit_action_item
|
|
76
|
+
add_action_item :edit, only: :show do
|
|
77
|
+
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
|
78
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
79
|
+
link_to localizer.t(:edit_model), edit_resource_path(resource)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Adds the default Destroy link on show
|
|
85
|
+
def add_default_show_action_item
|
|
86
|
+
add_action_item :destroy, only: :show do
|
|
87
|
+
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
|
88
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
89
|
+
link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
|
|
90
|
+
data: {confirm: localizer.t(:delete_confirmation)}
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Model class to store the data for ActionItems
|
|
99
|
+
class ActionItem
|
|
100
|
+
include ActiveAdmin::OptionalDisplay
|
|
101
|
+
|
|
102
|
+
attr_accessor :block, :name
|
|
103
|
+
|
|
104
|
+
def initialize(name, options = {}, &block)
|
|
105
|
+
@name = name
|
|
106
|
+
@options = options
|
|
107
|
+
@block = block
|
|
108
|
+
normalize_display_options!
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def html_class
|
|
112
|
+
"action_item #{@options[:class]}".rstrip
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def priority
|
|
116
|
+
@options[:priority] || 10
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
class Resource
|
|
4
|
+
module Attributes
|
|
5
|
+
|
|
6
|
+
def default_attributes
|
|
7
|
+
resource_class.columns.each_with_object({}) do |c, attrs|
|
|
8
|
+
unless reject_col?(c)
|
|
9
|
+
name = c.name.to_sym
|
|
10
|
+
attrs[name] = (method_for_column(name) || name)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def method_for_column(c)
|
|
16
|
+
resource_class.respond_to?(:reflect_on_all_associations) && foreign_methods.has_key?(c) && foreign_methods[c].name.to_sym
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def foreign_methods
|
|
20
|
+
@foreign_methods ||= resource_class.reflect_on_all_associations.
|
|
21
|
+
select{ |r| r.macro == :belongs_to }.
|
|
22
|
+
reject{ |r| r.chain.length > 2 && !r.options[:polymorphic] }.
|
|
23
|
+
index_by{ |r| r.foreign_key.to_sym }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def reject_col?(c)
|
|
27
|
+
primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def primary_col?(c)
|
|
31
|
+
c.name == resource_class.primary_key
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def sti_col?(c)
|
|
35
|
+
c.name == resource_class.inheritance_column
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def counter_cache_col?(c)
|
|
39
|
+
c.name.end_with?('_count')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def filtered_col?(c)
|
|
43
|
+
ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'active_admin/resource'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
class Resource
|
|
5
|
+
class BelongsTo
|
|
6
|
+
|
|
7
|
+
class TargetNotFound < StandardError
|
|
8
|
+
def initialize(key, namespace)
|
|
9
|
+
super "Could not find #{key} in #{namespace.name} " +
|
|
10
|
+
"with #{namespace.resources.map(&:resource_name)}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The resource which initiated this relationship
|
|
15
|
+
attr_reader :owner
|
|
16
|
+
|
|
17
|
+
def initialize(owner, target_name, options = {})
|
|
18
|
+
@owner, @target_name, @options = owner, target_name, options
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Returns the target resource class or raises an exception if it doesn't exist
|
|
22
|
+
def target
|
|
23
|
+
resource or raise TargetNotFound.new (@options[:class_name] || @target_name.to_s.camelize), namespace
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def resource
|
|
27
|
+
namespace.resources[@options[:class_name]] ||
|
|
28
|
+
namespace.resources[@target_name.to_s.camelize]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def namespace
|
|
32
|
+
@owner.namespace
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def optional?
|
|
36
|
+
@options[:optional]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def required?
|
|
40
|
+
!optional?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_param
|
|
44
|
+
:"#{@target_name}_id"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Controllers
|
|
4
|
+
delegate :resources_configuration, to: :controller
|
|
5
|
+
|
|
6
|
+
# Returns a properly formatted controller name for this
|
|
7
|
+
# config within its namespace
|
|
8
|
+
def controller_name
|
|
9
|
+
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Returns the controller for this config
|
|
13
|
+
def controller
|
|
14
|
+
@controller ||= controller_name.constantize
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
|
|
4
|
+
module Menu
|
|
5
|
+
|
|
6
|
+
# Set the menu options.
|
|
7
|
+
# To disable this menu item, call `menu(false)` from the DSL
|
|
8
|
+
def menu_item_options=(options)
|
|
9
|
+
@menu_item_options = options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def menu_item_options
|
|
13
|
+
@menu_item_options ||= {}
|
|
14
|
+
@menu_item_options.reverse_merge(default_menu_options)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def default_menu_options
|
|
18
|
+
# These local variables are accessible to the procs.
|
|
19
|
+
menu_resource_class = respond_to?(:resource_class) ? resource_class : self
|
|
20
|
+
resource = self
|
|
21
|
+
{
|
|
22
|
+
id: resource_name.plural,
|
|
23
|
+
label: proc{ resource.plural_resource_label },
|
|
24
|
+
url: proc{ resource.route_collection_path(params, url_options) },
|
|
25
|
+
if: proc{ authorized?(Auth::READ, menu_resource_class) }
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def navigation_menu_name=(menu_name)
|
|
30
|
+
self.menu_item_options = { menu_name: menu_name }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def navigation_menu_name
|
|
34
|
+
navigation_menu_name = @menu_item_options[:menu_name] if @menu_item_options
|
|
35
|
+
navigation_menu_name ||= DEFAULT_MENU
|
|
36
|
+
|
|
37
|
+
case navigation_menu_name
|
|
38
|
+
when Proc
|
|
39
|
+
controller.instance_exec(&navigation_menu_name).to_sym
|
|
40
|
+
else
|
|
41
|
+
navigation_menu_name
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def navigation_menu
|
|
46
|
+
namespace.fetch_menu(navigation_menu_name)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Invoked by namespace when menu is about to be rendered.
|
|
50
|
+
def add_to_menu(menu_collection)
|
|
51
|
+
if include_in_menu?
|
|
52
|
+
@menu_item = menu_collection.add navigation_menu_name, menu_item_options
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
attr_reader :menu_item
|
|
57
|
+
|
|
58
|
+
# Should this resource be added to the menu system?
|
|
59
|
+
def include_in_menu?
|
|
60
|
+
@menu_item_options != false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
|
|
4
|
+
module Naming
|
|
5
|
+
def resource_name
|
|
6
|
+
@resource_name ||= begin
|
|
7
|
+
as = @options[:as].gsub /\s/, '' if @options[:as]
|
|
8
|
+
|
|
9
|
+
if as || !resource_class.respond_to?(:model_name)
|
|
10
|
+
Name.new resource_class, as
|
|
11
|
+
else
|
|
12
|
+
Name.new resource_class
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns the name to call this resource such as "Bank Account"
|
|
18
|
+
def resource_label
|
|
19
|
+
resource_name.translate count: 1,
|
|
20
|
+
default: resource_name.to_s.gsub('::', ' ').titleize
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns the plural version of this resource such as "Bank Accounts"
|
|
24
|
+
def plural_resource_label(options = {})
|
|
25
|
+
defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
|
|
26
|
+
default: resource_label.pluralize.titleize }
|
|
27
|
+
resource_name.translate defaults.merge options
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Forms use the model's original `param_key`, so we can't use our
|
|
31
|
+
# custom `resource_name` when the model's been renamed in ActiveAdmin.
|
|
32
|
+
def param_key
|
|
33
|
+
if resource_class.respond_to? :model_name
|
|
34
|
+
resource_class.model_name.param_key
|
|
35
|
+
else
|
|
36
|
+
resource_name.param_key
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class Name < ActiveModel::Name
|
|
42
|
+
delegate :hash, to: :to_str
|
|
43
|
+
|
|
44
|
+
def initialize(klass, name = nil)
|
|
45
|
+
super(klass, nil, name)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def translate(options = {})
|
|
49
|
+
I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def route_key
|
|
53
|
+
plural
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def eql?(other)
|
|
57
|
+
to_str.eql?(other.to_str)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module PagePresenters
|
|
4
|
+
|
|
5
|
+
# for setting default css class in admin ui
|
|
6
|
+
def default_index_class
|
|
7
|
+
@default_index
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# A hash of page configurations for the controller indexed by action name
|
|
11
|
+
def page_presenters
|
|
12
|
+
@page_presenters ||= {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Sets page options for a given action
|
|
16
|
+
#
|
|
17
|
+
# @param [String, Symbol] action The action to store this configuration for
|
|
18
|
+
def set_page_options(action, options)
|
|
19
|
+
options[:as] ||= :table if action.to_sym == :index
|
|
20
|
+
set_page_presenter(action, PagePresenter.new(options))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Sets a page config for a given action
|
|
24
|
+
#
|
|
25
|
+
# @param [String, Symbol] action The action to store this configuration for
|
|
26
|
+
# @param [PagePresenter] page_presenter The instance of PagePresenter to store
|
|
27
|
+
def set_page_presenter(action, page_presenter)
|
|
28
|
+
|
|
29
|
+
if action.to_s == "index" && page_presenter[:as]
|
|
30
|
+
index_class = find_index_class(page_presenter[:as])
|
|
31
|
+
page_presenter_key = index_class.index_name.to_sym
|
|
32
|
+
set_index_presenter page_presenter_key, page_presenter
|
|
33
|
+
else
|
|
34
|
+
page_presenters[action.to_sym] = page_presenter
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Returns a stored page config
|
|
40
|
+
#
|
|
41
|
+
# @param [Symbol, String] action The action to get the config for
|
|
42
|
+
# @param [String] type The string specified in the presenters index_name method
|
|
43
|
+
# @return [PagePresenter, nil]
|
|
44
|
+
def get_page_presenter(action, type = nil)
|
|
45
|
+
|
|
46
|
+
if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
|
|
47
|
+
page_presenters[:index][type.to_sym]
|
|
48
|
+
elsif action.to_s == "index" && page_presenters[:index].kind_of?(Hash)
|
|
49
|
+
page_presenters[:index].default
|
|
50
|
+
else
|
|
51
|
+
page_presenters[action.to_sym]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
protected
|
|
57
|
+
|
|
58
|
+
# Stores a config for all index actions supplied
|
|
59
|
+
#
|
|
60
|
+
# @param [Symbol] index_as The index type to store in the configuration
|
|
61
|
+
# @param [PagePresenter] page_presenter The intance of PagePresenter to store
|
|
62
|
+
def set_index_presenter(index_as, page_presenter)
|
|
63
|
+
page_presenters[:index] ||= {}
|
|
64
|
+
|
|
65
|
+
#set first index as default value or the index with default param set to to true
|
|
66
|
+
if page_presenters[:index].empty? || page_presenter[:default] == true
|
|
67
|
+
page_presenters[:index].default = page_presenter
|
|
68
|
+
@default_index = find_index_class(page_presenter[:as])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
page_presenters[:index][index_as] = page_presenter
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Returns the actual class for renderering the main content on the index
|
|
75
|
+
# page. To set this, use the :as option in the page_presenter block.
|
|
76
|
+
#
|
|
77
|
+
# @param [Symbol, Class] symbol_or_class The component symbol or class
|
|
78
|
+
# @return [Class]
|
|
79
|
+
def find_index_class(symbol_or_class)
|
|
80
|
+
case symbol_or_class
|
|
81
|
+
when Symbol
|
|
82
|
+
::ActiveAdmin::Views.const_get("IndexAs" + symbol_or_class.to_s.camelcase)
|
|
83
|
+
when Class
|
|
84
|
+
symbol_or_class
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
class Resource
|
|
4
|
+
module Pagination
|
|
5
|
+
|
|
6
|
+
# The default number of records to display per page
|
|
7
|
+
attr_accessor :per_page
|
|
8
|
+
|
|
9
|
+
# The default number of records to display per page
|
|
10
|
+
attr_accessor :max_per_page
|
|
11
|
+
|
|
12
|
+
# Enable / disable pagination (defaults to true)
|
|
13
|
+
attr_accessor :paginate
|
|
14
|
+
|
|
15
|
+
def initialize(*args)
|
|
16
|
+
super
|
|
17
|
+
@paginate = true
|
|
18
|
+
@per_page = namespace.default_per_page
|
|
19
|
+
@max_per_page = namespace.max_per_page
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|