ultra-quick-hub 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ultra-quick-hub might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/activeadmin-3.5.1/CHANGELOG.md +1153 -0
- data/activeadmin-3.5.1/CODE_OF_CONDUCT.md +74 -0
- data/activeadmin-3.5.1/CONTRIBUTING.md +187 -0
- data/activeadmin-3.5.1/LICENSE +20 -0
- data/activeadmin-3.5.1/README.md +117 -0
- data/activeadmin-3.5.1/app/assets/javascripts/active_admin/base.js +520 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_base.scss +57 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_forms.scss +315 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_header.scss +188 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_normalize.scss +349 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_print.scss +287 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_date_picker.scss +148 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +154 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_pagination.scss +58 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_table_tools.scss +70 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tables.scss +112 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tabs.scss +68 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_variables.scss +51 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_footer.scss +19 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/base.js +28 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/datepicker.js +19 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/filters.js +10 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/has-many.js +98 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/core_ext.rb +148 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/filters.js +39 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/per-page.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/utils.js +40 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/registrations/new.html.erb +21 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/page/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/edit.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/new.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/show.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin_logged_out.html.erb +50 -0
- data/activeadmin-3.5.1/config/locales/ar.yml +128 -0
- data/activeadmin-3.5.1/config/locales/az.yml +131 -0
- data/activeadmin-3.5.1/config/locales/bg.yml +112 -0
- data/activeadmin-3.5.1/config/locales/bs.yml +114 -0
- data/activeadmin-3.5.1/config/locales/ca.yml +98 -0
- data/activeadmin-3.5.1/config/locales/cs.yml +102 -0
- data/activeadmin-3.5.1/config/locales/da.yml +130 -0
- data/activeadmin-3.5.1/config/locales/de-CH.yml +94 -0
- data/activeadmin-3.5.1/config/locales/de.yml +154 -0
- data/activeadmin-3.5.1/config/locales/el.yml +119 -0
- data/activeadmin-3.5.1/config/locales/en-CA.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en-GB.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en.yml +154 -0
- data/activeadmin-3.5.1/config/locales/eo.yml +137 -0
- data/activeadmin-3.5.1/config/locales/es-MX.yml +90 -0
- data/activeadmin-3.5.1/config/locales/es.yml +154 -0
- data/activeadmin-3.5.1/config/locales/fa.yml +112 -0
- data/activeadmin-3.5.1/config/locales/fi.yml +105 -0
- data/activeadmin-3.5.1/config/locales/fr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/he.yml +132 -0
- data/activeadmin-3.5.1/config/locales/hr.yml +116 -0
- data/activeadmin-3.5.1/config/locales/hu.yml +94 -0
- data/activeadmin-3.5.1/config/locales/id.yml +128 -0
- data/activeadmin-3.5.1/config/locales/it.yml +154 -0
- data/activeadmin-3.5.1/config/locales/ja.yml +133 -0
- data/activeadmin-3.5.1/config/locales/ko.yml +113 -0
- data/activeadmin-3.5.1/config/locales/lt.yml +134 -0
- data/activeadmin-3.5.1/config/locales/lv.yml +85 -0
- data/activeadmin-3.5.1/config/locales/mk.yml +126 -0
- data/activeadmin-3.5.1/config/locales/nb.yml +122 -0
- data/activeadmin-3.5.1/config/locales/nl.yml +136 -0
- data/activeadmin-3.5.1/config/locales/pl.yml +160 -0
- data/activeadmin-3.5.1/config/locales/pt-BR.yml +135 -0
- data/activeadmin-3.5.1/config/locales/pt-PT.yml +85 -0
- data/activeadmin-3.5.1/config/locales/ro.yml +90 -0
- data/activeadmin-3.5.1/config/locales/ru.yml +135 -0
- data/activeadmin-3.5.1/config/locales/sk.yml +160 -0
- data/activeadmin-3.5.1/config/locales/sv-SE.yml +154 -0
- data/activeadmin-3.5.1/config/locales/tr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/uk.yml +132 -0
- data/activeadmin-3.5.1/config/locales/vi.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-CN.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-TW.yml +128 -0
- data/activeadmin-3.5.1/lib/active_admin/abstract_view_factory.rb +48 -0
- data/activeadmin-3.5.1/lib/active_admin/application.rb +234 -0
- data/activeadmin-3.5.1/lib/active_admin/application_settings.rb +43 -0
- data/activeadmin-3.5.1/lib/active_admin/asset_registration.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/authorization_adapter.rb +132 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/authorization.rb +129 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/menu.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller.rb +82 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/controller.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/resource_extension.rb +157 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_form.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_selector.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/selection_cells.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/callbacks.rb +89 -0
- data/activeadmin-3.5.1/lib/active_admin/cancan_adapter.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/collection_decorator.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/component.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/controller_action.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/csv_builder.rb +144 -0
- data/activeadmin-3.5.1/lib/active_admin/dependency.rb +97 -0
- data/activeadmin-3.5.1/lib/active_admin/devise.rb +91 -0
- data/activeadmin-3.5.1/lib/active_admin/dsl.rb +161 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_setting.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_settings_node.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/engine.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/error.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_filter.rb +124 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_sidebar.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/dsl.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/forms.rb +86 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/formtastic_addons.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/resource_extension.rb +180 -0
- data/activeadmin-3.5.1/lib/active_admin/filters.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/form_builder.rb +186 -0
- data/activeadmin-3.5.1/lib/active_admin/generators/boilerplate.rb +54 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/collection.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/i18n.rb +8 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/optional_display.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/routes/url_helpers.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/scope_chain.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/datepicker_input.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base/search_method_select.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/boolean_input.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/check_boxes_input.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_picker_input.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_range_input.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/numeric_input.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/select_input.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/string_input.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/text_input.rb +26 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers/resource_localizer.rb +36 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/menu.rb +107 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_collection.rb +92 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_item.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace.rb +267 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace_settings.rb +127 -0
- data/activeadmin-3.5.1/lib/active_admin/order_clause.rb +49 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/comment.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/namespace_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/resource_helper.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/show_page_helper.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views.rb +3 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments.rb +102 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/mongoid.rb +2 -0
- data/activeadmin-3.5.1/lib/active_admin/page.rb +112 -0
- data/activeadmin-3.5.1/lib/active_admin/page_controller.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/page_dsl.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/page_presenter.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/pundit_adapter.rb +123 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/action_items.rb +121 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/attributes.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/belongs_to.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/controllers.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/includes.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/menu.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/model.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/naming.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/ordering.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/page_presenters.rb +83 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/pagination.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/routes.rb +146 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scope_to.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scopes.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/sidebars.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/resource.rb +227 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_collection.rb +73 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/action_builder.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/data_access.rb +348 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/decorators.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/resource_class_methods.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/scoping.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/sidebars.rb +19 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/streaming.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_dsl.rb +210 -0
- data/activeadmin-3.5.1/lib/active_admin/router.rb +115 -0
- data/activeadmin-3.5.1/lib/active_admin/scope.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/settings_node.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/sidebar_section.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/version.rb +4 -0
- data/activeadmin-3.5.1/lib/active_admin/view_factory.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/active_admin_application_helper.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/auto_link_helper.rb +46 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/breadcrumb_helper.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/display_helper.rb +119 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/download_format_links_helper.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/flash_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/form_helper.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/method_or_proc_helper.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/scope_name_helper.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/sidebar_helper.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/title_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/view_factory_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/views/action_items.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_admin_form.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/attributes_table.rb +95 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/blank_slate.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/columns.rb +162 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/dropdown_menu.rb +69 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/index_list.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu_item.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/paginated_collection.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/panel.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/scopes.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar_section.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/site_title.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/status_tag.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/table_for.rb +211 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/tabs.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/unsupported_browser.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/footer.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/views/header.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_block.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_blog.rb +156 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_grid.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_table.rb +401 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/base.rb +134 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/form.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/index.rb +166 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/layout.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/page.rb +31 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/show.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/views/tabbed_navigation.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/title_bar.rb +56 -0
- data/activeadmin-3.5.1/lib/active_admin/views.rb +9 -0
- data/activeadmin-3.5.1/lib/active_admin.rb +135 -0
- data/activeadmin-3.5.1/lib/activeadmin.rb +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/assets_generator.rb +15 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/devise/devise_generator.rb +69 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/install_generator.rb +56 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/active_admin.rb.erb +352 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/USAGE +8 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/page_generator.rb +13 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/templates/page.rb +6 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/resource_generator.rb +21 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/data.js +39 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/disable-selection.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/focusable.js +79 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +81 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/keycode.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/labels.js +70 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/plugin.js +49 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/position.js +513 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/scroll-parent.js +50 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/tabbable.js +41 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/unique-id.js +54 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/version.js +20 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widget.js +761 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/button.js +454 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +294 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +304 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2240 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +957 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1264 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +226 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1281 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1614 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +918 -0
- data/ultra-quick-hub.gemspec +12 -0
- metadata +384 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/router"
|
|
3
|
+
require "active_admin/application_settings"
|
|
4
|
+
require "active_admin/namespace_settings"
|
|
5
|
+
|
|
6
|
+
module ActiveAdmin
|
|
7
|
+
class Application
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def setting(name, default)
|
|
11
|
+
ApplicationSettings.register name, default
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def inheritable_setting(name, default)
|
|
15
|
+
NamespaceSettings.register name, default
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def settings
|
|
20
|
+
@settings ||= SettingsNode.build(ApplicationSettings)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def namespace_settings
|
|
24
|
+
@namespace_settings ||= SettingsNode.build(NamespaceSettings)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def respond_to_missing?(method, include_private = false)
|
|
28
|
+
[settings, namespace_settings].any? { |sets| sets.respond_to?(method) } || super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def method_missing(method, *args)
|
|
32
|
+
if settings.respond_to?(method)
|
|
33
|
+
settings.send(method, *args)
|
|
34
|
+
elsif namespace_settings.respond_to?(method)
|
|
35
|
+
namespace_settings.send(method, *args)
|
|
36
|
+
else
|
|
37
|
+
super
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
attr_reader :namespaces
|
|
42
|
+
def initialize
|
|
43
|
+
@namespaces = Namespace::Store.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
include AssetRegistration
|
|
47
|
+
|
|
48
|
+
# Event that gets triggered on load of Active Admin
|
|
49
|
+
BeforeLoadEvent = "active_admin.application.before_load".freeze
|
|
50
|
+
AfterLoadEvent = "active_admin.application.after_load".freeze
|
|
51
|
+
|
|
52
|
+
# Runs before the app's AA initializer
|
|
53
|
+
def setup!
|
|
54
|
+
register_default_assets
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Runs after the app's AA initializer
|
|
58
|
+
def prepare!
|
|
59
|
+
remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
60
|
+
attach_reloader
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Registers a brand new configuration for the given resource.
|
|
64
|
+
def register(resource, options = {}, &block)
|
|
65
|
+
ns = options.fetch(:namespace) { default_namespace }
|
|
66
|
+
namespace(ns).register resource, options, &block
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Creates a namespace for the given name
|
|
70
|
+
#
|
|
71
|
+
# Yields the namespace if a block is given
|
|
72
|
+
#
|
|
73
|
+
# @return [Namespace] the new or existing namespace
|
|
74
|
+
def namespace(name)
|
|
75
|
+
name ||= :root
|
|
76
|
+
|
|
77
|
+
namespace = namespaces[name.to_sym] ||= begin
|
|
78
|
+
namespace = Namespace.new(self, name)
|
|
79
|
+
ActiveSupport::Notifications.instrument ActiveAdmin::Namespace::RegisterEvent, { active_admin_namespace: namespace }
|
|
80
|
+
namespace
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
yield(namespace) if block_given?
|
|
84
|
+
|
|
85
|
+
namespace
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Register a page
|
|
89
|
+
#
|
|
90
|
+
# @param name [String] The page name
|
|
91
|
+
# @option [Hash] Accepts option :namespace.
|
|
92
|
+
# @&block The registration block.
|
|
93
|
+
#
|
|
94
|
+
def register_page(name, options = {}, &block)
|
|
95
|
+
ns = options.fetch(:namespace) { default_namespace }
|
|
96
|
+
namespace(ns).register_page name, options, &block
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Whether all configuration files have been loaded
|
|
100
|
+
def loaded?
|
|
101
|
+
@@loaded ||= false
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Removes all defined controllers from memory. Useful in
|
|
105
|
+
# development, where they are reloaded on each request.
|
|
106
|
+
def unload!
|
|
107
|
+
namespaces.each &:unload!
|
|
108
|
+
@@loaded = false
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Loads all ruby files that are within the load_paths setting.
|
|
112
|
+
# To reload everything simply call `ActiveAdmin.unload!`
|
|
113
|
+
def load!
|
|
114
|
+
unless loaded?
|
|
115
|
+
ActiveSupport::Notifications.instrument BeforeLoadEvent, { active_admin_application: self } # before_load hook
|
|
116
|
+
files.each { |file| load file } # load files
|
|
117
|
+
namespace(default_namespace) # init AA resources
|
|
118
|
+
ActiveSupport::Notifications.instrument AfterLoadEvent, { active_admin_application: self } # after_load hook
|
|
119
|
+
@@loaded = true
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def load(file)
|
|
124
|
+
DatabaseHitDuringLoad.capture { super }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Returns ALL the files to be loaded
|
|
128
|
+
def files
|
|
129
|
+
load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"].sort }
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Creates all the necessary routes for the ActiveAdmin configurations
|
|
133
|
+
#
|
|
134
|
+
# Use this within the routes.rb file:
|
|
135
|
+
#
|
|
136
|
+
# Application.routes.draw do |map|
|
|
137
|
+
# ActiveAdmin.routes(self)
|
|
138
|
+
# end
|
|
139
|
+
#
|
|
140
|
+
# @param rails_router [ActionDispatch::Routing::Mapper]
|
|
141
|
+
def routes(rails_router)
|
|
142
|
+
load!
|
|
143
|
+
Router.new(router: rails_router, namespaces: namespaces).apply
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Adds before, around and after filters to all controllers.
|
|
147
|
+
# Example usage:
|
|
148
|
+
# ActiveAdmin.before_action :authenticate_admin!
|
|
149
|
+
#
|
|
150
|
+
AbstractController::Callbacks::ClassMethods.public_instance_methods.
|
|
151
|
+
select { |m| m.match(/_action\z/) }.each do |name|
|
|
152
|
+
define_method name do |*args, &block|
|
|
153
|
+
ActiveSupport.on_load(:active_admin_controller) do
|
|
154
|
+
public_send name, *args, &block
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def controllers_for_filters
|
|
160
|
+
controllers = [BaseController]
|
|
161
|
+
controllers.push *Devise.controllers_for_filters if Dependency.devise?
|
|
162
|
+
controllers
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
private
|
|
166
|
+
|
|
167
|
+
def register_default_assets
|
|
168
|
+
register_stylesheet "active_admin.css", media: "all"
|
|
169
|
+
register_javascript "active_admin.js"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Since app/admin is alphabetically before app/models, we have to remove it
|
|
173
|
+
# from the host app's +autoload_paths+ to prevent missing constant errors.
|
|
174
|
+
#
|
|
175
|
+
# As well, we have to remove it from +eager_load_paths+ to prevent the
|
|
176
|
+
# files from being loaded twice in production.
|
|
177
|
+
def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
178
|
+
ActiveSupport::Dependencies.autoload_paths -= load_paths
|
|
179
|
+
Rails.application.config.eager_load_paths -= load_paths
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Hook into the Rails code reloading mechanism so that things are reloaded
|
|
183
|
+
# properly in development mode.
|
|
184
|
+
#
|
|
185
|
+
# If any of the app files (e.g. models) has changed, we need to reload all
|
|
186
|
+
# the admin files. If the admin files themselves has changed, we need to
|
|
187
|
+
# regenerate the routes as well.
|
|
188
|
+
def attach_reloader
|
|
189
|
+
Rails.application.config.after_initialize do |app|
|
|
190
|
+
unload_active_admin = -> { ActiveAdmin.application.unload! }
|
|
191
|
+
|
|
192
|
+
if app.config.reload_classes_only_on_change
|
|
193
|
+
# Rails is about to unload all the app files (e.g. models), so we
|
|
194
|
+
# should first unload the classes generated by Active Admin, otherwise
|
|
195
|
+
# they will contain references to the stale (unloaded) classes.
|
|
196
|
+
ActiveSupport::Reloader.to_prepare(prepend: true, &unload_active_admin)
|
|
197
|
+
else
|
|
198
|
+
# If the user has configured the app to always reload app files after
|
|
199
|
+
# each request, so we should unload the generated classes too.
|
|
200
|
+
ActiveSupport::Reloader.to_complete(&unload_active_admin)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
admin_dirs = {}
|
|
204
|
+
|
|
205
|
+
load_paths.each do |path|
|
|
206
|
+
admin_dirs[path] = [:rb]
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
routes_reloader = app.config.file_watcher.new([], admin_dirs) do
|
|
210
|
+
app.reload_routes!
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
app.reloaders << routes_reloader
|
|
214
|
+
|
|
215
|
+
ActiveSupport::Reloader.to_prepare do
|
|
216
|
+
# Rails might have reloaded the routes for other reasons (e.g.
|
|
217
|
+
# routes.rb has changed), in which case Active Admin would have been
|
|
218
|
+
# loaded via the `ActiveAdmin.routes` call in `routes.rb`.
|
|
219
|
+
#
|
|
220
|
+
# Otherwise, we should check if any of the admin files are changed
|
|
221
|
+
# and force the routes to reload if necessary. This would again causes
|
|
222
|
+
# Active Admin to load via `ActiveAdmin.routes`.
|
|
223
|
+
#
|
|
224
|
+
# Finally, if Active Admin is still not loaded at this point, then we
|
|
225
|
+
# would need to load it manually.
|
|
226
|
+
unless ActiveAdmin.application.loaded?
|
|
227
|
+
routes_reloader.execute_if_updated
|
|
228
|
+
ActiveAdmin.application.load!
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/settings_node"
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
class ApplicationSettings < SettingsNode
|
|
6
|
+
|
|
7
|
+
# The default namespace to put controllers and routes inside. Set this
|
|
8
|
+
# in config/initializers/active_admin.rb using:
|
|
9
|
+
#
|
|
10
|
+
# config.default_namespace = :super_admin
|
|
11
|
+
#
|
|
12
|
+
register :default_namespace, :admin
|
|
13
|
+
|
|
14
|
+
register :app_path, Rails.root
|
|
15
|
+
|
|
16
|
+
# Load paths for admin configurations. Add folders to this load path
|
|
17
|
+
# to load up other resources for administration. External gems can
|
|
18
|
+
# include their paths in this load path to provide active_admin UIs
|
|
19
|
+
register :load_paths, [File.expand_path("app/admin", Rails.root)]
|
|
20
|
+
|
|
21
|
+
# Set default localize format for Date/Time values
|
|
22
|
+
register :localize_format, :long
|
|
23
|
+
|
|
24
|
+
# Active Admin makes educated guesses when displaying objects, this is
|
|
25
|
+
# the list of methods it tries calling in order
|
|
26
|
+
# Note that Formtastic also has 'collection_label_methods' similar to this
|
|
27
|
+
# used by auto generated dropdowns in filter or belongs_to field of Active Admin
|
|
28
|
+
register :display_name_methods, [ :display_name,
|
|
29
|
+
:full_name,
|
|
30
|
+
:name,
|
|
31
|
+
:username,
|
|
32
|
+
:login,
|
|
33
|
+
:title,
|
|
34
|
+
:email,
|
|
35
|
+
:to_s ]
|
|
36
|
+
|
|
37
|
+
# To make debugging easier, by default don't stream in development
|
|
38
|
+
register :disable_streaming_in, ["development"]
|
|
39
|
+
|
|
40
|
+
# Remove sensitive attributes from being displayed, made editable, or exported by default
|
|
41
|
+
register :filter_attributes, [:encrypted_password, :password, :password_confirmation]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module AssetRegistration
|
|
4
|
+
|
|
5
|
+
def register_stylesheet(path, options = {})
|
|
6
|
+
stylesheets[path] = options
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def stylesheets
|
|
10
|
+
@stylesheets ||= {}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def clear_stylesheets!
|
|
14
|
+
stylesheets.clear
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def register_javascript(path, options = {})
|
|
18
|
+
javascripts[path] = options
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def javascripts
|
|
22
|
+
@javascripts ||= {}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def clear_javascripts!
|
|
26
|
+
javascripts.clear
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# Default Authorization permissions for Active Admin
|
|
5
|
+
module Authorization
|
|
6
|
+
READ = :read
|
|
7
|
+
NEW = :new
|
|
8
|
+
CREATE = :create
|
|
9
|
+
EDIT = :edit
|
|
10
|
+
UPDATE = :update
|
|
11
|
+
DESTROY = :destroy
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Auth = Authorization
|
|
15
|
+
|
|
16
|
+
# Active Admin's default authorization adapter. This adapter returns true
|
|
17
|
+
# for all requests to `#authorized?`. It should be the starting point for
|
|
18
|
+
# implementing your own authorization adapter.
|
|
19
|
+
#
|
|
20
|
+
# To view an example subclass, check out `ActiveAdmin::CanCanAdapter`
|
|
21
|
+
class AuthorizationAdapter
|
|
22
|
+
attr_reader :resource, :user
|
|
23
|
+
|
|
24
|
+
# Initialize a new authorization adapter. This happens on each and
|
|
25
|
+
# every request to a controller.
|
|
26
|
+
#
|
|
27
|
+
# @param [ActiveAdmin::Resource, ActiveAdmin::Page] resource The resource
|
|
28
|
+
# that the user is currently on. Note, we may be authorizing access
|
|
29
|
+
# to a different subject, so don't rely on this other than to
|
|
30
|
+
# pull configuration information from.
|
|
31
|
+
#
|
|
32
|
+
# @param [any] user The current user. The user is set to whatever is returned
|
|
33
|
+
# from `#current_active_admin_user` in the controller.
|
|
34
|
+
#
|
|
35
|
+
def initialize(resource, user)
|
|
36
|
+
@resource = resource
|
|
37
|
+
@user = user
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Returns true of false depending on if the user is authorized to perform
|
|
41
|
+
# the action on the subject.
|
|
42
|
+
#
|
|
43
|
+
# @param [Symbol] action The name of the action to perform. Usually this will be
|
|
44
|
+
# one of the `ActiveAdmin::Auth::*` symbols.
|
|
45
|
+
#
|
|
46
|
+
# @param [any] subject The subject the action is being performed on usually this
|
|
47
|
+
# is a model object. Note, that this is NOT always in instance, it can be
|
|
48
|
+
# the class of the subject also. For example, Active Admin uses the class
|
|
49
|
+
# of the resource to decide if the resource should be displayed in the
|
|
50
|
+
# global navigation. To deal with this nicely in a case statement, take
|
|
51
|
+
# a look at `#normalized(klass)`
|
|
52
|
+
#
|
|
53
|
+
# @return [Boolean]
|
|
54
|
+
def authorized?(action, subject = nil)
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# A hook method for authorization libraries to scope the collection. By
|
|
59
|
+
# default, we just return the same collection. The returned scope is used
|
|
60
|
+
# as the starting point for all queries to the db in the controller.
|
|
61
|
+
#
|
|
62
|
+
# @param [ActiveRecord::Relation] collection The collection the user is
|
|
63
|
+
# attempting to view.
|
|
64
|
+
#
|
|
65
|
+
# @param [Symbol] action The name of the action to perform. Usually this will be
|
|
66
|
+
# one of the `ActiveAdmin::Auth::*` symbols. Defaults to `Auth::READ` if
|
|
67
|
+
# no action passed in.
|
|
68
|
+
#
|
|
69
|
+
# @return [ActiveRecord::Relation] A new collection, scoped to the
|
|
70
|
+
# objects that the current user has access to.
|
|
71
|
+
def scope_collection(collection, action = Auth::READ)
|
|
72
|
+
collection
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
# The `#authorized?` method's subject can be set to both instances as well
|
|
78
|
+
# as classes of objects. This can make it much difficult to create simple
|
|
79
|
+
# case statements for authorization since you have to handle both the
|
|
80
|
+
# class level match and the instance level match.
|
|
81
|
+
#
|
|
82
|
+
# For example:
|
|
83
|
+
#
|
|
84
|
+
# class MyAuthAdapter < ActiveAdmin::AuthorizationAdapter
|
|
85
|
+
#
|
|
86
|
+
# def authorized?(action, subject = nil)
|
|
87
|
+
# case subject
|
|
88
|
+
# when Post
|
|
89
|
+
# true
|
|
90
|
+
# when Class
|
|
91
|
+
# if subject == Post
|
|
92
|
+
# true
|
|
93
|
+
# end
|
|
94
|
+
# end
|
|
95
|
+
# end
|
|
96
|
+
#
|
|
97
|
+
# end
|
|
98
|
+
#
|
|
99
|
+
# To handle this, the normalized method takes care of returning a object
|
|
100
|
+
# which implements `===` to be matched in a case statement.
|
|
101
|
+
#
|
|
102
|
+
# The above now becomes:
|
|
103
|
+
#
|
|
104
|
+
# class MyAuthAdapter < ActiveAdmin::AuthorizationAdapter
|
|
105
|
+
#
|
|
106
|
+
# def authorized?(action, subject = nil)
|
|
107
|
+
# case subject
|
|
108
|
+
# when normalized(Post)
|
|
109
|
+
# true
|
|
110
|
+
# end
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
# end
|
|
114
|
+
def normalized(klass)
|
|
115
|
+
NormalizedMatcher.new(klass)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
class NormalizedMatcher
|
|
119
|
+
|
|
120
|
+
def initialize(klass)
|
|
121
|
+
@klass = klass
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def ===(other)
|
|
125
|
+
@klass == other || other.is_a?(@klass)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
class BaseController < ::InheritedResources::Base
|
|
4
|
+
module Authorization
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
ACTIONS_DICTIONARY = {
|
|
8
|
+
index: ActiveAdmin::Authorization::READ,
|
|
9
|
+
show: ActiveAdmin::Authorization::READ,
|
|
10
|
+
new: ActiveAdmin::Authorization::NEW,
|
|
11
|
+
create: ActiveAdmin::Authorization::CREATE,
|
|
12
|
+
edit: ActiveAdmin::Authorization::EDIT,
|
|
13
|
+
update: ActiveAdmin::Authorization::UPDATE,
|
|
14
|
+
destroy: ActiveAdmin::Authorization::DESTROY
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
included do
|
|
18
|
+
rescue_from ActiveAdmin::AccessDenied, with: :dispatch_active_admin_access_denied
|
|
19
|
+
|
|
20
|
+
helper_method :authorized?
|
|
21
|
+
helper_method :authorize!
|
|
22
|
+
helper_method :active_admin_authorization
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
|
|
27
|
+
# Authorize the action and subject. Available in the controller
|
|
28
|
+
# as well as all the views.
|
|
29
|
+
#
|
|
30
|
+
# @param [Symbol] action The action to check if the user has permission
|
|
31
|
+
# to perform on the subject.
|
|
32
|
+
#
|
|
33
|
+
# @param [any] subject The subject that the user is trying to perform
|
|
34
|
+
# the action on.
|
|
35
|
+
#
|
|
36
|
+
# @return [Boolean]
|
|
37
|
+
#
|
|
38
|
+
def authorized?(action, subject = nil)
|
|
39
|
+
active_admin_authorization.authorized?(action, subject)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Authorize the action and subject. Available in the controller
|
|
43
|
+
# as well as all the views. If the action is not allowd, it raises
|
|
44
|
+
# an ActiveAdmin::AccessDenied exception.
|
|
45
|
+
#
|
|
46
|
+
# @param [Symbol] action The action to check if the user has permission
|
|
47
|
+
# to perform on the subject.
|
|
48
|
+
#
|
|
49
|
+
# @param [any] subject The subject that the user is trying to perform
|
|
50
|
+
# the action on.
|
|
51
|
+
#
|
|
52
|
+
# @return [Boolean] True if authorized, otherwise raises
|
|
53
|
+
# an ActiveAdmin::AccessDenied.
|
|
54
|
+
def authorize!(action, subject = nil)
|
|
55
|
+
unless authorized? action, subject
|
|
56
|
+
raise ActiveAdmin::AccessDenied.new(
|
|
57
|
+
current_active_admin_user,
|
|
58
|
+
action,
|
|
59
|
+
subject)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Performs authorization on the resource using the current controller
|
|
64
|
+
# action as the permission action.
|
|
65
|
+
#
|
|
66
|
+
def authorize_resource!(resource)
|
|
67
|
+
permission = action_to_permission(params[:action])
|
|
68
|
+
authorize! permission, resource
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Retrieve or instantiate the authorization instance for this resource
|
|
72
|
+
#
|
|
73
|
+
# @return [ActiveAdmin::AuthorizationAdapter]
|
|
74
|
+
def active_admin_authorization
|
|
75
|
+
@active_admin_authorization ||=
|
|
76
|
+
active_admin_authorization_adapter.new active_admin_config, current_active_admin_user
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Returns the class to be used as the authorization adapter
|
|
80
|
+
#
|
|
81
|
+
# @return [Class]
|
|
82
|
+
def active_admin_authorization_adapter
|
|
83
|
+
adapter = active_admin_namespace.authorization_adapter
|
|
84
|
+
if adapter.is_a? String
|
|
85
|
+
adapter.constantize
|
|
86
|
+
else
|
|
87
|
+
adapter
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Converts a controller action into one of the correct Active Admin
|
|
92
|
+
# authorization names. Uses the ACTIONS_DICTIONARY to convert the
|
|
93
|
+
# action name to permission.
|
|
94
|
+
#
|
|
95
|
+
# @param [String, Symbol] action The controller action name.
|
|
96
|
+
#
|
|
97
|
+
# @return [Symbol] The permission name to use.
|
|
98
|
+
def action_to_permission(action)
|
|
99
|
+
if action && action = action.to_sym
|
|
100
|
+
Authorization::ACTIONS_DICTIONARY[action] || action
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def dispatch_active_admin_access_denied(exception)
|
|
105
|
+
instance_exec(self, exception, &active_admin_namespace.on_unauthorized_access.to_proc)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def rescue_active_admin_access_denied(exception)
|
|
109
|
+
error = exception.message
|
|
110
|
+
|
|
111
|
+
respond_to do |format|
|
|
112
|
+
format.html do
|
|
113
|
+
flash[:error] = error
|
|
114
|
+
redirect_backwards_or_to_root
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
format.csv { render body: error, status: :unauthorized }
|
|
118
|
+
format.json { render json: { error: error }, status: :unauthorized }
|
|
119
|
+
format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def redirect_backwards_or_to_root
|
|
124
|
+
redirect_back fallback_location: active_admin_root
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
class BaseController < ::InheritedResources::Base
|
|
4
|
+
module Menu
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
before_action :set_current_tab
|
|
9
|
+
helper_method :current_menu
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
protected
|
|
13
|
+
|
|
14
|
+
def current_menu
|
|
15
|
+
active_admin_config.navigation_menu
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Set's @current_tab to be name of the tab to mark as current
|
|
19
|
+
# Get's called through a before filter
|
|
20
|
+
def set_current_tab
|
|
21
|
+
@current_tab = if current_menu && active_admin_config.belongs_to? && parent?
|
|
22
|
+
parent_item = active_admin_config.belongs_to_config.target.menu_item
|
|
23
|
+
if current_menu.include? parent_item
|
|
24
|
+
parent_item
|
|
25
|
+
else
|
|
26
|
+
active_admin_config.menu_item
|
|
27
|
+
end
|
|
28
|
+
else
|
|
29
|
+
active_admin_config.menu_item
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/base_controller/authorization"
|
|
3
|
+
require "active_admin/base_controller/menu"
|
|
4
|
+
|
|
5
|
+
module ActiveAdmin
|
|
6
|
+
# BaseController for ActiveAdmin.
|
|
7
|
+
# It implements ActiveAdmin controllers core features.
|
|
8
|
+
class BaseController < ::InheritedResources::Base
|
|
9
|
+
helper ::ActiveAdmin::ViewHelpers
|
|
10
|
+
|
|
11
|
+
layout :determine_active_admin_layout
|
|
12
|
+
|
|
13
|
+
before_action :only_render_implemented_actions
|
|
14
|
+
before_action :authenticate_active_admin_user
|
|
15
|
+
|
|
16
|
+
class << self
|
|
17
|
+
# Ensure that this method is available for the DSL
|
|
18
|
+
public :actions
|
|
19
|
+
|
|
20
|
+
# Reference to the Resource object which initialized
|
|
21
|
+
# this controller
|
|
22
|
+
attr_accessor :active_admin_config
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
include Authorization
|
|
26
|
+
include Menu
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# By default Rails will render un-implemented actions when the view exists. Because Active
|
|
31
|
+
# Admin allows you to not render any of the actions by using the #actions method, we need
|
|
32
|
+
# to check if they are implemented.
|
|
33
|
+
def only_render_implemented_actions
|
|
34
|
+
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Calls the authentication method as defined in ActiveAdmin.authentication_method
|
|
38
|
+
def authenticate_active_admin_user
|
|
39
|
+
send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def current_active_admin_user
|
|
43
|
+
send(active_admin_namespace.current_user_method) if active_admin_namespace.current_user_method
|
|
44
|
+
end
|
|
45
|
+
helper_method :current_active_admin_user
|
|
46
|
+
|
|
47
|
+
def current_active_admin_user?
|
|
48
|
+
!!current_active_admin_user
|
|
49
|
+
end
|
|
50
|
+
helper_method :current_active_admin_user?
|
|
51
|
+
|
|
52
|
+
def active_admin_config
|
|
53
|
+
self.class.active_admin_config
|
|
54
|
+
end
|
|
55
|
+
helper_method :active_admin_config
|
|
56
|
+
|
|
57
|
+
def active_admin_namespace
|
|
58
|
+
active_admin_config.namespace
|
|
59
|
+
end
|
|
60
|
+
helper_method :active_admin_namespace
|
|
61
|
+
|
|
62
|
+
ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
|
|
63
|
+
|
|
64
|
+
# Determine which layout to use.
|
|
65
|
+
#
|
|
66
|
+
# 1. If we're rendering a standard Active Admin action, we want layout(false)
|
|
67
|
+
# because these actions are subclasses of the Base page (which implements
|
|
68
|
+
# all the required layout code)
|
|
69
|
+
# 2. If we're rendering a custom action, we'll use the active_admin layout so
|
|
70
|
+
# that users can render any template inside Active Admin.
|
|
71
|
+
def determine_active_admin_layout
|
|
72
|
+
ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : "active_admin"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def active_admin_root
|
|
76
|
+
controller, action = active_admin_namespace.root_to.split "#"
|
|
77
|
+
{ controller: controller, action: action }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
81
|
+
end
|
|
82
|
+
end
|