ultra-quick-hub 0.0.1
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.
Potentially problematic release.
This version of ultra-quick-hub might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/activeadmin-3.5.1/CHANGELOG.md +1153 -0
- data/activeadmin-3.5.1/CODE_OF_CONDUCT.md +74 -0
- data/activeadmin-3.5.1/CONTRIBUTING.md +187 -0
- data/activeadmin-3.5.1/LICENSE +20 -0
- data/activeadmin-3.5.1/README.md +117 -0
- data/activeadmin-3.5.1/app/assets/javascripts/active_admin/base.js +520 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_base.scss +57 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_forms.scss +315 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_header.scss +188 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_normalize.scss +349 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_print.scss +287 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_date_picker.scss +148 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +154 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_pagination.scss +58 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_table_tools.scss +70 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tables.scss +112 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tabs.scss +68 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_variables.scss +51 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_footer.scss +19 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/base.js +28 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/datepicker.js +19 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/filters.js +10 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/has-many.js +98 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/core_ext.rb +148 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/filters.js +39 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/per-page.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/utils.js +40 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/registrations/new.html.erb +21 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/page/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/edit.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/new.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/show.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin_logged_out.html.erb +50 -0
- data/activeadmin-3.5.1/config/locales/ar.yml +128 -0
- data/activeadmin-3.5.1/config/locales/az.yml +131 -0
- data/activeadmin-3.5.1/config/locales/bg.yml +112 -0
- data/activeadmin-3.5.1/config/locales/bs.yml +114 -0
- data/activeadmin-3.5.1/config/locales/ca.yml +98 -0
- data/activeadmin-3.5.1/config/locales/cs.yml +102 -0
- data/activeadmin-3.5.1/config/locales/da.yml +130 -0
- data/activeadmin-3.5.1/config/locales/de-CH.yml +94 -0
- data/activeadmin-3.5.1/config/locales/de.yml +154 -0
- data/activeadmin-3.5.1/config/locales/el.yml +119 -0
- data/activeadmin-3.5.1/config/locales/en-CA.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en-GB.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en.yml +154 -0
- data/activeadmin-3.5.1/config/locales/eo.yml +137 -0
- data/activeadmin-3.5.1/config/locales/es-MX.yml +90 -0
- data/activeadmin-3.5.1/config/locales/es.yml +154 -0
- data/activeadmin-3.5.1/config/locales/fa.yml +112 -0
- data/activeadmin-3.5.1/config/locales/fi.yml +105 -0
- data/activeadmin-3.5.1/config/locales/fr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/he.yml +132 -0
- data/activeadmin-3.5.1/config/locales/hr.yml +116 -0
- data/activeadmin-3.5.1/config/locales/hu.yml +94 -0
- data/activeadmin-3.5.1/config/locales/id.yml +128 -0
- data/activeadmin-3.5.1/config/locales/it.yml +154 -0
- data/activeadmin-3.5.1/config/locales/ja.yml +133 -0
- data/activeadmin-3.5.1/config/locales/ko.yml +113 -0
- data/activeadmin-3.5.1/config/locales/lt.yml +134 -0
- data/activeadmin-3.5.1/config/locales/lv.yml +85 -0
- data/activeadmin-3.5.1/config/locales/mk.yml +126 -0
- data/activeadmin-3.5.1/config/locales/nb.yml +122 -0
- data/activeadmin-3.5.1/config/locales/nl.yml +136 -0
- data/activeadmin-3.5.1/config/locales/pl.yml +160 -0
- data/activeadmin-3.5.1/config/locales/pt-BR.yml +135 -0
- data/activeadmin-3.5.1/config/locales/pt-PT.yml +85 -0
- data/activeadmin-3.5.1/config/locales/ro.yml +90 -0
- data/activeadmin-3.5.1/config/locales/ru.yml +135 -0
- data/activeadmin-3.5.1/config/locales/sk.yml +160 -0
- data/activeadmin-3.5.1/config/locales/sv-SE.yml +154 -0
- data/activeadmin-3.5.1/config/locales/tr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/uk.yml +132 -0
- data/activeadmin-3.5.1/config/locales/vi.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-CN.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-TW.yml +128 -0
- data/activeadmin-3.5.1/lib/active_admin/abstract_view_factory.rb +48 -0
- data/activeadmin-3.5.1/lib/active_admin/application.rb +234 -0
- data/activeadmin-3.5.1/lib/active_admin/application_settings.rb +43 -0
- data/activeadmin-3.5.1/lib/active_admin/asset_registration.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/authorization_adapter.rb +132 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/authorization.rb +129 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/menu.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller.rb +82 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/controller.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/resource_extension.rb +157 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_form.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_selector.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/selection_cells.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/callbacks.rb +89 -0
- data/activeadmin-3.5.1/lib/active_admin/cancan_adapter.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/collection_decorator.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/component.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/controller_action.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/csv_builder.rb +144 -0
- data/activeadmin-3.5.1/lib/active_admin/dependency.rb +97 -0
- data/activeadmin-3.5.1/lib/active_admin/devise.rb +91 -0
- data/activeadmin-3.5.1/lib/active_admin/dsl.rb +161 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_setting.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_settings_node.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/engine.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/error.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_filter.rb +124 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_sidebar.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/dsl.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/forms.rb +86 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/formtastic_addons.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/resource_extension.rb +180 -0
- data/activeadmin-3.5.1/lib/active_admin/filters.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/form_builder.rb +186 -0
- data/activeadmin-3.5.1/lib/active_admin/generators/boilerplate.rb +54 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/collection.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/i18n.rb +8 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/optional_display.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/routes/url_helpers.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/scope_chain.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/datepicker_input.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base/search_method_select.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/boolean_input.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/check_boxes_input.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_picker_input.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_range_input.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/numeric_input.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/select_input.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/string_input.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/text_input.rb +26 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers/resource_localizer.rb +36 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/menu.rb +107 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_collection.rb +92 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_item.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace.rb +267 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace_settings.rb +127 -0
- data/activeadmin-3.5.1/lib/active_admin/order_clause.rb +49 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/comment.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/namespace_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/resource_helper.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/show_page_helper.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views.rb +3 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments.rb +102 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/mongoid.rb +2 -0
- data/activeadmin-3.5.1/lib/active_admin/page.rb +112 -0
- data/activeadmin-3.5.1/lib/active_admin/page_controller.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/page_dsl.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/page_presenter.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/pundit_adapter.rb +123 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/action_items.rb +121 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/attributes.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/belongs_to.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/controllers.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/includes.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/menu.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/model.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/naming.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/ordering.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/page_presenters.rb +83 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/pagination.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/routes.rb +146 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scope_to.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scopes.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/sidebars.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/resource.rb +227 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_collection.rb +73 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/action_builder.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/data_access.rb +348 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/decorators.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/resource_class_methods.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/scoping.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/sidebars.rb +19 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/streaming.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_dsl.rb +210 -0
- data/activeadmin-3.5.1/lib/active_admin/router.rb +115 -0
- data/activeadmin-3.5.1/lib/active_admin/scope.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/settings_node.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/sidebar_section.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/version.rb +4 -0
- data/activeadmin-3.5.1/lib/active_admin/view_factory.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/active_admin_application_helper.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/auto_link_helper.rb +46 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/breadcrumb_helper.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/display_helper.rb +119 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/download_format_links_helper.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/flash_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/form_helper.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/method_or_proc_helper.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/scope_name_helper.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/sidebar_helper.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/title_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/view_factory_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/views/action_items.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_admin_form.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/attributes_table.rb +95 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/blank_slate.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/columns.rb +162 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/dropdown_menu.rb +69 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/index_list.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu_item.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/paginated_collection.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/panel.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/scopes.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar_section.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/site_title.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/status_tag.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/table_for.rb +211 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/tabs.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/unsupported_browser.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/footer.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/views/header.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_block.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_blog.rb +156 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_grid.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_table.rb +401 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/base.rb +134 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/form.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/index.rb +166 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/layout.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/page.rb +31 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/show.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/views/tabbed_navigation.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/title_bar.rb +56 -0
- data/activeadmin-3.5.1/lib/active_admin/views.rb +9 -0
- data/activeadmin-3.5.1/lib/active_admin.rb +135 -0
- data/activeadmin-3.5.1/lib/activeadmin.rb +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/assets_generator.rb +15 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/devise/devise_generator.rb +69 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/install_generator.rb +56 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/active_admin.rb.erb +352 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/USAGE +8 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/page_generator.rb +13 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/templates/page.rb +6 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/resource_generator.rb +21 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/data.js +39 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/disable-selection.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/focusable.js +79 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +81 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/keycode.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/labels.js +70 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/plugin.js +49 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/position.js +513 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/scroll-parent.js +50 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/tabbable.js +41 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/unique-id.js +54 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/version.js +20 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widget.js +761 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/button.js +454 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +294 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +304 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2240 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +957 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1264 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +226 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1281 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1614 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +918 -0
- data/ultra-quick-hub.gemspec +12 -0
- metadata +384 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
module DSL
|
|
5
|
+
|
|
6
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#add_filter
|
|
7
|
+
def filter(attribute, options = {})
|
|
8
|
+
config.add_filter(attribute, options)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
|
|
12
|
+
def remove_filter(*attributes)
|
|
13
|
+
config.remove_filter(*attributes)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
|
|
17
|
+
def preserve_default_filters!
|
|
18
|
+
config.preserve_default_filters!
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
# This form builder defines methods to build filter forms such
|
|
5
|
+
# as the one found in the sidebar of the index page of a standard resource.
|
|
6
|
+
class FormBuilder < ::ActiveAdmin::FormBuilder
|
|
7
|
+
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
8
|
+
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs::Filters, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
|
|
9
|
+
|
|
10
|
+
# TODO: remove input class finders after formtastic 4 (where it will be default)
|
|
11
|
+
self.input_class_finder = ::Formtastic::InputClassFinder
|
|
12
|
+
|
|
13
|
+
def filter(method, options = {})
|
|
14
|
+
if method.present? && options[:as] ||= default_input_type(method)
|
|
15
|
+
template.concat input(method, options)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
# Returns the default filter type for a given attribute. If you want
|
|
22
|
+
# to use a custom search method, you have to specify the type yourself.
|
|
23
|
+
def default_input_type(method, options = {})
|
|
24
|
+
if method =~ /_(eq|cont|start|end)\z/
|
|
25
|
+
:string
|
|
26
|
+
elsif klass._ransackers.key?(method.to_s)
|
|
27
|
+
klass._ransackers[method.to_s].type
|
|
28
|
+
elsif reflection_for(method) || polymorphic_foreign_type?(method)
|
|
29
|
+
:select
|
|
30
|
+
elsif column = column_for(method)
|
|
31
|
+
case column.type
|
|
32
|
+
when :date, :datetime
|
|
33
|
+
:date_range
|
|
34
|
+
when :string, :text, :citext
|
|
35
|
+
:string
|
|
36
|
+
when :integer, :float, :decimal
|
|
37
|
+
:numeric
|
|
38
|
+
when :boolean
|
|
39
|
+
:boolean
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# This module is included into the view
|
|
46
|
+
module ViewHelper
|
|
47
|
+
|
|
48
|
+
# Helper method to render a filter form
|
|
49
|
+
def active_admin_filters_form_for(search, filters, options = {})
|
|
50
|
+
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
|
51
|
+
url: collection_path,
|
|
52
|
+
html: { class: "filter_form" } }
|
|
53
|
+
required = { html: { method: :get },
|
|
54
|
+
as: :q }
|
|
55
|
+
options = defaults.deep_merge(options).deep_merge(required)
|
|
56
|
+
|
|
57
|
+
form_for search, options do |f|
|
|
58
|
+
filters.each do |attribute, opts|
|
|
59
|
+
next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
|
|
60
|
+
next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
|
|
61
|
+
|
|
62
|
+
filter_opts = opts.except(:if, :unless)
|
|
63
|
+
filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
|
|
64
|
+
|
|
65
|
+
f.filter attribute, filter_opts
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
buttons = content_tag :div, class: "buttons" do
|
|
69
|
+
f.submit(I18n.t("active_admin.filters.buttons.filter")) +
|
|
70
|
+
link_to(I18n.t("active_admin.filters.buttons.clear"), "#", class: "clear_filters_btn") +
|
|
71
|
+
hidden_field_tags_for(params, except: except_hidden_fields)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
f.template.concat buttons
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def except_hidden_fields
|
|
81
|
+
[:q, :page]
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
module FormtasticAddons
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# The below are Formtastic method overrides that jump inside of the Ransack
|
|
8
|
+
# search object to get at the object being searched upon.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
def humanized_method_name
|
|
12
|
+
if klass.respond_to?(:human_attribute_name)
|
|
13
|
+
klass.human_attribute_name(method)
|
|
14
|
+
else
|
|
15
|
+
method.to_s.public_send(builder.label_str_method)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def reflection_for(method)
|
|
20
|
+
klass.reflect_on_association(method) if klass.respond_to? :reflect_on_association
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def column_for(method)
|
|
24
|
+
klass.columns_hash[method.to_s] if klass.respond_to? :columns_hash
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def column
|
|
28
|
+
column_for method
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# The below are custom methods that Formtastic does not provide.
|
|
33
|
+
#
|
|
34
|
+
|
|
35
|
+
# The resource class, unwrapped from Ransack
|
|
36
|
+
def klass
|
|
37
|
+
@object.object.klass
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def polymorphic_foreign_type?(method)
|
|
41
|
+
klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
42
|
+
.map(&:foreign_type).include? method.to_s
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# These help figure out whether the given method or association will be recognized by Ransack.
|
|
47
|
+
#
|
|
48
|
+
|
|
49
|
+
def searchable_has_many_through?
|
|
50
|
+
if klass.ransackable_associations.include?(method.to_s) && reflection && reflection.options[:through]
|
|
51
|
+
reflection.through_reflection.klass.ransackable_attributes.include? reflection.foreign_key
|
|
52
|
+
else
|
|
53
|
+
false
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def seems_searchable?
|
|
58
|
+
column_for(method).nil? && (has_predicate? || scope?)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# If the given method has a predicate (like _eq or _lteq), it's pretty
|
|
62
|
+
# likely we're dealing with a valid search method.
|
|
63
|
+
def has_predicate?
|
|
64
|
+
!!Ransack::Predicate.detect_from_string(method.to_s)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Ransack supports exposing selected scopes on your model for advanced searches.
|
|
68
|
+
def scope?
|
|
69
|
+
context = Ransack::Context.for klass
|
|
70
|
+
context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
|
|
5
|
+
class Disabled < RuntimeError
|
|
6
|
+
def initialize(action)
|
|
7
|
+
super "Cannot #{action} a filter when filters are disabled. Enable filters with 'config.filters = true'"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module ResourceExtension
|
|
12
|
+
|
|
13
|
+
def initialize(*)
|
|
14
|
+
super
|
|
15
|
+
add_filters_sidebar_section
|
|
16
|
+
add_search_status_sidebar_section
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns the filters for this resource. If filters are not enabled,
|
|
20
|
+
# it will always return an empty hash.
|
|
21
|
+
#
|
|
22
|
+
# @return [Hash] Filters that apply for this resource
|
|
23
|
+
def filters
|
|
24
|
+
filters_enabled? ? filter_lookup : {}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Setter to enable / disable filters on this resource.
|
|
28
|
+
#
|
|
29
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
30
|
+
def filters=(bool)
|
|
31
|
+
@filters_enabled = bool
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Setter to enable/disable showing current filters on this resource.
|
|
35
|
+
#
|
|
36
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
37
|
+
def current_filters=(bool)
|
|
38
|
+
@current_filters_enabled = bool
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @return [Boolean] If filters are enabled for this resource
|
|
42
|
+
def filters_enabled?
|
|
43
|
+
@filters_enabled.nil? ? namespace.filters : @filters_enabled
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [Boolean] If show current filters are enabled for this resource
|
|
47
|
+
def current_filters_enabled?
|
|
48
|
+
@current_filters_enabled.nil? ? namespace.current_filters : @current_filters_enabled
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def preserve_default_filters!
|
|
52
|
+
@preserve_default_filters = true
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def preserve_default_filters?
|
|
56
|
+
@preserve_default_filters == true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Remove a filter for this resource. If filters are not enabled, this method
|
|
60
|
+
# will raise a RuntimeError
|
|
61
|
+
#
|
|
62
|
+
# @param [Symbol] attributes The attributes to not filter on
|
|
63
|
+
def remove_filter(*attributes)
|
|
64
|
+
raise Disabled, "remove" unless filters_enabled?
|
|
65
|
+
|
|
66
|
+
attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Add a filter for this resource. If filters are not enabled, this method
|
|
70
|
+
# will raise a RuntimeError
|
|
71
|
+
#
|
|
72
|
+
# @param [Symbol] attribute The attribute to filter on
|
|
73
|
+
# @param [Hash] options The set of options that are passed through to
|
|
74
|
+
# ransack for the field definition.
|
|
75
|
+
def add_filter(attribute, options = {})
|
|
76
|
+
raise Disabled, "add" unless filters_enabled?
|
|
77
|
+
|
|
78
|
+
(@filters ||= {})[attribute.to_sym] = options
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Reset the filters to use defaults
|
|
82
|
+
def reset_filters!
|
|
83
|
+
@filters = nil
|
|
84
|
+
@filters_to_remove = nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
# Collapses the waveform, if you will, of which filters should be displayed.
|
|
90
|
+
# Removes filters and adds in default filters as desired.
|
|
91
|
+
def filter_lookup
|
|
92
|
+
filters = @filters.try(:dup) || {}
|
|
93
|
+
|
|
94
|
+
if filters.empty? || preserve_default_filters?
|
|
95
|
+
default_filters.each do |f|
|
|
96
|
+
filters[f] ||= {}
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
if @filters_to_remove
|
|
101
|
+
@filters_to_remove.each &filters.method(:delete)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
filters
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# @return [Array] The array of default filters for this resource
|
|
108
|
+
def default_filters
|
|
109
|
+
result = []
|
|
110
|
+
result.concat default_association_filters if namespace.include_default_association_filters
|
|
111
|
+
result.concat content_columns
|
|
112
|
+
result.concat custom_ransack_filters
|
|
113
|
+
result
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def custom_ransack_filters
|
|
117
|
+
if resource_class.respond_to?(:_ransackers)
|
|
118
|
+
resource_class._ransackers.keys.map(&:to_sym)
|
|
119
|
+
else
|
|
120
|
+
[]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Returns a default set of filters for the associations
|
|
125
|
+
def default_association_filters
|
|
126
|
+
if resource_class.respond_to?(:reflect_on_all_associations)
|
|
127
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
128
|
+
|
|
129
|
+
# remove deeply nested associations
|
|
130
|
+
not_poly.reject! { |r| r.chain.length > 2 }
|
|
131
|
+
|
|
132
|
+
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
|
133
|
+
|
|
134
|
+
# Check high-arity associations for filterable columns
|
|
135
|
+
max = namespace.maximum_association_filter_arity
|
|
136
|
+
if max != :unlimited
|
|
137
|
+
high_arity, low_arity = not_poly.partition do |r|
|
|
138
|
+
r.klass.reorder(nil).limit(max + 1).count > max
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Remove high-arity associations with no searchable column
|
|
142
|
+
high_arity = high_arity.select(&method(:searchable_column_for))
|
|
143
|
+
|
|
144
|
+
high_arity = high_arity.map { |r| r.name.to_s + "_" + searchable_column_for(r) + namespace.filter_method_for_large_association }
|
|
145
|
+
|
|
146
|
+
filters = poly.map(&:foreign_type) + low_arity.map(&:name) + high_arity
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
filters.map &:to_sym
|
|
150
|
+
else
|
|
151
|
+
[]
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def search_columns
|
|
156
|
+
@search_columns ||= namespace.filter_columns_for_large_association.map(&:to_s)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def searchable_column_for(relation)
|
|
160
|
+
relation.klass.column_names.find { |name| search_columns.include?(name) }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def add_filters_sidebar_section
|
|
164
|
+
self.sidebar_sections << filters_sidebar_section
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def filters_sidebar_section
|
|
168
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
|
169
|
+
active_admin_filters_form_for assigns[:search], **active_admin_config.filters
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def add_search_status_sidebar_section
|
|
174
|
+
self.sidebar_sections << ActiveAdmin::Filters::ActiveSidebar.new
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/filters/dsl"
|
|
3
|
+
require "active_admin/filters/resource_extension"
|
|
4
|
+
require "active_admin/filters/formtastic_addons"
|
|
5
|
+
require "active_admin/filters/forms"
|
|
6
|
+
require "active_admin/helpers/optional_display"
|
|
7
|
+
require "active_admin/filters/active_sidebar"
|
|
8
|
+
|
|
9
|
+
# Add our Extensions
|
|
10
|
+
ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
|
|
11
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
|
|
12
|
+
ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Provides an intuitive way to build has_many associated records in the same form.
|
|
3
|
+
module Formtastic
|
|
4
|
+
module Inputs
|
|
5
|
+
module Base
|
|
6
|
+
def input_wrapping(&block)
|
|
7
|
+
html = super
|
|
8
|
+
template.concat(html) if template.output_buffer && template.assigns[:has_many_block]
|
|
9
|
+
html
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module ActiveAdmin
|
|
16
|
+
class FormBuilder < ::Formtastic::FormBuilder
|
|
17
|
+
|
|
18
|
+
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
|
|
19
|
+
|
|
20
|
+
# TODO: remove both class finders after formtastic 4 (where it will be default)
|
|
21
|
+
self.input_class_finder = ::Formtastic::InputClassFinder
|
|
22
|
+
self.action_class_finder = ::Formtastic::ActionClassFinder
|
|
23
|
+
|
|
24
|
+
def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
|
|
25
|
+
li_attrs[:class] ||= "cancel"
|
|
26
|
+
li_content = template.link_to I18n.t("active_admin.cancel"), url, html_options
|
|
27
|
+
template.content_tag(:li, li_content, li_attrs)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
attr_accessor :already_in_an_inputs_block
|
|
31
|
+
|
|
32
|
+
def has_many(assoc, options = {}, &block)
|
|
33
|
+
HasManyBuilder.new(self, assoc, options).render(&block)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Decorates a FormBuilder with the additional attributes and methods
|
|
38
|
+
# to build a has_many block. Nested has_many blocks are handled by
|
|
39
|
+
# nested decorators.
|
|
40
|
+
class HasManyBuilder < SimpleDelegator
|
|
41
|
+
attr_reader :assoc
|
|
42
|
+
attr_reader :options
|
|
43
|
+
attr_reader :heading, :sortable_column, :sortable_start
|
|
44
|
+
attr_reader :new_record, :destroy_option, :remove_record
|
|
45
|
+
|
|
46
|
+
def initialize(has_many_form, assoc, options)
|
|
47
|
+
super has_many_form
|
|
48
|
+
@assoc = assoc
|
|
49
|
+
@options = extract_custom_settings!(options.dup)
|
|
50
|
+
@options.reverse_merge!(for: assoc)
|
|
51
|
+
@options[:class] = [options[:class], "inputs has_many_fields"].compact.join(" ")
|
|
52
|
+
|
|
53
|
+
if sortable_column
|
|
54
|
+
@options[:for] = [assoc, sorted_children(sortable_column)]
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def render(&block)
|
|
59
|
+
html = "".html_safe
|
|
60
|
+
html << template.content_tag(:h3) { heading } if heading.present?
|
|
61
|
+
html << template.capture { content_has_many(&block) }
|
|
62
|
+
html = wrap_div_or_li(html)
|
|
63
|
+
template.concat(html) if template.output_buffer
|
|
64
|
+
html
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
protected
|
|
68
|
+
|
|
69
|
+
# remove options that should not render as attributes
|
|
70
|
+
def extract_custom_settings!(options)
|
|
71
|
+
@heading = options.key?(:heading) ? options.delete(:heading) : default_heading
|
|
72
|
+
@sortable_column = options.delete(:sortable)
|
|
73
|
+
@sortable_start = options.delete(:sortable_start) || 0
|
|
74
|
+
@new_record = options.key?(:new_record) ? options.delete(:new_record) : true
|
|
75
|
+
@destroy_option = options.delete(:allow_destroy)
|
|
76
|
+
@remove_record = options.delete(:remove_record)
|
|
77
|
+
options
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def default_heading
|
|
81
|
+
assoc_klass.model_name.
|
|
82
|
+
human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def assoc_klass
|
|
86
|
+
@assoc_klass ||= __getobj__.object.class.reflect_on_association(assoc).klass
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def content_has_many(&block)
|
|
90
|
+
form_block = proc do |form_builder|
|
|
91
|
+
render_has_many_form(form_builder, options[:parent], &block)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
template.assigns[:has_many_block] = true
|
|
95
|
+
contents = without_wrapper { inputs(options, &form_block) }
|
|
96
|
+
contents ||= "".html_safe
|
|
97
|
+
|
|
98
|
+
js = new_record ? js_for_has_many(&form_block) : ""
|
|
99
|
+
contents << js
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Renders the Formtastic inputs then appends ActiveAdmin delete and sort actions.
|
|
103
|
+
def render_has_many_form(form_builder, parent, &block)
|
|
104
|
+
index = parent && form_builder.send(:parent_child_index, parent)
|
|
105
|
+
template.concat template.capture { yield(form_builder, index) }
|
|
106
|
+
template.concat has_many_actions(form_builder, "".html_safe)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def has_many_actions(form_builder, contents)
|
|
110
|
+
if form_builder.object.new_record?
|
|
111
|
+
contents << template.content_tag(:li) do
|
|
112
|
+
remove_text = remove_record.is_a?(String) ? remove_record : I18n.t("active_admin.has_many_remove")
|
|
113
|
+
template.link_to remove_text, "#", class: "button has_many_remove"
|
|
114
|
+
end
|
|
115
|
+
elsif allow_destroy?(form_builder.object)
|
|
116
|
+
form_builder.input(
|
|
117
|
+
:_destroy, as: :boolean,
|
|
118
|
+
wrapper_html: { class: "has_many_delete" },
|
|
119
|
+
label: I18n.t("active_admin.has_many_delete"))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if sortable_column
|
|
123
|
+
form_builder.input sortable_column, as: :hidden
|
|
124
|
+
|
|
125
|
+
contents << template.content_tag(:li, class: "handle") do
|
|
126
|
+
I18n.t("active_admin.move")
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
contents
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def allow_destroy?(form_object)
|
|
134
|
+
!! case destroy_option
|
|
135
|
+
when Symbol, String
|
|
136
|
+
form_object.public_send destroy_option
|
|
137
|
+
when Proc
|
|
138
|
+
destroy_option.call form_object
|
|
139
|
+
else
|
|
140
|
+
destroy_option
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def sorted_children(column)
|
|
145
|
+
__getobj__.object.public_send(assoc).sort_by do |o|
|
|
146
|
+
attribute = o.public_send column
|
|
147
|
+
[attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def without_wrapper
|
|
152
|
+
is_being_wrapped = already_in_an_inputs_block
|
|
153
|
+
self.already_in_an_inputs_block = false
|
|
154
|
+
|
|
155
|
+
html = yield
|
|
156
|
+
|
|
157
|
+
self.already_in_an_inputs_block = is_being_wrapped
|
|
158
|
+
html
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Capture the ADD JS
|
|
162
|
+
def js_for_has_many(&form_block)
|
|
163
|
+
assoc_name = assoc_klass.model_name
|
|
164
|
+
placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.tr('/', '_')}_RECORD"
|
|
165
|
+
opts = options.merge(
|
|
166
|
+
for: [assoc, assoc_klass.new],
|
|
167
|
+
for_options: { child_index: placeholder }
|
|
168
|
+
)
|
|
169
|
+
html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
|
170
|
+
text = new_record.is_a?(String) ? new_record : I18n.t("active_admin.has_many_new", model: assoc_name.human)
|
|
171
|
+
|
|
172
|
+
template.link_to text, "#", class: "button has_many_add", data: {
|
|
173
|
+
html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
|
|
174
|
+
}
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def wrap_div_or_li(html)
|
|
178
|
+
template.content_tag(
|
|
179
|
+
already_in_an_inputs_block ? :li : :div,
|
|
180
|
+
html,
|
|
181
|
+
class: "has_many_container #{assoc}",
|
|
182
|
+
"data-sortable" => sortable_column,
|
|
183
|
+
"data-sortable-start" => sortable_start)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Generators
|
|
4
|
+
class Boilerplate
|
|
5
|
+
def initialize(class_name)
|
|
6
|
+
@class_name = class_name
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def attributes
|
|
10
|
+
@class_name.constantize.new.attributes.keys
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def assignable_attributes
|
|
14
|
+
attributes - %w(id created_at updated_at)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def permit_params
|
|
18
|
+
assignable_attributes.map { |a| a.to_sym.inspect }.join(", ")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def rows
|
|
22
|
+
attributes.map { |a| row(a) }.join("\n ")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def row(name)
|
|
26
|
+
"# row :#{name.gsub(/_id$/, '')}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def columns
|
|
30
|
+
attributes.map { |a| column(a) }.join("\n ")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def column(name)
|
|
34
|
+
"# column :#{name.gsub(/_id$/, '')}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def filters
|
|
38
|
+
attributes.map { |a| filter(a) }.join("\n ")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def filter(name)
|
|
42
|
+
"# filter :#{name.gsub(/_id$/, '')}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def form_inputs
|
|
46
|
+
assignable_attributes.map { |a| form_input(a) }.join("\n ")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def form_input(name)
|
|
50
|
+
"# f.input :#{name.gsub(/_id$/, '')}"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Helpers
|
|
4
|
+
module Collection
|
|
5
|
+
# 1. removes `select` and `order` to prevent invalid SQL
|
|
6
|
+
# 2. correctly handles the Hash returned when `group by` is used
|
|
7
|
+
def collection_size(c = collection)
|
|
8
|
+
return c.count if c.is_a?(Array)
|
|
9
|
+
return c.length if c.limit_value
|
|
10
|
+
|
|
11
|
+
c = c.except :select, :order
|
|
12
|
+
|
|
13
|
+
c.group_values.present? ? c.count.count : c.count
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def collection_is_empty?(c = collection)
|
|
17
|
+
collection_size(c) == 0
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# Shareable module to give a #display_on?(action) method
|
|
5
|
+
# which returns true or false depending on an options hash.
|
|
6
|
+
#
|
|
7
|
+
# The options hash accepts:
|
|
8
|
+
#
|
|
9
|
+
# only: :index
|
|
10
|
+
# only: [:index, :show]
|
|
11
|
+
# except: :index
|
|
12
|
+
# except: [:index, :show]
|
|
13
|
+
#
|
|
14
|
+
# call #normalize_display_options! after @options has been set
|
|
15
|
+
# to ensure that the display options are setup correctly
|
|
16
|
+
|
|
17
|
+
module OptionalDisplay
|
|
18
|
+
def display_on?(action, render_context = self)
|
|
19
|
+
return false if @options[:only] && !@options[:only].include?(action.to_sym)
|
|
20
|
+
return false if @options[:except] && @options[:except].include?(action.to_sym)
|
|
21
|
+
|
|
22
|
+
case condition = @options[:if]
|
|
23
|
+
when Symbol, String
|
|
24
|
+
render_context.public_send condition
|
|
25
|
+
when Proc
|
|
26
|
+
render_context.instance_exec &condition
|
|
27
|
+
else
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def normalize_display_options!
|
|
35
|
+
@options[:only] = Array(@options[:only]) if @options[:only]
|
|
36
|
+
@options[:except] = Array(@options[:except]) if @options[:except]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|