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,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/orm/active_record/comments/views"
|
|
3
|
+
require "active_admin/orm/active_record/comments/show_page_helper"
|
|
4
|
+
require "active_admin/orm/active_record/comments/namespace_helper"
|
|
5
|
+
require "active_admin/orm/active_record/comments/resource_helper"
|
|
6
|
+
|
|
7
|
+
# Add the comments configuration
|
|
8
|
+
ActiveAdmin::Application.inheritable_setting :comments, true
|
|
9
|
+
ActiveAdmin::Application.inheritable_setting :comments_registration_name, "Comment"
|
|
10
|
+
ActiveAdmin::Application.inheritable_setting :comments_order, "created_at ASC"
|
|
11
|
+
ActiveAdmin::Application.inheritable_setting :comments_menu, {}
|
|
12
|
+
|
|
13
|
+
# Insert helper modules
|
|
14
|
+
ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
|
|
15
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
|
|
16
|
+
ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
|
|
17
|
+
|
|
18
|
+
# Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
|
|
19
|
+
ActiveAdmin.autoload :Comment, "active_admin/orm/active_record/comments/comment"
|
|
20
|
+
|
|
21
|
+
# Hint i18n-tasks about model and attribute translations used by default install
|
|
22
|
+
# i18n-tasks-use t('activerecord.models.comment')
|
|
23
|
+
# i18n-tasks-use t('activerecord.models.active_admin/comment')
|
|
24
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.author_type')
|
|
25
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.body')
|
|
26
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.created_at')
|
|
27
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.namespace')
|
|
28
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.resource_type')
|
|
29
|
+
# i18n-tasks-use t('activerecord.attributes.active_admin/comment.updated_at')
|
|
30
|
+
# i18n-tasks-use t('active_admin.scopes.all')
|
|
31
|
+
|
|
32
|
+
# Walk through all the loaded namespaces after they're loaded
|
|
33
|
+
ActiveAdmin.after_load do |app|
|
|
34
|
+
app.namespaces.each do |namespace|
|
|
35
|
+
namespace.register ActiveAdmin::Comment, as: namespace.comments_registration_name do
|
|
36
|
+
actions :index, :show, :create, :destroy
|
|
37
|
+
|
|
38
|
+
menu namespace.comments ? namespace.comments_menu : false
|
|
39
|
+
|
|
40
|
+
config.comments = false # Don't allow comments on comments
|
|
41
|
+
config.batch_actions = false # The default destroy batch action isn't showing up anyway...
|
|
42
|
+
|
|
43
|
+
scope :all, show_count: false
|
|
44
|
+
# Register a scope for every namespace that exists.
|
|
45
|
+
# The current namespace will be the default scope.
|
|
46
|
+
app.namespaces.map(&:name).each do |name|
|
|
47
|
+
scope name, default: namespace.name == name do |scope|
|
|
48
|
+
scope.where namespace: name.to_s
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Store the author and namespace
|
|
53
|
+
before_save do |comment|
|
|
54
|
+
comment.namespace = active_admin_config.namespace.name
|
|
55
|
+
comment.author = current_active_admin_user
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
controller do
|
|
59
|
+
# Prevent N+1 queries
|
|
60
|
+
def scoped_collection
|
|
61
|
+
super.includes(:author, :resource)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Redirect to the resource show page after comment creation
|
|
65
|
+
def create
|
|
66
|
+
create! do |success, failure|
|
|
67
|
+
success.html do
|
|
68
|
+
redirect_back fallback_location: active_admin_root
|
|
69
|
+
end
|
|
70
|
+
failure.html do
|
|
71
|
+
flash[:error] = I18n.t "active_admin.comments.errors.empty_text"
|
|
72
|
+
redirect_back fallback_location: active_admin_root
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def destroy
|
|
78
|
+
destroy! do |success, failure|
|
|
79
|
+
success.html do
|
|
80
|
+
redirect_back fallback_location: active_admin_root
|
|
81
|
+
end
|
|
82
|
+
failure.html do
|
|
83
|
+
redirect_back fallback_location: active_admin_root
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
permit_params :body, :namespace, :resource_id, :resource_type
|
|
90
|
+
|
|
91
|
+
index do
|
|
92
|
+
column I18n.t("active_admin.comments.resource_type"), :resource_type
|
|
93
|
+
column I18n.t("active_admin.comments.author_type"), :author_type
|
|
94
|
+
column I18n.t("active_admin.comments.resource"), :resource
|
|
95
|
+
column I18n.t("active_admin.comments.author"), :author
|
|
96
|
+
column I18n.t("active_admin.comments.body"), :body
|
|
97
|
+
column I18n.t("active_admin.comments.created_at"), :created_at
|
|
98
|
+
actions
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
# Page is the primary data storage for page configuration in Active Admin
|
|
4
|
+
#
|
|
5
|
+
# When you register a page (ActiveAdmin.register_page "Status") you are actually creating
|
|
6
|
+
# a new Page instance within the given Namespace.
|
|
7
|
+
#
|
|
8
|
+
# The instance of the current page is available in PageController and views
|
|
9
|
+
# by calling the #active_admin_config method.
|
|
10
|
+
#
|
|
11
|
+
class Page
|
|
12
|
+
|
|
13
|
+
# The namespace this config belongs to
|
|
14
|
+
attr_reader :namespace
|
|
15
|
+
|
|
16
|
+
# The name of the page
|
|
17
|
+
attr_reader :name
|
|
18
|
+
|
|
19
|
+
# An array of custom actions defined for this page
|
|
20
|
+
attr_reader :page_actions
|
|
21
|
+
|
|
22
|
+
# Set breadcrumb builder
|
|
23
|
+
attr_accessor :breadcrumb
|
|
24
|
+
|
|
25
|
+
module Base
|
|
26
|
+
def initialize(namespace, name, options)
|
|
27
|
+
@namespace = namespace
|
|
28
|
+
@name = name
|
|
29
|
+
@options = options
|
|
30
|
+
@page_actions = []
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
include Base
|
|
35
|
+
include Resource::Controllers
|
|
36
|
+
include Resource::PagePresenters
|
|
37
|
+
include Resource::Sidebars
|
|
38
|
+
include Resource::ActionItems
|
|
39
|
+
include Resource::Menu
|
|
40
|
+
include Resource::Naming
|
|
41
|
+
include Resource::Routes
|
|
42
|
+
|
|
43
|
+
# label is singular
|
|
44
|
+
def plural_resource_label
|
|
45
|
+
name
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def resource_name
|
|
49
|
+
@resource_name ||= Resource::Name.new(nil, name)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def underscored_resource_name
|
|
53
|
+
resource_name.to_s.parameterize.underscore
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def camelized_resource_name
|
|
57
|
+
underscored_resource_name.camelize
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def namespace_name
|
|
61
|
+
namespace.name.to_s
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def default_menu_options
|
|
65
|
+
super.merge(id: resource_name)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def controller_name
|
|
69
|
+
[namespace.module_name, camelized_resource_name + "Controller"].compact.join("::")
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Override from `ActiveAdmin::Resource::Controllers`
|
|
73
|
+
def route_uncountable?
|
|
74
|
+
false
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def add_default_action_items
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def add_default_sidebar_sections
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Clears all the custom actions this page knows about
|
|
84
|
+
def clear_page_actions!
|
|
85
|
+
@page_actions = []
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def belongs_to(target, options = {})
|
|
89
|
+
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
|
90
|
+
self.navigation_menu_name = target unless @belongs_to.optional?
|
|
91
|
+
controller.send :belongs_to, target, options.dup
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def belongs_to_config
|
|
95
|
+
@belongs_to
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Do we belong to another resource?
|
|
99
|
+
def belongs_to?
|
|
100
|
+
!!belongs_to_config
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def breadcrumb
|
|
104
|
+
instance_variable_defined?(:@breadcrumb) ? @breadcrumb : namespace.breadcrumb
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def order_clause
|
|
108
|
+
@order_clause || namespace.order_clause
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# All Pages controllers inherit from this controller.
|
|
5
|
+
class PageController < BaseController
|
|
6
|
+
|
|
7
|
+
# Active admin actions don't require layout. All custom actions do.
|
|
8
|
+
ACTIVE_ADMIN_ACTIONS = [:index]
|
|
9
|
+
|
|
10
|
+
actions :index
|
|
11
|
+
|
|
12
|
+
before_action :authorize_access!
|
|
13
|
+
|
|
14
|
+
def index(options = {}, &block)
|
|
15
|
+
render "active_admin/page/index"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def clear_page_actions!
|
|
19
|
+
active_admin_config.clear_page_actions!
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def authorize_access!
|
|
25
|
+
permission = action_to_permission(params[:action])
|
|
26
|
+
authorize! permission, active_admin_config
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
# This is the class where all the register_page blocks are evaluated.
|
|
4
|
+
class PageDSL < DSL
|
|
5
|
+
|
|
6
|
+
# Page content.
|
|
7
|
+
#
|
|
8
|
+
# The block should define the view using Arbre.
|
|
9
|
+
#
|
|
10
|
+
# Example:
|
|
11
|
+
#
|
|
12
|
+
# ActiveAdmin.register "My Page" do
|
|
13
|
+
# content do
|
|
14
|
+
# para "Sweet!"
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
def content(options = {}, &block)
|
|
19
|
+
config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def page_action(name, options = {}, &block)
|
|
23
|
+
config.page_actions << ControllerAction.new(name, options)
|
|
24
|
+
controller do
|
|
25
|
+
define_method(name, &block || Proc.new {})
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def belongs_to(target, options = {})
|
|
30
|
+
config.belongs_to(target, options)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# A simple object that gets used to present different aspects of views
|
|
5
|
+
#
|
|
6
|
+
# Initialize with a set of options and a block. The options become
|
|
7
|
+
# available using hash style syntax.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
#
|
|
11
|
+
# presenter = PagePresenter.new as: :table do
|
|
12
|
+
# # some awesome stuff
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# presenter[:as] #=> :table
|
|
16
|
+
# presenter.block #=> The block passed in to new
|
|
17
|
+
#
|
|
18
|
+
class PagePresenter
|
|
19
|
+
|
|
20
|
+
attr_reader :block, :options
|
|
21
|
+
|
|
22
|
+
delegate :has_key?, :fetch, to: :options
|
|
23
|
+
|
|
24
|
+
def initialize(options = {}, &block)
|
|
25
|
+
@options = options
|
|
26
|
+
@block = block
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def [](key)
|
|
30
|
+
@options[key]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
ActiveAdmin::Dependency.pundit!
|
|
3
|
+
|
|
4
|
+
require "pundit"
|
|
5
|
+
|
|
6
|
+
# Add a setting to the application to configure the pundit default policy
|
|
7
|
+
ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
|
|
8
|
+
ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
|
|
9
|
+
|
|
10
|
+
module ActiveAdmin
|
|
11
|
+
|
|
12
|
+
class PunditAdapter < AuthorizationAdapter
|
|
13
|
+
|
|
14
|
+
def authorized?(action, subject = nil)
|
|
15
|
+
policy = retrieve_policy(subject)
|
|
16
|
+
action = format_action(action, subject)
|
|
17
|
+
|
|
18
|
+
policy.respond_to?(action) && policy.public_send(action)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def scope_collection(collection, action = Auth::READ)
|
|
22
|
+
# scoping is appliable only to read/index action
|
|
23
|
+
# which means there is no way how to scope other actions
|
|
24
|
+
Pundit.policy_scope!(user, namespace(collection))
|
|
25
|
+
rescue Pundit::NotDefinedError => e
|
|
26
|
+
if default_policy_class && default_policy_class.const_defined?(:Scope)
|
|
27
|
+
default_policy_class::Scope.new(user, collection).resolve
|
|
28
|
+
else
|
|
29
|
+
raise e
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def retrieve_policy(subject)
|
|
34
|
+
target = policy_target(subject)
|
|
35
|
+
if (policy = policy(namespace(target)) || compat_policy(subject))
|
|
36
|
+
policy
|
|
37
|
+
elsif default_policy_class
|
|
38
|
+
default_policy(subject)
|
|
39
|
+
else
|
|
40
|
+
raise Pundit::NotDefinedError, "unable to find a compatible policy for `#{target}`"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def format_action(action, subject)
|
|
45
|
+
# https://github.com/varvet/pundit/blob/main/lib/generators/pundit/install/templates/application_policy.rb
|
|
46
|
+
case action
|
|
47
|
+
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
|
48
|
+
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
|
49
|
+
else "#{action}?"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def policy_target(subject)
|
|
56
|
+
case subject
|
|
57
|
+
when nil then resource
|
|
58
|
+
when Class then subject.new
|
|
59
|
+
else subject
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# This method is needed to fallback to our previous policy searching logic.
|
|
64
|
+
# I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
|
|
65
|
+
# we should try to search it without namespace. This is because that's
|
|
66
|
+
# the only thing that worked in this case before we fixed our buggy namespace
|
|
67
|
+
# detection, so people are probably relying on it.
|
|
68
|
+
# This fallback might be removed in future versions of ActiveAdmin, so
|
|
69
|
+
# pundit_adapter search will work consistently with provided namespaces
|
|
70
|
+
def compat_policy(subject)
|
|
71
|
+
return unless default_policy_namespace
|
|
72
|
+
|
|
73
|
+
target = policy_target(subject)
|
|
74
|
+
|
|
75
|
+
return unless target.class.to_s.include?(default_policy_module) &&
|
|
76
|
+
(policy = policy(target))
|
|
77
|
+
|
|
78
|
+
policy_name = policy.class.to_s
|
|
79
|
+
|
|
80
|
+
ActiveAdmin.deprecator.warn "You have `pundit_policy_namespace` configured as `#{default_policy_namespace}`, " \
|
|
81
|
+
"but ActiveAdmin was unable to find policy #{default_policy_module}::#{policy_name}. " \
|
|
82
|
+
"#{policy_name} will be used instead. " \
|
|
83
|
+
"This behavior will be removed in future versions of ActiveAdmin. " \
|
|
84
|
+
"To fix this warning, move your #{policy_name} policy to the #{default_policy_module} namespace"
|
|
85
|
+
|
|
86
|
+
policy
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def namespace(object)
|
|
90
|
+
if default_policy_namespace && !object.class.to_s.start_with?("#{default_policy_module}::")
|
|
91
|
+
[default_policy_namespace.to_sym, object]
|
|
92
|
+
else
|
|
93
|
+
object
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def default_policy_class
|
|
98
|
+
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def default_policy(subject)
|
|
102
|
+
default_policy_class.new(user, subject)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def default_policy_namespace
|
|
106
|
+
ActiveAdmin.application.pundit_policy_namespace
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def default_policy_module
|
|
110
|
+
default_policy_namespace.to_s.camelize
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def policy(target)
|
|
114
|
+
policies[target] ||= Pundit.policy(user, target)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def policies
|
|
118
|
+
@policies ||= {}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/helpers/optional_display"
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
|
|
6
|
+
class Resource
|
|
7
|
+
module ActionItems
|
|
8
|
+
|
|
9
|
+
# Adds the default action items to a resource when it's initialized
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
super
|
|
12
|
+
add_default_action_items
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @return [Array] The set of action items for this resource
|
|
16
|
+
def action_items
|
|
17
|
+
@action_items ||= []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Add a new action item to a resource
|
|
21
|
+
#
|
|
22
|
+
# @param [Symbol] name
|
|
23
|
+
# @param [Hash] options valid keys include:
|
|
24
|
+
# :only: A single or array of controller actions to display
|
|
25
|
+
# this action item on.
|
|
26
|
+
# :except: A single or array of controller actions not to
|
|
27
|
+
# display this action item on.
|
|
28
|
+
# :priority: A single integer value. To control the display order. Default is 10.
|
|
29
|
+
def add_action_item(name, options = {}, &block)
|
|
30
|
+
self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def remove_action_item(name)
|
|
34
|
+
self.action_items.delete_if { |item| item.name == name }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Returns a set of action items to display for a specific controller action
|
|
38
|
+
#
|
|
39
|
+
# @param [String, Symbol] action the action to retrieve action items for
|
|
40
|
+
#
|
|
41
|
+
# @return [Array] Array of ActionItems for the controller actions
|
|
42
|
+
def action_items_for(action, render_context = nil)
|
|
43
|
+
action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Clears all the existing action items for this resource
|
|
47
|
+
def clear_action_items!
|
|
48
|
+
@action_items = []
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Used by active_admin Base view
|
|
52
|
+
def action_items?
|
|
53
|
+
!!@action_items && @action_items.any?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# Adds the default action items to each resource
|
|
59
|
+
def add_default_action_items
|
|
60
|
+
add_default_new_action_item
|
|
61
|
+
add_default_edit_action_item
|
|
62
|
+
add_default_show_action_item
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Adds the default New link on index
|
|
66
|
+
def add_default_new_action_item
|
|
67
|
+
add_action_item :new, only: :index do
|
|
68
|
+
if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::NEW, active_admin_config.resource_class)
|
|
69
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
70
|
+
link_to localizer.t(:new_model), new_resource_path
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Adds the default Edit link on show
|
|
76
|
+
def add_default_edit_action_item
|
|
77
|
+
add_action_item :edit, only: :show do
|
|
78
|
+
if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::EDIT, resource)
|
|
79
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
80
|
+
link_to localizer.t(:edit_model), edit_resource_path(resource)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Adds the default Destroy link on show
|
|
86
|
+
def add_default_show_action_item
|
|
87
|
+
add_action_item :destroy, only: :show do
|
|
88
|
+
if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
|
89
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
90
|
+
link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
|
|
91
|
+
data: { confirm: localizer.t(:delete_confirmation) }
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Model class to store the data for ActionItems
|
|
100
|
+
class ActionItem
|
|
101
|
+
include ActiveAdmin::OptionalDisplay
|
|
102
|
+
|
|
103
|
+
attr_accessor :block, :name
|
|
104
|
+
|
|
105
|
+
def initialize(name, options = {}, &block)
|
|
106
|
+
@name = name
|
|
107
|
+
@options = options
|
|
108
|
+
@block = block
|
|
109
|
+
normalize_display_options!
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def html_class
|
|
113
|
+
"action_item #{@options[:class]}".rstrip
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def priority
|
|
117
|
+
@options[:priority] || 10
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
class Resource
|
|
5
|
+
module Attributes
|
|
6
|
+
|
|
7
|
+
def default_attributes
|
|
8
|
+
resource_class.columns.each_with_object({}) do |c, attrs|
|
|
9
|
+
unless reject_col?(c)
|
|
10
|
+
name = c.name.to_sym
|
|
11
|
+
attrs[name] = (method_for_column(name) || name)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def method_for_column(c)
|
|
17
|
+
resource_class.respond_to?(:reflect_on_all_associations) && foreign_methods.has_key?(c) && foreign_methods[c].name.to_sym
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def foreign_methods
|
|
21
|
+
@foreign_methods ||= resource_class.reflect_on_all_associations.
|
|
22
|
+
select { |r| r.macro == :belongs_to }.
|
|
23
|
+
reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
|
|
24
|
+
index_by { |r| r.foreign_key.to_sym }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reject_col?(c)
|
|
28
|
+
primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def primary_col?(c)
|
|
32
|
+
c.name == resource_class.primary_key
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def sti_col?(c)
|
|
36
|
+
c.name == resource_class.inheritance_column
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def counter_cache_col?(c)
|
|
40
|
+
# This helper is called inside a loop. Let's memoize the result.
|
|
41
|
+
@counter_cache_columns ||= begin
|
|
42
|
+
resource_class.reflect_on_all_associations(:has_many)
|
|
43
|
+
.select(&:has_cached_counter?)
|
|
44
|
+
.map(&:counter_cache_column)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
@counter_cache_columns.include?(c.name)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def filtered_col?(c)
|
|
51
|
+
ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
class Resource
|
|
5
|
+
class BelongsTo
|
|
6
|
+
|
|
7
|
+
class TargetNotFound < StandardError
|
|
8
|
+
def initialize(key, namespace)
|
|
9
|
+
super "Could not find #{key} in #{namespace.name} " +
|
|
10
|
+
"with #{namespace.resources.map(&:resource_name)}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The resource which initiated this relationship
|
|
15
|
+
attr_reader :owner
|
|
16
|
+
|
|
17
|
+
# The name of the relation
|
|
18
|
+
attr_reader :target_name
|
|
19
|
+
|
|
20
|
+
def initialize(owner, target_name, options = {})
|
|
21
|
+
@owner = owner
|
|
22
|
+
@target_name = target_name
|
|
23
|
+
@options = options
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns the target resource class or raises an exception if it doesn't exist
|
|
27
|
+
def target
|
|
28
|
+
resource or raise TargetNotFound.new (@options[:class_name] || @target_name.to_s.camelize), namespace
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def resource
|
|
32
|
+
namespace.resources[@options[:class_name]] ||
|
|
33
|
+
namespace.resources[@target_name.to_s.camelize]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def namespace
|
|
37
|
+
@owner.namespace
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def optional?
|
|
41
|
+
@options[:optional]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def required?
|
|
45
|
+
!optional?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def to_param
|
|
49
|
+
(@options[:param] || "#{@target_name}_id").to_sym
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
class Resource
|
|
4
|
+
module Controllers
|
|
5
|
+
delegate :resources_configuration, to: :controller
|
|
6
|
+
|
|
7
|
+
# Returns a properly formatted controller name for this
|
|
8
|
+
# config within its namespace
|
|
9
|
+
def controller_name
|
|
10
|
+
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join("::")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Returns the controller for this config
|
|
14
|
+
def controller
|
|
15
|
+
@controller ||= controller_name.constantize
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|