activeadmin 1.0.0.pre1 → 2.9.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 +5 -5
- data/CHANGELOG.md +587 -939
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +110 -59
- data/LICENSE +0 -5
- data/README.md +80 -61
- data/app/assets/javascripts/active_admin/base.js +517 -0
- data/app/assets/stylesheets/active_admin/_base.scss +31 -34
- data/app/assets/stylesheets/active_admin/_forms.scss +33 -35
- data/app/assets/stylesheets/active_admin/_header.scss +40 -8
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/app/assets/stylesheets/active_admin/_normalize.scss +447 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
- data/app/assets/stylesheets/active_admin/components/_tables.scss +5 -3
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -11
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -1
- data/app/assets/stylesheets/active_admin/print.scss +3 -4
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -5
- data/app/javascript/active_admin/base.js +28 -0
- data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/app/javascript/active_admin/ext/jquery.js +9 -0
- data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/datepicker.js +16 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/has-many.js +95 -0
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
- data/app/views/active_admin/devise/registrations/new.html.erb +3 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +12 -6
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- 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/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +21 -7
- data/config/locales/ar.yml +62 -47
- data/config/locales/az.yml +138 -0
- data/config/locales/bg.yml +1 -3
- data/config/locales/bs.yml +1 -2
- data/config/locales/ca.yml +2 -4
- data/config/locales/cs.yml +1 -2
- data/config/locales/da.yml +45 -14
- data/config/locales/de-CH.yml +4 -3
- data/config/locales/de.yml +46 -3
- data/config/locales/el.yml +3 -4
- data/config/locales/en-CA.yml +139 -0
- data/config/locales/en-GB.yml +46 -5
- data/config/locales/en.yml +44 -9
- data/config/locales/eo.yml +145 -0
- data/config/locales/es-MX.yml +9 -6
- data/config/locales/es.yml +63 -14
- data/config/locales/fa.yml +1 -2
- data/config/locales/fi.yml +2 -3
- data/config/locales/fr.yml +36 -8
- data/config/locales/he.yml +53 -7
- data/config/locales/hr.yml +1 -2
- data/config/locales/hu.yml +6 -3
- data/config/locales/id.yml +135 -0
- data/config/locales/it.yml +49 -4
- data/config/locales/ja.yml +31 -7
- data/config/locales/ko.yml +66 -36
- data/config/locales/lt.yml +27 -6
- data/config/locales/lv.yml +3 -4
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +22 -8
- data/config/locales/nl.yml +26 -3
- data/config/locales/pl.yml +75 -5
- data/config/locales/pt-BR.yml +24 -2
- data/config/locales/pt-PT.yml +1 -2
- data/config/locales/ro.yml +1 -2
- data/config/locales/ru.yml +21 -4
- data/config/locales/sk.yml +168 -0
- data/config/locales/sv-SE.yml +50 -8
- data/config/locales/tr.yml +92 -45
- data/config/locales/uk.yml +30 -16
- data/config/locales/vi.yml +53 -12
- data/config/locales/zh-CN.yml +44 -7
- data/config/locales/zh-TW.yml +42 -3
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +68 -18
- data/docs/1-general-configuration.md +88 -4
- data/docs/10-custom-pages.md +56 -2
- data/docs/11-decorators.md +20 -5
- data/docs/12-arbre-components.md +75 -11
- data/docs/13-authorization-adapter.md +73 -36
- data/docs/14-gotchas.md +64 -18
- data/docs/2-resource-customization.md +91 -23
- data/docs/3-index-pages/custom-index.md +5 -1
- data/docs/3-index-pages/index-as-block.md +3 -5
- data/docs/3-index-pages/index-as-blog.md +4 -6
- data/docs/3-index-pages/index-as-grid.md +3 -5
- data/docs/3-index-pages/index-as-table.md +46 -9
- data/docs/3-index-pages.md +73 -10
- data/docs/4-csv-format.md +35 -0
- data/docs/5-forms.md +96 -18
- data/docs/6-show-pages.md +13 -25
- data/docs/7-sidebars.md +13 -1
- data/docs/8-custom-actions.md +18 -1
- data/docs/9-batch-actions.md +9 -5
- data/docs/CNAME +1 -0
- data/docs/Gemfile +3 -0
- data/docs/Gemfile.lock +259 -0
- data/docs/_config.yml +4 -0
- data/docs/_includes/footer.html +8 -0
- data/docs/_includes/google-analytics.html +16 -0
- data/docs/_includes/head.html +7 -0
- data/docs/_includes/toc.html +98 -0
- data/docs/_includes/top-menu.html +17 -0
- data/docs/_layouts/default.html +21 -0
- data/docs/documentation.md +60 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +14 -0
- data/docs/index.html +226 -0
- data/docs/stylesheets/main.css +1205 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +105 -138
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/authorization_adapter.rb +4 -7
- data/lib/active_admin/base_controller/authorization.rb +16 -21
- data/lib/active_admin/base_controller/menu.rb +10 -10
- data/lib/active_admin/base_controller.rb +15 -11
- data/lib/active_admin/batch_actions/controller.rb +6 -7
- data/lib/active_admin/batch_actions/resource_extension.rb +15 -15
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -4
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -7
- data/lib/active_admin/batch_actions/views/selection_cells.rb +7 -6
- data/lib/active_admin/batch_actions.rb +0 -1
- data/lib/active_admin/callbacks.rb +2 -2
- data/lib/active_admin/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +30 -20
- data/lib/active_admin/dependency.rb +36 -29
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/devise.rb +9 -9
- data/lib/active_admin/dsl.rb +5 -18
- 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 +14 -7
- data/lib/active_admin/error.rb +6 -6
- 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 +54 -0
- data/lib/active_admin/filters/forms.rb +17 -10
- data/lib/active_admin/filters/formtastic_addons.rb +2 -7
- data/lib/active_admin/filters/resource_extension.rb +50 -14
- data/lib/active_admin/filters.rb +7 -5
- data/lib/active_admin/form_builder.rb +112 -67
- data/lib/active_admin/generators/boilerplate.rb +53 -0
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/helpers/routes/url_helpers.rb +1 -1
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +13 -6
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +9 -9
- data/lib/active_admin/inputs/filters/base.rb +3 -1
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +25 -9
- data/lib/active_admin/inputs/filters/select_input.rb +8 -4
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +2 -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 +13 -15
- data/lib/active_admin/menu_collection.rb +0 -2
- data/lib/active_admin/menu_item.rb +10 -38
- data/lib/active_admin/namespace.rb +51 -32
- data/lib/active_admin/namespace_settings.rb +126 -0
- data/lib/active_admin/order_clause.rb +30 -8
- data/lib/active_admin/orm/active_record/comments/comment.rb +6 -20
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +44 -21
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments.rb +49 -29
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/page.rb +24 -5
- data/lib/active_admin/page_controller.rb +2 -2
- data/lib/active_admin/page_dsl.rb +5 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +22 -9
- data/lib/active_admin/resource/action_items.rb +34 -12
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +17 -4
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +9 -6
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +5 -5
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/pagination.rb +4 -0
- data/lib/active_admin/resource/routes.rb +56 -26
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/scopes.rb +5 -3
- data/lib/active_admin/resource/sidebars.rb +2 -2
- data/lib/active_admin/resource.rb +80 -22
- data/lib/active_admin/resource_collection.rb +5 -3
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/data_access.rb +56 -43
- data/lib/active_admin/resource_controller/decorators.rb +9 -31
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/streaming.rb +12 -5
- data/lib/active_admin/resource_controller.rb +26 -10
- data/lib/active_admin/resource_dsl.rb +67 -21
- data/lib/active_admin/router.rb +90 -82
- data/lib/active_admin/scope.rb +21 -14
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/sidebar_section.rb +6 -12
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -18
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
- data/lib/active_admin/view_helpers/display_helper.rb +51 -9
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +14 -1
- data/lib/active_admin/view_helpers/fields_for.rb +4 -4
- data/lib/active_admin/view_helpers/form_helper.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +11 -4
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
- data/lib/active_admin/view_helpers.rb +2 -2
- data/lib/active_admin/views/action_items.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +45 -13
- data/lib/active_admin/views/components/attributes_table.rb +11 -29
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +12 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +11 -13
- data/lib/active_admin/views/components/index_list.rb +6 -5
- 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 +52 -33
- data/lib/active_admin/views/components/panel.rb +2 -4
- data/lib/active_admin/views/components/scopes.rb +20 -12
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/sidebar_section.rb +6 -1
- data/lib/active_admin/views/components/site_title.rb +6 -7
- data/lib/active_admin/views/components/status_tag.rb +19 -23
- data/lib/active_admin/views/components/table_for.rb +31 -57
- data/lib/active_admin/views/components/tabs.rb +17 -5
- data/lib/active_admin/views/footer.rb +15 -4
- data/lib/active_admin/views/header.rb +3 -16
- data/lib/active_admin/views/index_as_blog.rb +3 -4
- data/lib/active_admin/views/index_as_grid.rb +28 -28
- data/lib/active_admin/views/index_as_table.rb +76 -28
- data/lib/active_admin/views/pages/base.rb +45 -58
- data/lib/active_admin/views/pages/form.rb +5 -2
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +9 -3
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views/title_bar.rb +6 -6
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +69 -67
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -3
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/{active_admin.css.scss → active_admin.scss} +3 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +17 -26
- data/lib/generators/active_admin/install/install_generator.rb +18 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +107 -5
- data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +2 -5
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/page/templates/page.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +8 -2
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
- data/lib/ransack_ext.rb +11 -3
- data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
- data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
- data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
- metadata +182 -553
- data/.gitignore +0 -49
- data/.hound.yml +0 -11
- data/.travis.yml +0 -42
- data/.yardopts +0 -8
- data/Gemfile +0 -54
- data/Guardfile +0 -8
- data/Rakefile +0 -33
- data/activeadmin.gemspec +0 -28
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/application.js.coffee +0 -32
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -37
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -27
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +0 -68
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
- data/app/assets/stylesheets/active_admin/components/_popovers.scss +0 -122
- data/app/assets/stylesheets/active_admin/mixins/_icons.scss +0 -20
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
- data/cucumber.yml +0 -3
- data/features/action_item.feature +0 -73
- data/features/authorization.feature +0 -64
- data/features/authorization_cancan.feature +0 -52
- data/features/authorization_pundit.feature +0 -37
- data/features/belongs_to.feature +0 -66
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -171
- data/features/comments/viewing_index.feature +0 -19
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -41
- data/features/development_reloading.feature +0 -30
- data/features/edit_page.feature +0 -117
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -43
- data/features/index/batch_actions.feature +0 -164
- data/features/index/filters.feature +0 -161
- data/features/index/format_as_csv.feature +0 -203
- data/features/index/formats.feature +0 -66
- data/features/index/index_as_block.feature +0 -15
- data/features/index/index_as_blog.feature +0 -69
- data/features/index/index_as_grid.feature +0 -45
- data/features/index/index_as_table.feature +0 -291
- data/features/index/index_blank_slate.feature +0 -83
- data/features/index/index_parameters.feature +0 -75
- data/features/index/index_scope_to.feature +0 -56
- data/features/index/index_scopes.feature +0 -251
- data/features/index/page_title.feature +0 -41
- data/features/index/pagination.feature +0 -59
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -53
- data/features/new_page.feature +0 -109
- data/features/registering_assets.feature +0 -35
- data/features/registering_pages.feature +0 -148
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -32
- data/features/root_to.feature +0 -17
- data/features/show/default_content.feature +0 -43
- data/features/show/page_title.feature +0 -58
- data/features/show/tabs.feature +0 -27
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -93
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -20
- data/features/step_definitions/additional_web_steps.rb +0 -81
- data/features/step_definitions/asset_steps.rb +0 -15
- data/features/step_definitions/attribute_steps.rb +0 -18
- data/features/step_definitions/batch_action_steps.rb +0 -72
- data/features/step_definitions/blog_steps.rb +0 -3
- data/features/step_definitions/breadcrumb_steps.rb +0 -3
- data/features/step_definitions/comment_steps.rb +0 -12
- data/features/step_definitions/configuration_steps.rb +0 -100
- data/features/step_definitions/dashboard_steps.rb +0 -15
- data/features/step_definitions/factory_steps.rb +0 -34
- data/features/step_definitions/filter_steps.rb +0 -39
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -52
- data/features/step_definitions/i18n_steps.rb +0 -3
- data/features/step_definitions/index_scope_steps.rb +0 -21
- data/features/step_definitions/index_views_steps.rb +0 -3
- data/features/step_definitions/layout_steps.rb +0 -3
- data/features/step_definitions/member_link_steps.rb +0 -7
- data/features/step_definitions/menu_steps.rb +0 -11
- data/features/step_definitions/pagination_steps.rb +0 -7
- data/features/step_definitions/sidebar_steps.rb +0 -13
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/symbol_leak_steps.rb +0 -3
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -119
- data/features/step_definitions/user_steps.rb +0 -45
- data/features/step_definitions/web_steps.rb +0 -85
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -73
- data/features/support/env.rb +0 -145
- data/features/support/paths.rb +0 -71
- data/features/support/selectors.rb +0 -45
- data/features/symbol_leak.feature +0 -35
- data/features/users/logging_in.feature +0 -34
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +0 -28
- data/lib/active_admin/event.rb +0 -33
- data/lib/active_admin/helpers/settings.rb +0 -115
- data/lib/active_admin/iconic/icons.rb +0 -142
- data/lib/active_admin/iconic.rb +0 -53
- data/lib/active_admin/view_helpers/icon_helper.rb +0 -12
- data/lib/active_admin/views/components/action_list_popover.rb +0 -29
- data/lib/active_admin/views/components/popover.rb +0 -27
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/lib/generators/active_admin/resource/templates/admin.rb +0 -18
- data/script/local +0 -44
- data/script/travis_cache +0 -107
- data/script/use_rails +0 -53
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +0 -82
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
- data/spec/javascripts/fixtures/checkboxes.html +0 -9
- data/spec/javascripts/fixtures/flashes.html +0 -2
- data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
- data/spec/javascripts/helpers/SpecHelper.js +0 -3
- data/spec/javascripts/support/jasmine.yml +0 -74
- data/spec/javascripts/support/jasmine_config.rb +0 -23
- data/spec/javascripts/support/jasmine_runner.rb +0 -32
- data/spec/rails_helper.rb +0 -154
- data/spec/requests/default_namespace_spec.rb +0 -61
- data/spec/requests/javascript_spec.rb +0 -20
- data/spec/requests/memory_spec.rb +0 -23
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -17
- data/spec/support/deferred_garbage_collection.rb +0 -19
- data/spec/support/detect_rails_version.rb +0 -34
- data/spec/support/integration_example_group.rb +0 -31
- data/spec/support/jslint.yml +0 -80
- data/spec/support/rails_template.rb +0 -138
- data/spec/support/rails_template_with_data.rb +0 -59
- data/spec/support/templates/admin/stores.rb +0 -9
- data/spec/support/templates/cucumber.rb +0 -24
- data/spec/support/templates/cucumber_with_reloading.rb +0 -5
- data/spec/support/templates/en.yml +0 -8
- data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
- data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
- data/spec/support/templates/policies/admin_user_policy.rb +0 -11
- data/spec/support/templates/policies/application_policy.rb +0 -45
- data/spec/support/templates/policies/category_policy.rb +0 -7
- data/spec/support/templates/policies/post_policy.rb +0 -15
- data/spec/support/templates/policies/store_policy.rb +0 -11
- data/spec/support/templates/policies/user_policy.rb +0 -11
- data/spec/support/templates/post_decorator.rb +0 -11
- data/spec/unit/abstract_view_factory_spec.rb +0 -79
- data/spec/unit/action_builder_spec.rb +0 -132
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -140
- data/spec/unit/asset_registration_spec.rb +0 -52
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
- data/spec/unit/authorization/index_overriding_spec.rb +0 -22
- data/spec/unit/auto_link_spec.rb +0 -69
- data/spec/unit/batch_actions/resource_spec.rb +0 -92
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -51
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -166
- data/spec/unit/component_spec.rb +0 -18
- data/spec/unit/config_shared_examples.rb +0 -59
- data/spec/unit/controller_filters_spec.rb +0 -44
- data/spec/unit/csv_builder_spec.rb +0 -244
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -96
- data/spec/unit/dsl_spec.rb +0 -122
- data/spec/unit/event_spec.rb +0 -47
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -433
- data/spec/unit/filters/resource_spec.rb +0 -121
- data/spec/unit/form_builder_spec.rb +0 -752
- data/spec/unit/generators/install_spec.rb +0 -23
- data/spec/unit/helpers/collection_spec.rb +0 -65
- data/spec/unit/helpers/scope_chain_spec.rb +0 -36
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -12
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -143
- data/spec/unit/menu_spec.rb +0 -71
- data/spec/unit/namespace/authorization_spec.rb +0 -27
- data/spec/unit/namespace/register_page_spec.rb +0 -74
- data/spec/unit/namespace/register_resource_spec.rb +0 -161
- data/spec/unit/namespace_spec.rb +0 -103
- data/spec/unit/order_clause_spec.rb +0 -81
- data/spec/unit/page_controller_spec.rb +0 -5
- data/spec/unit/page_spec.rb +0 -78
- data/spec/unit/pretty_format_spec.rb +0 -63
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -65
- data/spec/unit/resource/includes_spec.rb +0 -21
- data/spec/unit/resource/menu_spec.rb +0 -18
- data/spec/unit/resource/naming_spec.rb +0 -122
- data/spec/unit/resource/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -73
- data/spec/unit/resource/scopes_spec.rb +0 -50
- data/spec/unit/resource/sidebars_spec.rb +0 -43
- data/spec/unit/resource_collection_spec.rb +0 -158
- data/spec/unit/resource_controller/data_access_spec.rb +0 -140
- data/spec/unit/resource_controller/decorators_spec.rb +0 -83
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -45
- data/spec/unit/resource_controller_spec.rb +0 -269
- data/spec/unit/resource_registration_spec.rb +0 -56
- data/spec/unit/resource_spec.rb +0 -278
- data/spec/unit/routing_spec.rb +0 -180
- data/spec/unit/scope_spec.rb +0 -190
- data/spec/unit/settings_spec.rb +0 -118
- data/spec/unit/view_factory_spec.rb +0 -21
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
- data/spec/unit/view_helpers/display_name_spec.rb +0 -69
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
- data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
- data/spec/unit/view_helpers/flash_helper_spec.rb +0 -25
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
- data/spec/unit/views/components/action_list_popover_spec.rb +0 -40
- data/spec/unit/views/components/attributes_table_spec.rb +0 -272
- data/spec/unit/views/components/batch_action_popover_spec.rb +0 -47
- data/spec/unit/views/components/blank_slate_spec.rb +0 -27
- data/spec/unit/views/components/columns_spec.rb +0 -172
- data/spec/unit/views/components/index_list_spec.rb +0 -35
- data/spec/unit/views/components/index_table_for_spec.rb +0 -46
- data/spec/unit/views/components/paginated_collection_spec.rb +0 -236
- data/spec/unit/views/components/panel_spec.rb +0 -62
- data/spec/unit/views/components/popover_spec.rb +0 -33
- data/spec/unit/views/components/sidebar_section_spec.rb +0 -47
- data/spec/unit/views/components/site_title_spec.rb +0 -78
- data/spec/unit/views/components/status_tag_spec.rb +0 -235
- data/spec/unit/views/components/table_for_spec.rb +0 -384
- data/spec/unit/views/components/tabs_spec.rb +0 -39
- data/spec/unit/views/components/unsupported_browser_spec.rb +0 -47
- data/spec/unit/views/pages/form_spec.rb +0 -42
- data/spec/unit/views/pages/index_spec.rb +0 -60
- data/spec/unit/views/pages/layout_spec.rb +0 -59
- data/spec/unit/views/pages/show_spec.rb +0 -33
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/docs.rake +0 -37
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -83
- data/tasks/yard.rake +0 -9
data/lib/active_admin/dsl.rb
CHANGED
|
@@ -83,14 +83,7 @@ module ActiveAdmin
|
|
|
83
83
|
# this action item on.
|
|
84
84
|
# :except: A single or array of controller actions not to
|
|
85
85
|
# display this action item on.
|
|
86
|
-
def action_item(name
|
|
87
|
-
if name.is_a?(Hash)
|
|
88
|
-
options = name
|
|
89
|
-
name = nil
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
Deprecation.warn "using `action_item` without a name is deprecated! Use `action_item(:edit)`." unless name
|
|
93
|
-
|
|
86
|
+
def action_item(name, options = {}, &block)
|
|
94
87
|
config.add_action_item(name, options, &block)
|
|
95
88
|
end
|
|
96
89
|
|
|
@@ -108,7 +101,7 @@ module ActiveAdmin
|
|
|
108
101
|
def batch_action(title, options = {}, &block)
|
|
109
102
|
# Create symbol & title information
|
|
110
103
|
if title.is_a? String
|
|
111
|
-
sym = title.titleize.tr(
|
|
104
|
+
sym = title.titleize.tr(" ", "").underscore.to_sym
|
|
112
105
|
else
|
|
113
106
|
sym = title
|
|
114
107
|
title = sym.to_s.titleize
|
|
@@ -116,7 +109,7 @@ module ActiveAdmin
|
|
|
116
109
|
|
|
117
110
|
# Either add/remove the batch action
|
|
118
111
|
unless options == false
|
|
119
|
-
config.add_batch_action(
|
|
112
|
+
config.add_batch_action(sym, title, options, &block)
|
|
120
113
|
else
|
|
121
114
|
config.remove_batch_action sym
|
|
122
115
|
end
|
|
@@ -128,7 +121,7 @@ module ActiveAdmin
|
|
|
128
121
|
config.menu_item_options = options
|
|
129
122
|
end
|
|
130
123
|
|
|
131
|
-
# Set the name of the navigation menu to display. This is mainly used in
|
|
124
|
+
# Set the name of the navigation menu to display. This is mainly used in conjunction with the
|
|
132
125
|
# `#belongs_to` functionality.
|
|
133
126
|
#
|
|
134
127
|
# @param [Symbol] menu_name The name of the menu to display as the global navigation
|
|
@@ -137,7 +130,7 @@ module ActiveAdmin
|
|
|
137
130
|
# Pass a block returning the name of a menu you want rendered for the request, being
|
|
138
131
|
# executed in the context of the controller
|
|
139
132
|
#
|
|
140
|
-
def navigation_menu(menu_name=nil, &block)
|
|
133
|
+
def navigation_menu(menu_name = nil, &block)
|
|
141
134
|
config.navigation_menu_name = menu_name || block
|
|
142
135
|
end
|
|
143
136
|
|
|
@@ -163,11 +156,5 @@ module ActiveAdmin
|
|
|
163
156
|
config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
|
|
164
157
|
end
|
|
165
158
|
|
|
166
|
-
def decorate_with(decorator_class)
|
|
167
|
-
# Force storage as a string. This will help us with reloading issues.
|
|
168
|
-
# Assuming decorator_class.to_s will return the name of the class allows
|
|
169
|
-
# us to handle a string or a class.
|
|
170
|
-
config.decorator_class_name = "::#{ decorator_class }"
|
|
171
|
-
end
|
|
172
159
|
end
|
|
173
160
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
class DynamicSetting
|
|
4
|
+
def self.build(setting, type)
|
|
5
|
+
(type ? klass(type) : self).new(setting)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.klass(type)
|
|
9
|
+
klass = "#{type.to_s.camelcase}Setting"
|
|
10
|
+
raise ArgumentError, "Unknown type: #{type}" unless ActiveAdmin.const_defined?(klass)
|
|
11
|
+
ActiveAdmin.const_get(klass)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def initialize(setting)
|
|
15
|
+
@setting = setting
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def value(*_args)
|
|
19
|
+
@setting
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Many configuration options (Ex: site_title, title_image) could either be
|
|
24
|
+
# static (String), methods (Symbol) or procs (Proc). This wrapper takes care of
|
|
25
|
+
# returning the content when String or using instance_eval when Symbol or Proc.
|
|
26
|
+
#
|
|
27
|
+
class StringSymbolOrProcSetting < DynamicSetting
|
|
28
|
+
def value(context = self)
|
|
29
|
+
case @setting
|
|
30
|
+
when Symbol, Proc
|
|
31
|
+
context.instance_eval(&@setting)
|
|
32
|
+
else
|
|
33
|
+
@setting
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "active_admin/dynamic_setting"
|
|
2
|
+
require "active_admin/settings_node"
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
|
|
6
|
+
class DynamicSettingsNode < SettingsNode
|
|
7
|
+
class << self
|
|
8
|
+
def register(name, value, type = nil)
|
|
9
|
+
class_attribute "#{name}_setting"
|
|
10
|
+
add_reader(name)
|
|
11
|
+
add_writer(name, type)
|
|
12
|
+
send "#{name}=", value
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add_reader(name)
|
|
16
|
+
define_singleton_method(name) do |*args|
|
|
17
|
+
send("#{name}_setting").value(*args)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add_writer(name, type)
|
|
22
|
+
define_singleton_method("#{name}=") do |value|
|
|
23
|
+
send("#{name}_setting=", DynamicSetting.build(value, type))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/active_admin/engine.rb
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
|
+
initializer "active_admin.load_app_path" do |app|
|
|
4
|
+
ActiveAdmin::Application.setting :app_path, app.root
|
|
5
|
+
ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
|
|
6
|
+
end
|
|
7
|
+
|
|
3
8
|
initializer "active_admin.precompile", group: :all do |app|
|
|
4
|
-
ActiveAdmin.application.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
unless ActiveAdmin.application.use_webpacker
|
|
10
|
+
ActiveAdmin.application.stylesheets.each do |path, _|
|
|
11
|
+
app.config.assets.precompile << path
|
|
12
|
+
end
|
|
13
|
+
ActiveAdmin.application.javascripts.each do |path|
|
|
14
|
+
app.config.assets.precompile << path
|
|
15
|
+
end
|
|
9
16
|
end
|
|
10
17
|
end
|
|
11
18
|
|
|
12
|
-
initializer
|
|
13
|
-
require
|
|
19
|
+
initializer "active_admin.routes" do
|
|
20
|
+
require "active_admin/helpers/routes/url_helpers"
|
|
14
21
|
end
|
|
15
22
|
end
|
|
16
23
|
end
|
data/lib/active_admin/error.rb
CHANGED
|
@@ -5,8 +5,10 @@ module ActiveAdmin
|
|
|
5
5
|
class AccessDenied < StandardError
|
|
6
6
|
attr_reader :user, :action, :subject
|
|
7
7
|
|
|
8
|
-
def initialize(user, action, subject)
|
|
9
|
-
@user
|
|
8
|
+
def initialize(user, action, subject = nil)
|
|
9
|
+
@user = user
|
|
10
|
+
@action = action
|
|
11
|
+
@subject = subject
|
|
10
12
|
|
|
11
13
|
super()
|
|
12
14
|
end
|
|
@@ -22,7 +24,7 @@ module ActiveAdmin
|
|
|
22
24
|
class ErrorLoading < Error
|
|
23
25
|
# Locates the most recent file and line from the caught exception's backtrace.
|
|
24
26
|
def find_cause(folder, backtrace)
|
|
25
|
-
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
|
|
27
|
+
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/) { [$1, $2] }.first
|
|
26
28
|
end
|
|
27
29
|
end
|
|
28
30
|
|
|
@@ -33,7 +35,7 @@ module ActiveAdmin
|
|
|
33
35
|
super "Your file, #{file} (line #{line}), caused a database error while Active Admin was loading. This " +
|
|
34
36
|
"is most common when your database is missing or doesn't have the latest migrations applied. To " +
|
|
35
37
|
"prevent this error, move the code to a place where it will only be run when a page is rendered. " +
|
|
36
|
-
"One solution can be, to wrap the query in a Proc." +
|
|
38
|
+
"One solution can be, to wrap the query in a Proc. " +
|
|
37
39
|
"Original error message: #{exception.message}"
|
|
38
40
|
end
|
|
39
41
|
|
|
@@ -43,8 +45,6 @@ module ActiveAdmin
|
|
|
43
45
|
raise new exception
|
|
44
46
|
end
|
|
45
47
|
|
|
46
|
-
private
|
|
47
|
-
|
|
48
48
|
def self.database_error_classes
|
|
49
49
|
@classes ||= []
|
|
50
50
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require "active_admin/filters/active_filter"
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module Filters
|
|
5
|
+
|
|
6
|
+
class Active
|
|
7
|
+
attr_accessor :filters, :resource
|
|
8
|
+
|
|
9
|
+
# Instantiate a `Active` object containing collection of current active filters
|
|
10
|
+
|
|
11
|
+
# @param resource [ActiveAdmin::Resource] current resource
|
|
12
|
+
# @param search [Ransack::Search] search object
|
|
13
|
+
#
|
|
14
|
+
# @see ActiveAdmin::ResourceController::DataAcces#apply_filtering
|
|
15
|
+
def initialize(resource, search)
|
|
16
|
+
@resource = resource
|
|
17
|
+
@filters = build_filters(search.conditions)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def build_filters(conditions)
|
|
23
|
+
conditions.map { |condition| ActiveFilter.new(resource, condition.dup) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
|
|
4
|
+
class ActiveFilter
|
|
5
|
+
include ActiveAdmin::ViewHelpers
|
|
6
|
+
|
|
7
|
+
attr_reader :resource, :condition, :related_class
|
|
8
|
+
|
|
9
|
+
# Instantiate a `ActiveFilter`
|
|
10
|
+
#
|
|
11
|
+
# @param resource [ActiveAdmin::Resource] current resource
|
|
12
|
+
# @param condition [Ransack::Nodes::Condition] applied ransack condition
|
|
13
|
+
def initialize(resource, condition)
|
|
14
|
+
@resource = resource
|
|
15
|
+
@condition = condition
|
|
16
|
+
@related_class = find_class if find_class?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def values
|
|
20
|
+
condition_values = condition.values.map(&:value)
|
|
21
|
+
if related_class
|
|
22
|
+
related_class.where(related_primary_key => condition_values)
|
|
23
|
+
else
|
|
24
|
+
condition_values
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def label
|
|
29
|
+
translated_predicate = predicate_name.downcase
|
|
30
|
+
if filter_label && filter_label.is_a?(Proc)
|
|
31
|
+
"#{filter_label.call} #{translated_predicate}"
|
|
32
|
+
elsif filter_label
|
|
33
|
+
"#{filter_label} #{translated_predicate}"
|
|
34
|
+
elsif related_class
|
|
35
|
+
"#{related_class_name} #{translated_predicate}"
|
|
36
|
+
else
|
|
37
|
+
"#{attribute_name} #{translated_predicate}"
|
|
38
|
+
end.strip
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def predicate_name
|
|
42
|
+
I18n.t(
|
|
43
|
+
"active_admin.filters.predicates.#{condition.predicate.name}",
|
|
44
|
+
default: ransack_predicate_name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def html_options
|
|
48
|
+
{ class: "current_filter current_filter_#{condition.key}" }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def resource_class
|
|
54
|
+
resource.resource_class
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def attribute_name
|
|
58
|
+
resource_class.human_attribute_name(name)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def related_class_name
|
|
62
|
+
return unless related_class
|
|
63
|
+
|
|
64
|
+
related_class.model_name.human
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def filter_label
|
|
68
|
+
return unless filter
|
|
69
|
+
|
|
70
|
+
filter[:label] || I18n.t(name, scope: ["formtastic", "labels"], default: nil)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#@return Ransack::Nodes::Attribute
|
|
74
|
+
def condition_attribute
|
|
75
|
+
condition.attributes[0]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def name
|
|
79
|
+
condition_attribute.attr_name
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def ransack_predicate_name
|
|
83
|
+
Ransack::Translate.predicate(condition.predicate.name)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def find_class?
|
|
87
|
+
["eq", "in"].include? condition.predicate.arel_predicate
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# detect related class for Ransack::Nodes::Attribute
|
|
91
|
+
def find_class
|
|
92
|
+
if condition_attribute.klass != resource_class && condition_attribute.klass.primary_key == name.to_s
|
|
93
|
+
condition_attribute.klass
|
|
94
|
+
elsif predicate_association
|
|
95
|
+
predicate_association.klass
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def filter
|
|
100
|
+
resource.filters[name.to_sym] || resource.filters[condition.key.to_sym]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def related_primary_key
|
|
104
|
+
if predicate_association
|
|
105
|
+
predicate_association.association_primary_key
|
|
106
|
+
elsif related_class
|
|
107
|
+
related_class.primary_key
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def predicate_association
|
|
112
|
+
@predicate_association = find_predicate_association unless defined?(@predicate_association)
|
|
113
|
+
@predicate_association
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def find_predicate_association
|
|
117
|
+
condition_attribute.klass.reflect_on_all_associations.
|
|
118
|
+
reject { |r| r.options[:polymorphic] }. #skip polymorphic
|
|
119
|
+
detect { |r| r.foreign_key.to_s == name.to_s }
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require "active_admin/filters/active"
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module Filters
|
|
5
|
+
class ActiveSidebar < ActiveAdmin::SidebarSection
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
super "search_status", sidebar_options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def block
|
|
12
|
+
-> do
|
|
13
|
+
active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
|
|
14
|
+
span do
|
|
15
|
+
if current_scope
|
|
16
|
+
h4 I18n.t("active_admin.search_status.current_scope"), style: "display: inline"
|
|
17
|
+
b scope_name(current_scope), class: "current_scope_name", style: "display: inline"
|
|
18
|
+
end
|
|
19
|
+
div style: "margin-top: 10px" do
|
|
20
|
+
h4 I18n.t("active_admin.search_status.current_filters"), style: "margin-bottom: 10px"
|
|
21
|
+
ul do
|
|
22
|
+
if active_filters.filters.blank?
|
|
23
|
+
li I18n.t("active_admin.search_status.no_current_filters")
|
|
24
|
+
else
|
|
25
|
+
active_filters.filters.each do |filter|
|
|
26
|
+
li filter.html_options do
|
|
27
|
+
span do
|
|
28
|
+
text_node filter.label
|
|
29
|
+
end
|
|
30
|
+
b do
|
|
31
|
+
text_node to_sentence(filter.values.map { |v| pretty_format(v) })
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def title
|
|
43
|
+
I18n.t("active_admin.search_status.headline")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
protected
|
|
47
|
+
|
|
48
|
+
def sidebar_options
|
|
49
|
+
{ only: :index, if: -> { active_admin_config.current_filters_enabled? && (params[:q] || params[:scope]) } }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -41,7 +41,6 @@ module ActiveAdmin
|
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
45
44
|
# This module is included into the view
|
|
46
45
|
module ViewHelper
|
|
47
46
|
|
|
@@ -49,29 +48,37 @@ module ActiveAdmin
|
|
|
49
48
|
def active_admin_filters_form_for(search, filters, options = {})
|
|
50
49
|
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
|
51
50
|
url: collection_path,
|
|
52
|
-
html: {class:
|
|
53
|
-
required = { html: {method: :get},
|
|
51
|
+
html: { class: "filter_form" } }
|
|
52
|
+
required = { html: { method: :get },
|
|
54
53
|
as: :q }
|
|
55
|
-
options
|
|
54
|
+
options = defaults.deep_merge(options).deep_merge(required)
|
|
56
55
|
|
|
57
56
|
form_for search, options do |f|
|
|
58
57
|
filters.each do |attribute, opts|
|
|
59
|
-
next if opts.key?(:if)
|
|
60
|
-
next if opts.key?(:unless) &&
|
|
58
|
+
next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
|
|
59
|
+
next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
|
|
60
|
+
|
|
61
|
+
filter_opts = opts.except(:if, :unless)
|
|
62
|
+
filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
|
|
61
63
|
|
|
62
|
-
f.filter attribute,
|
|
64
|
+
f.filter attribute, filter_opts
|
|
63
65
|
end
|
|
64
66
|
|
|
65
67
|
buttons = content_tag :div, class: "buttons" do
|
|
66
|
-
f.submit(I18n.t(
|
|
67
|
-
link_to(I18n.t(
|
|
68
|
-
hidden_field_tags_for(params, except:
|
|
68
|
+
f.submit(I18n.t("active_admin.filters.buttons.filter")) +
|
|
69
|
+
link_to(I18n.t("active_admin.filters.buttons.clear"), "#", class: "clear_filters_btn") +
|
|
70
|
+
hidden_field_tags_for(params, except: except_hidden_fields)
|
|
69
71
|
end
|
|
70
72
|
|
|
71
73
|
f.template.concat buttons
|
|
72
74
|
end
|
|
73
75
|
end
|
|
74
76
|
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def except_hidden_fields
|
|
80
|
+
[:q, :page]
|
|
81
|
+
end
|
|
75
82
|
end
|
|
76
83
|
|
|
77
84
|
end
|
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def polymorphic_foreign_type?(method)
|
|
40
|
-
klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
40
|
+
klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
41
41
|
.map(&:foreign_type).include? method.to_s
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -54,7 +54,7 @@ module ActiveAdmin
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def seems_searchable?
|
|
57
|
-
|
|
57
|
+
column_for(method).nil? && (has_predicate? || scope?)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
# If the given method has a predicate (like _eq or _lteq), it's pretty
|
|
@@ -63,11 +63,6 @@ module ActiveAdmin
|
|
|
63
63
|
!!Ransack::Predicate.detect_from_string(method.to_s)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
# Ransack lets you define custom search methods, called ransackers.
|
|
67
|
-
def ransacker?
|
|
68
|
-
klass._ransackers.key? method.to_s
|
|
69
|
-
end
|
|
70
|
-
|
|
71
66
|
# Ransack supports exposing selected scopes on your model for advanced searches.
|
|
72
67
|
def scope?
|
|
73
68
|
context = Ransack::Context.for klass
|
|
@@ -12,10 +12,11 @@ module ActiveAdmin
|
|
|
12
12
|
def initialize(*)
|
|
13
13
|
super
|
|
14
14
|
add_filters_sidebar_section
|
|
15
|
+
add_search_status_sidebar_section
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# Returns the filters for this resource. If filters are not enabled,
|
|
18
|
-
# it will always return an empty
|
|
19
|
+
# it will always return an empty hash.
|
|
19
20
|
#
|
|
20
21
|
# @return [Hash] Filters that apply for this resource
|
|
21
22
|
def filters
|
|
@@ -29,11 +30,23 @@ module ActiveAdmin
|
|
|
29
30
|
@filters_enabled = bool
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
# Setter to enable/disable showing current filters on this resource.
|
|
34
|
+
#
|
|
35
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
36
|
+
def current_filters=(bool)
|
|
37
|
+
@current_filters_enabled = bool
|
|
38
|
+
end
|
|
39
|
+
|
|
32
40
|
# @return [Boolean] If filters are enabled for this resource
|
|
33
41
|
def filters_enabled?
|
|
34
42
|
@filters_enabled.nil? ? namespace.filters : @filters_enabled
|
|
35
43
|
end
|
|
36
44
|
|
|
45
|
+
# @return [Boolean] If show current filters are enabled for this resource
|
|
46
|
+
def current_filters_enabled?
|
|
47
|
+
@current_filters_enabled.nil? ? namespace.current_filters : @current_filters_enabled
|
|
48
|
+
end
|
|
49
|
+
|
|
37
50
|
def preserve_default_filters!
|
|
38
51
|
@preserve_default_filters = true
|
|
39
52
|
end
|
|
@@ -70,7 +83,7 @@ module ActiveAdmin
|
|
|
70
83
|
@filters_to_remove = nil
|
|
71
84
|
end
|
|
72
85
|
|
|
73
|
-
|
|
86
|
+
private
|
|
74
87
|
|
|
75
88
|
# Collapses the waveform, if you will, of which filters should be displayed.
|
|
76
89
|
# Removes filters and adds in default filters as desired.
|
|
@@ -92,7 +105,11 @@ module ActiveAdmin
|
|
|
92
105
|
|
|
93
106
|
# @return [Array] The array of default filters for this resource
|
|
94
107
|
def default_filters
|
|
95
|
-
|
|
108
|
+
result = []
|
|
109
|
+
result.concat default_association_filters if namespace.include_default_association_filters
|
|
110
|
+
result.concat content_columns
|
|
111
|
+
result.concat custom_ransack_filters
|
|
112
|
+
result
|
|
96
113
|
end
|
|
97
114
|
|
|
98
115
|
def custom_ransack_filters
|
|
@@ -106,25 +123,40 @@ module ActiveAdmin
|
|
|
106
123
|
# Returns a default set of filters for the associations
|
|
107
124
|
def default_association_filters
|
|
108
125
|
if resource_class.respond_to?(:reflect_on_all_associations)
|
|
109
|
-
poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
126
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
110
127
|
|
|
111
128
|
# remove deeply nested associations
|
|
112
|
-
not_poly.reject!{ |r| r.chain.length > 2 }
|
|
129
|
+
not_poly.reject! { |r| r.chain.length > 2 }
|
|
113
130
|
|
|
114
131
|
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
|
132
|
+
|
|
133
|
+
# Check high-arity associations for filterable columns
|
|
134
|
+
max = namespace.maximum_association_filter_arity
|
|
135
|
+
if max != :unlimited
|
|
136
|
+
high_arity, low_arity = not_poly.partition do |r|
|
|
137
|
+
r.klass.reorder(nil).limit(max + 1).count > max
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Remove high-arity associations with no searchable column
|
|
141
|
+
high_arity = high_arity.select(&method(:searchable_column_for))
|
|
142
|
+
|
|
143
|
+
high_arity = high_arity.map { |r| r.name.to_s + "_" + searchable_column_for(r) + namespace.filter_method_for_large_association }
|
|
144
|
+
|
|
145
|
+
filters = poly.map(&:foreign_type) + low_arity.map(&:name) + high_arity
|
|
146
|
+
end
|
|
147
|
+
|
|
115
148
|
filters.map &:to_sym
|
|
116
149
|
else
|
|
117
150
|
[]
|
|
118
151
|
end
|
|
119
152
|
end
|
|
120
153
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
end
|
|
154
|
+
def search_columns
|
|
155
|
+
@search_columns ||= namespace.filter_columns_for_large_association.map(&:to_s)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def searchable_column_for(relation)
|
|
159
|
+
relation.klass.column_names.find { |name| search_columns.include?(name) }
|
|
128
160
|
end
|
|
129
161
|
|
|
130
162
|
def add_filters_sidebar_section
|
|
@@ -132,11 +164,15 @@ module ActiveAdmin
|
|
|
132
164
|
end
|
|
133
165
|
|
|
134
166
|
def filters_sidebar_section
|
|
135
|
-
ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
|
|
136
|
-
active_admin_filters_form_for assigns[:search], active_admin_config.filters
|
|
167
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
|
168
|
+
active_admin_filters_form_for assigns[:search], **active_admin_config.filters
|
|
137
169
|
end
|
|
138
170
|
end
|
|
139
171
|
|
|
172
|
+
def add_search_status_sidebar_section
|
|
173
|
+
self.sidebar_sections << ActiveAdmin::Filters::ActiveSidebar.new
|
|
174
|
+
end
|
|
175
|
+
|
|
140
176
|
end
|
|
141
177
|
|
|
142
178
|
end
|
data/lib/active_admin/filters.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
require "active_admin/filters/dsl"
|
|
2
|
+
require "active_admin/filters/resource_extension"
|
|
3
|
+
require "active_admin/filters/formtastic_addons"
|
|
4
|
+
require "active_admin/filters/forms"
|
|
5
|
+
require "active_admin/helpers/optional_display"
|
|
6
|
+
require "active_admin/filters/active_sidebar"
|
|
5
7
|
|
|
6
8
|
# Add our Extensions
|
|
7
9
|
ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
|
|
8
|
-
ActiveAdmin::Resource.send
|
|
10
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
|
|
9
11
|
ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
|