super-sharp-tool 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.
- 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/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/super-sharp-tool.gemspec +12 -0
- metadata +383 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# The Active Admin DSL. This class is where all the registration blocks
|
|
5
|
+
# are evaluated. This is the central place for the API given to
|
|
6
|
+
# users of Active Admin.
|
|
7
|
+
#
|
|
8
|
+
class DSL
|
|
9
|
+
|
|
10
|
+
def initialize(config)
|
|
11
|
+
@config = config
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Runs the registration block inside this object
|
|
15
|
+
def run_registration_block(&block)
|
|
16
|
+
instance_exec &block if block_given?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# The instance of ActiveAdmin::Resource that's being registered
|
|
20
|
+
# currently. You can use this within your registration blocks to
|
|
21
|
+
# modify options:
|
|
22
|
+
#
|
|
23
|
+
# eg:
|
|
24
|
+
#
|
|
25
|
+
# ActiveAdmin.register Post do
|
|
26
|
+
# config.sort_order = "id_desc"
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
def config
|
|
30
|
+
@config
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Include a module with this resource. The modules's `included` method
|
|
34
|
+
# is called with the instance of the `ActiveAdmin::DSL` passed into it.
|
|
35
|
+
#
|
|
36
|
+
# eg:
|
|
37
|
+
#
|
|
38
|
+
# module HelpSidebar
|
|
39
|
+
#
|
|
40
|
+
# def self.included(dsl)
|
|
41
|
+
# dsl.sidebar "Help" do
|
|
42
|
+
# "Call us for Help"
|
|
43
|
+
# end
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# ActiveAdmin.register Post do
|
|
49
|
+
# include HelpSidebar
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# @param [Module] mod A module to include
|
|
53
|
+
#
|
|
54
|
+
# @return [Nil]
|
|
55
|
+
def include(mod)
|
|
56
|
+
mod.included(self)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns the controller for this resource. If you pass a
|
|
60
|
+
# block, it will be evaluated in the controller.
|
|
61
|
+
#
|
|
62
|
+
# Example:
|
|
63
|
+
#
|
|
64
|
+
# ActiveAdmin.register Post do
|
|
65
|
+
#
|
|
66
|
+
# controller do
|
|
67
|
+
# def some_method_on_controller
|
|
68
|
+
# # Method gets added to Admin::PostsController
|
|
69
|
+
# end
|
|
70
|
+
# end
|
|
71
|
+
#
|
|
72
|
+
# end
|
|
73
|
+
#
|
|
74
|
+
def controller(&block)
|
|
75
|
+
@config.controller.class_exec(&block) if block_given?
|
|
76
|
+
@config.controller
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Add a new action item to the resource
|
|
80
|
+
#
|
|
81
|
+
# @param [Symbol] name
|
|
82
|
+
# @param [Hash] options valid keys include:
|
|
83
|
+
# :only: A single or array of controller actions to display
|
|
84
|
+
# this action item on.
|
|
85
|
+
# :except: A single or array of controller actions not to
|
|
86
|
+
# display this action item on.
|
|
87
|
+
def action_item(name, options = {}, &block)
|
|
88
|
+
config.add_action_item(name, options, &block)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Add a new batch action item to the resource
|
|
92
|
+
# Provide a symbol/string to register the action, options, & block to execute on request
|
|
93
|
+
#
|
|
94
|
+
# To unregister an existing action, just provide the symbol & pass false as the second param
|
|
95
|
+
#
|
|
96
|
+
# @param [Symbol or String] title
|
|
97
|
+
# @param [Hash] options valid keys include:
|
|
98
|
+
# => :if is a proc that will be called to determine if the BatchAction should be displayed
|
|
99
|
+
# => :sort_order is used to sort the batch actions ascending
|
|
100
|
+
# => :confirm is a string which the user will have to accept in order to process the action
|
|
101
|
+
#
|
|
102
|
+
def batch_action(title, options = {}, &block)
|
|
103
|
+
# Create symbol & title information
|
|
104
|
+
if title.is_a? String
|
|
105
|
+
sym = title.titleize.tr(" ", "").underscore.to_sym
|
|
106
|
+
else
|
|
107
|
+
sym = title
|
|
108
|
+
title = sym.to_s.titleize
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Either add/remove the batch action
|
|
112
|
+
unless options == false
|
|
113
|
+
config.add_batch_action(sym, title, options, &block)
|
|
114
|
+
else
|
|
115
|
+
config.remove_batch_action sym
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Set the options that are available for the item that will be placed in the global
|
|
120
|
+
# navigation of the menu.
|
|
121
|
+
def menu(options = {})
|
|
122
|
+
config.menu_item_options = options
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Set the name of the navigation menu to display. This is mainly used in conjunction with the
|
|
126
|
+
# `#belongs_to` functionality.
|
|
127
|
+
#
|
|
128
|
+
# @param [Symbol] menu_name The name of the menu to display as the global navigation
|
|
129
|
+
# when viewing this resource. Defaults to a menu named `:default`.
|
|
130
|
+
#
|
|
131
|
+
# Pass a block returning the name of a menu you want rendered for the request, being
|
|
132
|
+
# executed in the context of the controller
|
|
133
|
+
#
|
|
134
|
+
def navigation_menu(menu_name = nil, &block)
|
|
135
|
+
config.navigation_menu_name = menu_name || block
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Rewrite breadcrumb links.
|
|
139
|
+
# Block will be executed inside controller.
|
|
140
|
+
# Block must return an array if you want to rewrite breadcrumb links.
|
|
141
|
+
#
|
|
142
|
+
# Example:
|
|
143
|
+
# ActiveAdmin.register Post do
|
|
144
|
+
#
|
|
145
|
+
# breadcrumb do
|
|
146
|
+
# [
|
|
147
|
+
# link_to('my piece', '/my/link/to/piece')
|
|
148
|
+
# ]
|
|
149
|
+
# end
|
|
150
|
+
# end
|
|
151
|
+
#
|
|
152
|
+
def breadcrumb(&block)
|
|
153
|
+
config.breadcrumb = block
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def sidebar(name, options = {}, &block)
|
|
157
|
+
config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
class DynamicSetting
|
|
5
|
+
def self.build(setting, type)
|
|
6
|
+
(type ? klass(type) : self).new(setting)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.klass(type)
|
|
10
|
+
klass = "#{type.to_s.camelcase}Setting"
|
|
11
|
+
raise ArgumentError, "Unknown type: #{type}" unless ActiveAdmin.const_defined?(klass)
|
|
12
|
+
ActiveAdmin.const_get(klass)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize(setting)
|
|
16
|
+
@setting = setting
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def value(*_args)
|
|
20
|
+
@setting
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Many configuration options (Ex: site_title, title_image) could either be
|
|
25
|
+
# static (String), methods (Symbol) or procs (Proc). This wrapper takes care of
|
|
26
|
+
# returning the content when String or using instance_eval when Symbol or Proc.
|
|
27
|
+
#
|
|
28
|
+
class StringSymbolOrProcSetting < DynamicSetting
|
|
29
|
+
def value(context = self)
|
|
30
|
+
case @setting
|
|
31
|
+
when Symbol, Proc
|
|
32
|
+
context.instance_eval(&@setting)
|
|
33
|
+
else
|
|
34
|
+
@setting
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/dynamic_setting"
|
|
3
|
+
require "active_admin/settings_node"
|
|
4
|
+
|
|
5
|
+
module ActiveAdmin
|
|
6
|
+
|
|
7
|
+
class DynamicSettingsNode < SettingsNode
|
|
8
|
+
class << self
|
|
9
|
+
def register(name, value, type = nil)
|
|
10
|
+
class_attribute "#{name}_setting"
|
|
11
|
+
add_reader(name)
|
|
12
|
+
add_writer(name, type)
|
|
13
|
+
send "#{name}=", value
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def add_reader(name)
|
|
17
|
+
define_singleton_method(name) do |*args|
|
|
18
|
+
send("#{name}_setting").value(*args)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add_writer(name, type)
|
|
23
|
+
define_singleton_method("#{name}=") do |value|
|
|
24
|
+
send("#{name}_setting=", DynamicSetting.build(value, type))
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
class Engine < ::Rails::Engine
|
|
4
|
+
# Set default values for app_path and load_paths before running initializers
|
|
5
|
+
initializer "active_admin.load_app_path", before: :load_config_initializers do |app|
|
|
6
|
+
ActiveAdmin::Application.setting :app_path, app.root
|
|
7
|
+
ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
initializer "active_admin.precompile", group: :all do |app|
|
|
11
|
+
unless ActiveAdmin.application.use_webpacker
|
|
12
|
+
ActiveAdmin.application.stylesheets.each do |path, _|
|
|
13
|
+
app.config.assets.precompile << path
|
|
14
|
+
end
|
|
15
|
+
ActiveAdmin.application.javascripts.each do |path, _|
|
|
16
|
+
app.config.assets.precompile << path
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
initializer "active_admin.routes" do
|
|
22
|
+
require "active_admin/helpers/routes/url_helpers"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
initializer "active_admin.deprecator" do |app|
|
|
26
|
+
app.deprecators[:activeadmin] = ActiveAdmin.deprecator if app.respond_to?(:deprecators)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
# Exception class to raise when there is an authorized access
|
|
4
|
+
# exception thrown. The exception has a few goodies that may
|
|
5
|
+
# be useful for capturing / recognizing security issues.
|
|
6
|
+
class AccessDenied < StandardError
|
|
7
|
+
attr_reader :user, :action, :subject
|
|
8
|
+
|
|
9
|
+
def initialize(user, action, subject = nil)
|
|
10
|
+
@user = user
|
|
11
|
+
@action = action
|
|
12
|
+
@subject = subject
|
|
13
|
+
|
|
14
|
+
super()
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def message
|
|
18
|
+
I18n.t("active_admin.access_denied.message")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Error < RuntimeError
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class ErrorLoading < Error
|
|
26
|
+
# Locates the most recent file and line from the caught exception's backtrace.
|
|
27
|
+
def find_cause(folder, backtrace)
|
|
28
|
+
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/) { [$1, $2] }.first
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class DatabaseHitDuringLoad < ErrorLoading
|
|
33
|
+
def initialize(exception)
|
|
34
|
+
file, line = find_cause(:app, exception.backtrace)
|
|
35
|
+
|
|
36
|
+
super "Your file, #{file} (line #{line}), caused a database error while Active Admin was loading. This " +
|
|
37
|
+
"is most common when your database is missing or doesn't have the latest migrations applied. To " +
|
|
38
|
+
"prevent this error, move the code to a place where it will only be run when a page is rendered. " +
|
|
39
|
+
"One solution can be, to wrap the query in a Proc. " +
|
|
40
|
+
"Original error message: #{exception.message}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.capture
|
|
44
|
+
yield
|
|
45
|
+
rescue *database_error_classes => exception
|
|
46
|
+
raise new exception
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.database_error_classes
|
|
50
|
+
@classes ||= []
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
class DependencyError < ErrorLoading
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class NoMenuError < KeyError
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class GeneratorError < Error
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/filters/active_filter"
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
module Filters
|
|
6
|
+
|
|
7
|
+
class Active
|
|
8
|
+
attr_accessor :filters, :resource
|
|
9
|
+
|
|
10
|
+
# Instantiate a `Active` object containing collection of current active filters
|
|
11
|
+
|
|
12
|
+
# @param resource [ActiveAdmin::Resource] current resource
|
|
13
|
+
# @param search [Ransack::Search] search object
|
|
14
|
+
#
|
|
15
|
+
# @see ActiveAdmin::ResourceController::DataAcces#apply_filtering
|
|
16
|
+
def initialize(resource, search)
|
|
17
|
+
@resource = resource
|
|
18
|
+
@filters = build_filters(search.conditions)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def build_filters(conditions)
|
|
24
|
+
conditions.map { |condition| ActiveFilter.new(resource, condition.dup) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
|
|
5
|
+
class ActiveFilter
|
|
6
|
+
include ActiveAdmin::ViewHelpers
|
|
7
|
+
|
|
8
|
+
attr_reader :resource, :condition, :related_class
|
|
9
|
+
|
|
10
|
+
# Instantiate a `ActiveFilter`
|
|
11
|
+
#
|
|
12
|
+
# @param resource [ActiveAdmin::Resource] current resource
|
|
13
|
+
# @param condition [Ransack::Nodes::Condition] applied ransack condition
|
|
14
|
+
def initialize(resource, condition)
|
|
15
|
+
@resource = resource
|
|
16
|
+
@condition = condition
|
|
17
|
+
@related_class = find_class if find_class?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def values
|
|
21
|
+
condition_values = condition.values.map(&:value)
|
|
22
|
+
if related_class
|
|
23
|
+
related_class.where(related_primary_key => condition_values)
|
|
24
|
+
else
|
|
25
|
+
condition_values
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def label
|
|
30
|
+
translated_predicate = predicate_name.downcase
|
|
31
|
+
if filter_label && filter_label.is_a?(Proc)
|
|
32
|
+
"#{filter_label.call} #{translated_predicate}"
|
|
33
|
+
elsif filter_label
|
|
34
|
+
"#{filter_label} #{translated_predicate}"
|
|
35
|
+
elsif related_class
|
|
36
|
+
"#{related_class_name} #{translated_predicate}"
|
|
37
|
+
else
|
|
38
|
+
"#{attribute_name} #{translated_predicate}"
|
|
39
|
+
end.strip
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def predicate_name
|
|
43
|
+
I18n.t(
|
|
44
|
+
"ransack.predicates.#{condition.predicate.name}",
|
|
45
|
+
default: ransack_predicate_name)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def html_options
|
|
49
|
+
{ class: "current_filter current_filter_#{condition.key}" }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def resource_class
|
|
55
|
+
resource.resource_class
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def attribute_name
|
|
59
|
+
resource_class.human_attribute_name(name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def related_class_name
|
|
63
|
+
return unless related_class
|
|
64
|
+
|
|
65
|
+
related_class.model_name.human
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def filter_label
|
|
69
|
+
return unless filter
|
|
70
|
+
|
|
71
|
+
filter[:label] || I18n.t(name, scope: ["formtastic", "labels"], default: nil)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#@return Ransack::Nodes::Attribute
|
|
75
|
+
def condition_attribute
|
|
76
|
+
condition.attributes[0]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def name
|
|
80
|
+
condition_attribute.attr_name
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def ransack_predicate_name
|
|
84
|
+
Ransack::Translate.predicate(condition.predicate.name)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def find_class?
|
|
88
|
+
["eq", "in"].include? condition.predicate.arel_predicate
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# detect related class for Ransack::Nodes::Attribute
|
|
92
|
+
def find_class
|
|
93
|
+
if condition_attribute.klass != resource_class && condition_attribute.klass.primary_key == name.to_s
|
|
94
|
+
condition_attribute.klass
|
|
95
|
+
elsif predicate_association
|
|
96
|
+
predicate_association.klass
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def filter
|
|
101
|
+
resource.filters[name.to_sym] || resource.filters[condition.key.to_sym]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def related_primary_key
|
|
105
|
+
if predicate_association
|
|
106
|
+
predicate_association.association_primary_key
|
|
107
|
+
elsif related_class
|
|
108
|
+
related_class.primary_key
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def predicate_association
|
|
113
|
+
@predicate_association = find_predicate_association unless defined?(@predicate_association)
|
|
114
|
+
@predicate_association
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def find_predicate_association
|
|
118
|
+
condition_attribute.klass.reflect_on_all_associations.
|
|
119
|
+
reject { |r| r.options[:polymorphic] }. #skip polymorphic
|
|
120
|
+
detect { |r| r.foreign_key.to_s == name.to_s }
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/filters/active"
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
module Filters
|
|
6
|
+
class ActiveSidebar < ActiveAdmin::SidebarSection
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
super "search_status", sidebar_options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def block
|
|
13
|
+
-> { active_filters_sidebar_content }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def title
|
|
17
|
+
I18n.t("active_admin.search_status.headline")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def sidebar_options
|
|
23
|
+
{ only: :index, if: -> { active_admin_config.current_filters_enabled? && (params[:q] || params[:scope]) } }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -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
|