hyper-max-sys 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/hyper-max-sys.gemspec +12 -0
- data/rails_admin-3.3.0/Gemfile +56 -0
- data/rails_admin-3.3.0/LICENSE.md +20 -0
- data/rails_admin-3.3.0/README.md +105 -0
- data/rails_admin-3.3.0/Rakefile +37 -0
- data/rails_admin-3.3.0/app/assets/javascripts/rails_admin/application.js.erb +30 -0
- data/rails_admin-3.3.0/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
- data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/application.scss.erb +35 -0
- data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/mixins.scss +11 -0
- data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/theming.scss +13 -0
- data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/variables.scss +15 -0
- data/rails_admin-3.3.0/app/controllers/rails_admin/application_controller.rb +84 -0
- data/rails_admin-3.3.0/app/controllers/rails_admin/main_controller.rb +153 -0
- data/rails_admin-3.3.0/app/helpers/rails_admin/application_helper.rb +264 -0
- data/rails_admin-3.3.0/app/helpers/rails_admin/form_builder.rb +157 -0
- data/rails_admin-3.3.0/app/helpers/rails_admin/main_helper.rb +61 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +5 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +15 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +8 -0
- data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/_head.html.erb +32 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/_navigation.html.erb +17 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/_secondary_navigation.html.erb +26 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +5 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/application.html.erb +27 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/content.html.erb +22 -0
- data/rails_admin-3.3.0/app/views/layouts/rails_admin/modal.js.erb +7 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_dashboard_history.html.erb +45 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_delete_notice.html.erb +35 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_action_text.html.erb +8 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_boolean.html.erb +14 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_ck_editor.html.erb +10 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_code_mirror.html.erb +9 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_colorpicker.html.erb +5 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_datetime.html.erb +10 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_enumeration.html.erb +25 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_field.html.erb +1 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_file_upload.html.erb +17 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +19 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_filtering_select.html.erb +21 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_froala.html.erb +8 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +20 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_nested_many.html.erb +21 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_nested_one.html.erb +21 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_polymorphic_association.html.erb +23 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_simple_mde.html.erb +8 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_text.html.erb +1 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_form_wysihtml5.html.erb +8 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/bulk_delete.html.erb +19 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/dashboard.html.erb +64 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/delete.html.erb +21 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/edit.html.erb +3 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/export.html.erb +149 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/history.html.erb +80 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/index.html.erb +184 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/new.html.erb +3 -0
- data/rails_admin-3.3.0/app/views/rails_admin/main/show.html.erb +30 -0
- data/rails_admin-3.3.0/config/initializers/active_record_extensions.rb +23 -0
- data/rails_admin-3.3.0/config/initializers/mongoid_extensions.rb +6 -0
- data/rails_admin-3.3.0/config/locales/rails_admin.en.yml +158 -0
- data/rails_admin-3.3.0/config/routes.rb +14 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/importmap_formatter.rb +28 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/install_generator.rb +142 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/templates/initializer.erb +42 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.js +1 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.webpacker.js +2 -0
- data/rails_admin-3.3.0/lib/generators/rails_admin/utils.rb +21 -0
- data/rails_admin-3.3.0/lib/rails_admin/abstract_model.rb +275 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/association.rb +130 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/object_extension.rb +13 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/property.rb +58 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record.rb +367 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record.rb.bak +348 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/association.rb +161 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/bson.rb +31 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/extension.rb +49 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/object_extension.rb +29 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/property.rb +101 -0
- data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid.rb +312 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/base.rb +162 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/bulk_delete.rb +67 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/dashboard.rb +62 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/delete.rb +58 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/edit.rb +56 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/export.rb +41 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/history_index.rb +40 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/history_show.rb +40 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/index.rb +98 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/new.rb +69 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/show.rb +36 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions/show_in_app.rb +37 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/actions.rb +122 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/configurable.rb +107 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/const_load_suppressor.rb +78 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/association.rb +168 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/base.rb +391 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/collection_association.rb +90 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/action_text.rb +14 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/active_storage.rb +34 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/association.rb +32 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/carrierwave.rb +30 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/devise.rb +28 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/dragonfly.rb +28 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/enum.rb +23 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/paperclip.rb +29 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/password.rb +19 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/shrine.rb +29 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/group.rb +77 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/singular_association.rb +59 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/action_text.rb +36 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/active_record_enum.rb +62 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/active_storage.rb +70 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/all.rb +43 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/belongs_to_association.rb +48 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/boolean.rb +70 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/carrierwave.rb +34 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/citext.rb +15 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/ck_editor.rb +40 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/code_mirror.rb +48 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/color.rb +43 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/date.rb +41 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/datetime.rb +96 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/decimal.rb +23 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/dragonfly.rb +44 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/enum.rb +52 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/file_upload.rb +87 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/float.rb +23 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/froala.rb +37 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +16 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_many_association.rb +16 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_one_association.rb +35 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/hidden.rb +31 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/inet.rb +15 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/integer.rb +20 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/json.rb +37 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_active_storage.rb +82 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +59 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_file_upload.rb +134 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/numeric.rb +24 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/paperclip.rb +30 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/password.rb +45 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/polymorphic_association.rb +118 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/serialized.rb +28 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/shrine.rb +56 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/simple_mde.rb +38 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/string.rb +50 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/string_like.rb +25 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/text.rb +28 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/time.rb +36 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/timestamp.rb +16 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/uuid.rb +15 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/wysihtml5.rb +43 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields/types.rb +29 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/fields.rb +92 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/groupable.rb +20 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/has_description.rb +14 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/has_fields.rb +144 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/has_groups.rb +27 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/hideable.rb +30 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/inspectable.rb +39 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/lazy_model.rb +74 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/model.rb +120 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/proxyable/proxy.rb +39 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/proxyable.rb +26 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/base.rb +36 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/create.rb +13 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/edit.rb +13 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/export.rb +13 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/list.rb +63 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/modal.rb +12 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/nested.rb +12 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/show.rb +12 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections/update.rb +12 -0
- data/rails_admin-3.3.0/lib/rails_admin/config/sections.rb +39 -0
- data/rails_admin-3.3.0/lib/rails_admin/config.rb +403 -0
- data/rails_admin-3.3.0/lib/rails_admin/engine.rb +84 -0
- data/rails_admin-3.3.0/lib/rails_admin/extension.rb +35 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +90 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/cancancan.rb +5 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/controller_extension.rb +8 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +187 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/paper_trail.rb +5 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/pundit/authorization_adapter.rb +72 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/pundit.rb +5 -0
- data/rails_admin-3.3.0/lib/rails_admin/extensions/url_for_extension.rb +15 -0
- data/rails_admin-3.3.0/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
- data/rails_admin-3.3.0/lib/rails_admin/support/csv_converter.rb +107 -0
- data/rails_admin-3.3.0/lib/rails_admin/support/datetime.rb +66 -0
- data/rails_admin-3.3.0/lib/rails_admin/support/es_module_processor.rb +23 -0
- data/rails_admin-3.3.0/lib/rails_admin/support/hash_helper.rb +31 -0
- data/rails_admin-3.3.0/lib/rails_admin/version.rb +54 -0
- data/rails_admin-3.3.0/lib/rails_admin.rb +62 -0
- data/rails_admin-3.3.0/lib/tasks/rails_admin.rake +47 -0
- data/rails_admin-3.3.0/package.json +30 -0
- data/rails_admin-3.3.0/src/rails_admin/abstract-select.js +30 -0
- data/rails_admin-3.3.0/src/rails_admin/base.js +32 -0
- data/rails_admin-3.3.0/src/rails_admin/filter-box.js +360 -0
- data/rails_admin-3.3.0/src/rails_admin/filtering-multiselect.js +387 -0
- data/rails_admin-3.3.0/src/rails_admin/filtering-select.js +306 -0
- data/rails_admin-3.3.0/src/rails_admin/i18n.js +18 -0
- data/rails_admin-3.3.0/src/rails_admin/jquery.js +3 -0
- data/rails_admin-3.3.0/src/rails_admin/nested-form-hooks.js +110 -0
- data/rails_admin-3.3.0/src/rails_admin/remote-form.js +193 -0
- data/rails_admin-3.3.0/src/rails_admin/sidescroll.js +20 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/base/README.txt +2 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/base/mixins.scss +1 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/base/theming.scss +342 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/base/variables.scss +3 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/base.scss +27 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/filtering-multiselect.scss +53 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/filtering-select.scss +70 -0
- data/rails_admin-3.3.0/src/rails_admin/styles/widgets.scss +26 -0
- data/rails_admin-3.3.0/src/rails_admin/ui.js +176 -0
- data/rails_admin-3.3.0/src/rails_admin/vendor/jquery_nested_form.js +122 -0
- data/rails_admin-3.3.0/src/rails_admin/widgets.js +507 -0
- data/rails_admin-3.3.0/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
- data/rails_admin-3.3.0/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/bootstrap.js +5046 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +11246 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +41 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +1637 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +17 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +47 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +500 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +42 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +47 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +51 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +17 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +735 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +689 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +680 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +230 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +1561 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery3.js +10881 -0
- data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/popper.js +1974 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +118 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +57 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +29 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +28 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +139 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +111 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +216 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +229 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +40 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +41 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +240 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +9 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +302 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +33 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +9 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +42 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +174 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +43 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +209 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +139 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +335 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +83 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +64 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +51 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +158 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +48 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +625 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +54 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +69 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +155 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +51 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +115 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +27 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +104 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +630 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +1641 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +53 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +63 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +152 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +219 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +91 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +72 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +11 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +121 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +36 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +12 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +3 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +12 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +30 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +26 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +15 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +15 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +7 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +8 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +11 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +14 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +78 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +18 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +127 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +133 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +64 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +9 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +7 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +9 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +10 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +144 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +47 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +151 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +16 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +24 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +7 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +31 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +17 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +6 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +21 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss +8 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +26 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +89 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +29 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +47 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +354 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/flatpickr.css +791 -0
- data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/font-awesome.scss +6351 -0
- metadata +368 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/core_ext/string/strip'
|
|
4
|
+
|
|
5
|
+
module RailsAdmin
|
|
6
|
+
module Extensions
|
|
7
|
+
module PaperTrail
|
|
8
|
+
class VersionProxy
|
|
9
|
+
def initialize(version, user_class = User)
|
|
10
|
+
@version = version
|
|
11
|
+
@user_class = user_class
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def message
|
|
15
|
+
@message = @version.event
|
|
16
|
+
@version.respond_to?(:changeset) && @version.changeset.present? ? @message + ' [' + @version.changeset.to_a.collect { |c| "#{c[0]} = #{c[1][1]}" }.join(', ') + ']' : @message
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def created_at
|
|
20
|
+
@version.created_at
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def table
|
|
24
|
+
@version.item_type
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def username
|
|
28
|
+
begin
|
|
29
|
+
@user_class.find(@version.whodunnit).try(:email)
|
|
30
|
+
rescue StandardError
|
|
31
|
+
nil
|
|
32
|
+
end || @version.whodunnit
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def item
|
|
36
|
+
@version.item_id
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module ControllerExtension
|
|
41
|
+
def user_for_paper_trail
|
|
42
|
+
_current_user.try(:id) || _current_user
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class AuditingAdapter
|
|
47
|
+
COLUMN_MAPPING = {
|
|
48
|
+
table: :item_type,
|
|
49
|
+
username: :whodunnit,
|
|
50
|
+
item: :item_id,
|
|
51
|
+
created_at: :created_at,
|
|
52
|
+
message: :event,
|
|
53
|
+
}.freeze
|
|
54
|
+
E_USER_CLASS_NOT_SET = <<~ERROR
|
|
55
|
+
Please set up PaperTrail's user class explicitly.
|
|
56
|
+
|
|
57
|
+
config.audit_with :paper_trail do
|
|
58
|
+
user_class { User }
|
|
59
|
+
end
|
|
60
|
+
ERROR
|
|
61
|
+
E_VERSION_MODEL_NOT_SET = <<~ERROR
|
|
62
|
+
Please set up PaperTrail's version model explicitly.
|
|
63
|
+
|
|
64
|
+
config.audit_with :paper_trail do
|
|
65
|
+
version_class { PaperTrail::Version }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
If you have configured a model to use a custom version class
|
|
69
|
+
(https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
|
|
70
|
+
that configuration will take precedence over what you specify in `audit_with`.
|
|
71
|
+
ERROR
|
|
72
|
+
|
|
73
|
+
include RailsAdmin::Config::Configurable
|
|
74
|
+
|
|
75
|
+
def self.setup
|
|
76
|
+
raise 'PaperTrail not found' unless defined?(::PaperTrail)
|
|
77
|
+
|
|
78
|
+
RailsAdmin::Extensions::ControllerExtension.include ControllerExtension
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def initialize(controller, user_class_name = nil, version_class_name = nil, &block)
|
|
82
|
+
@controller = controller
|
|
83
|
+
@controller&.send(:set_paper_trail_whodunnit)
|
|
84
|
+
|
|
85
|
+
user_class { user_class_name.to_s.constantize } if user_class_name
|
|
86
|
+
version_class { version_class_name.to_s.constantize } if version_class_name
|
|
87
|
+
|
|
88
|
+
instance_eval(&block) if block
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
register_instance_option :user_class do
|
|
92
|
+
User
|
|
93
|
+
rescue NameError
|
|
94
|
+
raise E_USER_CLASS_NOT_SET
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
register_instance_option :version_class do
|
|
98
|
+
PaperTrail::Version
|
|
99
|
+
rescue NameError
|
|
100
|
+
raise E_VERSION_MODEL_NOT_SET
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
register_instance_option :sort_by do
|
|
104
|
+
{id: :desc}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def latest(count = 100)
|
|
108
|
+
version_class.
|
|
109
|
+
order(sort_by).includes(:item).limit(count).
|
|
110
|
+
collect { |version| VersionProxy.new(version, user_class) }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def delete_object(_object, _model, _user)
|
|
114
|
+
# do nothing
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def update_object(_object, _model, _user, _changes)
|
|
118
|
+
# do nothing
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def create_object(_object, _abstract_model, _user)
|
|
122
|
+
# do nothing
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def listing_for_model(model, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20))
|
|
126
|
+
listing_for_model_or_object(model, nil, query, sort, sort_reverse, all, page, per_page)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def listing_for_object(model, object, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20))
|
|
130
|
+
listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
protected
|
|
134
|
+
|
|
135
|
+
# - model - a RailsAdmin::AbstractModel
|
|
136
|
+
def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
|
|
137
|
+
sort =
|
|
138
|
+
if sort.present?
|
|
139
|
+
{COLUMN_MAPPING[sort.to_sym] => sort_reverse ? :desc : :asc}
|
|
140
|
+
else
|
|
141
|
+
sort_by
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
current_page = page.presence || '1'
|
|
145
|
+
|
|
146
|
+
versions = object.nil? ? versions_for_model(model) : object.public_send(model.model.versions_association_name)
|
|
147
|
+
versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
|
|
148
|
+
versions = versions.order(sort)
|
|
149
|
+
versions = versions.send(Kaminari.config.page_method_name, current_page).per(per_page) unless all
|
|
150
|
+
paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
|
|
151
|
+
paginated_proxies = paginated_proxies.send(
|
|
152
|
+
paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
|
|
153
|
+
current_page,
|
|
154
|
+
).per(per_page)
|
|
155
|
+
versions.each do |version|
|
|
156
|
+
paginated_proxies << VersionProxy.new(version, user_class)
|
|
157
|
+
end
|
|
158
|
+
paginated_proxies
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def versions_for_model(model)
|
|
162
|
+
model_name = model.model.name
|
|
163
|
+
base_class_name = model.model.base_class.name
|
|
164
|
+
|
|
165
|
+
options =
|
|
166
|
+
if base_class_name == model_name
|
|
167
|
+
{item_type: model_name}
|
|
168
|
+
else
|
|
169
|
+
{item_type: base_class_name, item_id: model.model.all}
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
version_class_for(model.model).where(options)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# PT can be configured to use [custom version
|
|
176
|
+
# classes](https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
|
|
177
|
+
#
|
|
178
|
+
# ```ruby
|
|
179
|
+
# has_paper_trail versions: { class_name: 'MyVersion' }
|
|
180
|
+
# ```
|
|
181
|
+
def version_class_for(model)
|
|
182
|
+
model.paper_trail.version_class
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module Extensions
|
|
5
|
+
module Pundit
|
|
6
|
+
# This adapter is for the Pundit[https://github.com/elabs/pundit] authorization library.
|
|
7
|
+
# You can create another adapter for different authorization behavior, just be certain it
|
|
8
|
+
# responds to each of the public methods here.
|
|
9
|
+
class AuthorizationAdapter
|
|
10
|
+
# This method is called first time only and used for setup
|
|
11
|
+
def self.setup
|
|
12
|
+
RailsAdmin::Extensions::ControllerExtension.include defined?(::Pundit::Authorization) ? ::Pundit::Authorization : ::Pundit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# See the +authorize_with+ config method for where the initialization happens.
|
|
16
|
+
def initialize(controller)
|
|
17
|
+
@controller = controller
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# This method is called in every controller action and should raise an exception
|
|
21
|
+
# when the authorization fails. The first argument is the name of the controller
|
|
22
|
+
# action as a symbol (:create, :bulk_delete, etc.). The second argument is the
|
|
23
|
+
# AbstractModel instance that applies. The third argument is the actual model
|
|
24
|
+
# instance if it is available.
|
|
25
|
+
def authorize(action, abstract_model = nil, model_object = nil)
|
|
26
|
+
record = model_object || abstract_model&.model
|
|
27
|
+
raise ::Pundit::NotAuthorizedError.new("not allowed to #{action} this #{record}") if action && !policy(record).send(action_for_pundit(action))
|
|
28
|
+
|
|
29
|
+
@controller.instance_variable_set(:@_pundit_policy_authorized, true)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# This method is called primarily from the view to determine whether the given user
|
|
33
|
+
# has access to perform the action on a given model. It should return true when authorized.
|
|
34
|
+
# This takes the same arguments as +authorize+. The difference is that this will
|
|
35
|
+
# return a boolean whereas +authorize+ will raise an exception when not authorized.
|
|
36
|
+
def authorized?(action, abstract_model = nil, model_object = nil)
|
|
37
|
+
record = model_object || abstract_model&.model
|
|
38
|
+
policy(record).send(action_for_pundit(action)) if action
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# This is called when needing to scope a database query. It is called within the list
|
|
42
|
+
# and bulk_delete/destroy actions and should return a scope which limits the records
|
|
43
|
+
# to those which the user can perform the given action on.
|
|
44
|
+
def query(_action, abstract_model)
|
|
45
|
+
@controller.send(:policy_scope, abstract_model.model.all)
|
|
46
|
+
rescue ::Pundit::NotDefinedError
|
|
47
|
+
abstract_model.model.all
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# This is called in the new/create actions to determine the initial attributes for new
|
|
51
|
+
# records. It should return a hash of attributes which match what the user
|
|
52
|
+
# is authorized to create.
|
|
53
|
+
def attributes_for(action, abstract_model)
|
|
54
|
+
record = abstract_model&.model
|
|
55
|
+
policy(record).try(:attributes_for, action) || {}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def policy(record)
|
|
61
|
+
@controller.send(:policy, record)
|
|
62
|
+
rescue ::Pundit::NotDefinedError
|
|
63
|
+
::ApplicationPolicy.new(@controller.send(:pundit_user), record)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def action_for_pundit(action)
|
|
67
|
+
action[-1, 1] == '?' ? action : "#{action}?"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module Extensions
|
|
5
|
+
module UrlForExtension
|
|
6
|
+
def url_for(options, *args)
|
|
7
|
+
case options[:id]
|
|
8
|
+
when Array
|
|
9
|
+
options[:id] = RailsAdmin.config.composite_keys_serializer.serialize(options[:id])
|
|
10
|
+
end
|
|
11
|
+
super options, *args
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module Support
|
|
5
|
+
module CompositeKeysSerializer
|
|
6
|
+
def self.serialize(keys)
|
|
7
|
+
keys.map { |key| key&.to_s&.gsub('_', '__') }.join('_')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.deserialize(string)
|
|
11
|
+
string.split('_').map { |key| key&.gsub('__', '_') }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'csv'
|
|
4
|
+
|
|
5
|
+
module RailsAdmin
|
|
6
|
+
class CSVConverter
|
|
7
|
+
def initialize(objects = [], schema = nil)
|
|
8
|
+
@fields = []
|
|
9
|
+
@associations = []
|
|
10
|
+
schema ||= {}
|
|
11
|
+
|
|
12
|
+
return self if (@objects = objects).blank?
|
|
13
|
+
|
|
14
|
+
@model = objects.dup.first.class
|
|
15
|
+
@abstract_model = RailsAdmin::AbstractModel.new(@model)
|
|
16
|
+
@model_config = @abstract_model.config
|
|
17
|
+
@methods = [(schema[:only] || []) + (schema[:methods] || [])].flatten.compact
|
|
18
|
+
@fields = @methods.collect { |m| export_field_for(m) }.compact
|
|
19
|
+
@empty = ::I18n.t('admin.export.empty_value_for_associated_objects')
|
|
20
|
+
schema_include = schema.delete(:include) || {}
|
|
21
|
+
|
|
22
|
+
@associations = schema_include.each_with_object({}) do |(key, values), hash|
|
|
23
|
+
association = export_field_for(key)
|
|
24
|
+
next unless association&.association?
|
|
25
|
+
|
|
26
|
+
model_config = association.associated_model_config
|
|
27
|
+
abstract_model = model_config.abstract_model
|
|
28
|
+
methods = [(values[:only] || []) + (values[:methods] || [])].flatten.compact
|
|
29
|
+
|
|
30
|
+
hash[key] = {
|
|
31
|
+
association: association,
|
|
32
|
+
model: abstract_model.model,
|
|
33
|
+
abstract_model: abstract_model,
|
|
34
|
+
model_config: model_config,
|
|
35
|
+
fields: methods.collect { |m| export_field_for(m, model_config) }.compact,
|
|
36
|
+
}
|
|
37
|
+
hash
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def to_csv(options = {})
|
|
42
|
+
if CSV::VERSION == '3.0.2'
|
|
43
|
+
raise <<~MSG
|
|
44
|
+
CSV library bundled with Ruby 2.6.0 has encoding issue, please upgrade Ruby to 2.6.1 or later.
|
|
45
|
+
https://github.com/ruby/csv/issues/62
|
|
46
|
+
MSG
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
options = HashWithIndifferentAccess.new(options)
|
|
50
|
+
encoding_to = Encoding.find(options[:encoding_to]) if options[:encoding_to].present?
|
|
51
|
+
|
|
52
|
+
csv_string = generate_csv_string(options)
|
|
53
|
+
csv_string = csv_string.encode(encoding_to, invalid: :replace, undef: :replace, replace: '?') if encoding_to
|
|
54
|
+
|
|
55
|
+
# Add a BOM for utf8 encodings, helps with utf8 auto-detect for some versions of Excel.
|
|
56
|
+
# Don't add if utf8 but user don't want to touch input encoding:
|
|
57
|
+
# If user chooses utf8, they will open it in utf8 and BOM will disappear at reading.
|
|
58
|
+
# But that way "English" users who don't bother and chooses to let utf8 by default won't get BOM added
|
|
59
|
+
# and will not see it if Excel opens the file with a different encoding.
|
|
60
|
+
csv_string = "\xEF\xBB\xBF#{csv_string}" if encoding_to == Encoding::UTF_8
|
|
61
|
+
|
|
62
|
+
[!options[:skip_header], (encoding_to || csv_string.encoding).to_s, csv_string]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def export_field_for(method, model_config = @model_config)
|
|
68
|
+
model_config.export.fields.detect { |f| f.name == method }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def generate_csv_string(options)
|
|
72
|
+
generator_options = (options[:generator] || {}).symbolize_keys.delete_if { |_, value| value.blank? }
|
|
73
|
+
method = @objects.respond_to?(:find_each) ? :find_each : :each
|
|
74
|
+
|
|
75
|
+
CSV.generate(**generator_options) do |csv|
|
|
76
|
+
csv << generate_csv_header unless options[:skip_header]
|
|
77
|
+
|
|
78
|
+
@objects.send(method) do |object|
|
|
79
|
+
csv << generate_csv_row(object)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def generate_csv_header
|
|
85
|
+
@fields.collect do |field|
|
|
86
|
+
::I18n.t('admin.export.csv.header_for_root_methods', name: field.label, model: @abstract_model.pretty_name)
|
|
87
|
+
end +
|
|
88
|
+
@associations.flat_map do |_association_name, option_hash|
|
|
89
|
+
option_hash[:fields].collect do |field|
|
|
90
|
+
::I18n.t('admin.export.csv.header_for_association_methods', name: field.label, association: option_hash[:association].label)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def generate_csv_row(object)
|
|
96
|
+
@fields.collect do |field|
|
|
97
|
+
field.with(object: object).export_value
|
|
98
|
+
end +
|
|
99
|
+
@associations.flat_map do |association_name, option_hash|
|
|
100
|
+
associated_objects = [object.send(association_name)].flatten.compact
|
|
101
|
+
option_hash[:fields].collect do |field|
|
|
102
|
+
associated_objects.collect { |ao| field.with(object: ao).export_value.presence || @empty }.join(',')
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module Support
|
|
5
|
+
class Datetime
|
|
6
|
+
# Ruby format options as a key and flatpickr format options as a value
|
|
7
|
+
FLATPICKR_TRANSLATIONS = {
|
|
8
|
+
'%A' => 'l', # The full weekday name ("Sunday")
|
|
9
|
+
'%a' => 'D', # The abbreviated weekday name ("Sun")
|
|
10
|
+
'%B' => 'F', # The full month name ("January")
|
|
11
|
+
'%b' => 'M', # The abbreviated month name ("Jan")
|
|
12
|
+
'%D' => 'm/d/y', # American date format mm/dd/yy
|
|
13
|
+
'%d' => 'd', # Day of the month (01..31)
|
|
14
|
+
'%-d' => 'j', # Day of the month (1..31)
|
|
15
|
+
'%e' => 'j', # Day of the month (1..31)
|
|
16
|
+
'%F' => 'Y-m-d', # ISO 8601 date format
|
|
17
|
+
'%H' => 'H', # Hour of the day, 24-hour clock (00..23)
|
|
18
|
+
'%-H' => 'H', # Hour of the day, 24-hour clock (0..23)
|
|
19
|
+
'%h' => 'M', # Same as %b
|
|
20
|
+
'%I' => 'G', # Hour of the day, 12-hour clock (01..12)
|
|
21
|
+
'%-I' => 'h', # Hour of the day, 12-hour clock (1..12)
|
|
22
|
+
'%k' => 'H', # Hour of the day, 24-hour clock (0..23)
|
|
23
|
+
'%l' => 'h', # Hour of the day, 12-hour clock (1..12)
|
|
24
|
+
'%-l' => 'h', # Hour of the day, 12-hour clock (1..12)
|
|
25
|
+
'%M' => 'i', # Minute of the hour (00..59)
|
|
26
|
+
'%-M' => 'i', # Minute of the hour (00..59)
|
|
27
|
+
'%m' => 'm', # Month of the year (01..12)
|
|
28
|
+
'%-m' => 'n', # Month of the year (1..12)
|
|
29
|
+
'%P' => 'K', # Meridian indicator ('am' or 'pm')
|
|
30
|
+
'%p' => 'K', # Meridian indicator ('AM' or 'PM')
|
|
31
|
+
'%R' => 'H:i', # 24-hour time (%H:%M)
|
|
32
|
+
'%r' => 'G:i:S K', # 12-hour time (%I:%M:%S %p)
|
|
33
|
+
'%S' => 'S', # Second of the minute (00..60)
|
|
34
|
+
'%-S' => 's', # Second of the minute (0..60)
|
|
35
|
+
'%s' => 'U', # Number of seconds since 1970-01-01 00:00:00 UTC.
|
|
36
|
+
'%T' => 'H:i:S', # 24-hour time (%H:%M:%S)
|
|
37
|
+
'%U' => 'W', # Week number of the year. The week starts with Sunday. (00..53)
|
|
38
|
+
'%w' => 'w', # Day of the week (Sunday is 0, 0..6)
|
|
39
|
+
'%X' => 'H:i:S', # Same as %T
|
|
40
|
+
'%x' => 'm/d/y', # Same as %D
|
|
41
|
+
'%Y' => 'Y', # Year with century
|
|
42
|
+
'%y' => 'y', # Year without a century (00..99)
|
|
43
|
+
'%%' => '%',
|
|
44
|
+
}.freeze
|
|
45
|
+
|
|
46
|
+
class << self
|
|
47
|
+
def to_flatpickr_format(strftime_format)
|
|
48
|
+
strftime_format.gsub(/(?<!%)(?<![-0-9:])\w/, '\\\\\0').gsub(/%([-0-9:]?\w)/) do |match|
|
|
49
|
+
# Timezone can't be handled by frontend, the server's one is always used
|
|
50
|
+
case match
|
|
51
|
+
when '%Z', '%:z' # Time zone as hour and minute offset from UTC with a colon (e.g. +09:00)
|
|
52
|
+
Time.zone.formatted_offset
|
|
53
|
+
when '%z' # Time zone as hour and minute offset from UTC (e.g. +0900)
|
|
54
|
+
Time.zone.formatted_offset(false)
|
|
55
|
+
else
|
|
56
|
+
FLATPICKR_TRANSLATIONS[match] or raise <<~MSG
|
|
57
|
+
Unsupported strftime directive '#{match}' was found. Please consider explicitly setting flatpickr_format instance option for the field.
|
|
58
|
+
field(:name_of_field) { flatpickr_format '...' }
|
|
59
|
+
MSG
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module Support
|
|
5
|
+
class ESModuleProcessor
|
|
6
|
+
def self.instance
|
|
7
|
+
@instance ||= new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.call(input)
|
|
11
|
+
instance.call(input)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def initialize; end
|
|
15
|
+
|
|
16
|
+
def call(input)
|
|
17
|
+
return unless input[:name] == 'rails_admin/application'
|
|
18
|
+
|
|
19
|
+
input[:data].gsub(/^((?:import|export) .+)$/) { "// #{Regexp.last_match(1)}" }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
class HashHelper
|
|
5
|
+
def self.symbolize(obj)
|
|
6
|
+
case obj
|
|
7
|
+
when Array
|
|
8
|
+
obj.each_with_object([]) do |val, res|
|
|
9
|
+
res << case val
|
|
10
|
+
when Hash, Array then symbolize(val)
|
|
11
|
+
when String then val.to_sym
|
|
12
|
+
else val
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
when Hash
|
|
16
|
+
obj.each_with_object({}) do |(key, val), res|
|
|
17
|
+
nkey = key.is_a?(String) ? key.to_sym : key
|
|
18
|
+
nval =
|
|
19
|
+
case val
|
|
20
|
+
when Hash, Array then symbolize(val)
|
|
21
|
+
when String then val.to_sym
|
|
22
|
+
else val
|
|
23
|
+
end
|
|
24
|
+
res[nkey] = nval
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
obj
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
class Version
|
|
5
|
+
MAJOR = 3
|
|
6
|
+
MINOR = 3
|
|
7
|
+
PATCH = 0
|
|
8
|
+
PRE = nil
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
# @return [String]
|
|
12
|
+
def to_s
|
|
13
|
+
[MAJOR, MINOR, PATCH, PRE].compact.join('.')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def js
|
|
17
|
+
JSON.parse(File.read("#{__dir__}/../../package.json"))['version']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def actual_js_version
|
|
21
|
+
case RailsAdmin.config.asset_source
|
|
22
|
+
when :webpacker, :webpack
|
|
23
|
+
js_version_from_node_modules
|
|
24
|
+
else
|
|
25
|
+
js
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def warn_with_js_version
|
|
30
|
+
return unless Rails.env.development? || Rails.env.test?
|
|
31
|
+
|
|
32
|
+
case actual_js_version
|
|
33
|
+
when js
|
|
34
|
+
# Good
|
|
35
|
+
when nil
|
|
36
|
+
warn "[Warning] Failed to detect RailsAdmin npm package, did you run 'yarn install'?"
|
|
37
|
+
else
|
|
38
|
+
warn <<~MSG
|
|
39
|
+
[Warning] RailsAdmin npm package version inconsistency detected, expected #{js} but actually used is #{actual_js_version}.
|
|
40
|
+
This may cause partial or total malfunction of RailsAdmin frontend features.
|
|
41
|
+
MSG
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def js_version_from_node_modules
|
|
48
|
+
JSON.parse(File.read(Rails.root.join('node_modules/rails_admin/package.json')))['version']
|
|
49
|
+
rescue StandardError
|
|
50
|
+
nil
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_admin/engine'
|
|
4
|
+
require 'rails_admin/abstract_model'
|
|
5
|
+
require 'rails_admin/config'
|
|
6
|
+
require 'rails_admin/config/const_load_suppressor'
|
|
7
|
+
require 'rails_admin/extension'
|
|
8
|
+
require 'rails_admin/extensions/cancancan'
|
|
9
|
+
require 'rails_admin/extensions/pundit'
|
|
10
|
+
require 'rails_admin/extensions/paper_trail'
|
|
11
|
+
require 'rails_admin/support/csv_converter'
|
|
12
|
+
require 'rails_admin/support/hash_helper'
|
|
13
|
+
require 'yaml'
|
|
14
|
+
|
|
15
|
+
module RailsAdmin
|
|
16
|
+
extend RailsAdmin::Config::ConstLoadSuppressor
|
|
17
|
+
|
|
18
|
+
# Setup RailsAdmin
|
|
19
|
+
#
|
|
20
|
+
# Given the first argument is a model class, a model class name
|
|
21
|
+
# or an abstract model object proxies to model configuration method.
|
|
22
|
+
#
|
|
23
|
+
# If only a block is passed it is stored to initializer stack to be evaluated
|
|
24
|
+
# on first request in production mode and on each request in development. If
|
|
25
|
+
# initialization has already occurred (in other words RailsAdmin.setup has
|
|
26
|
+
# been called) the block will be added to stack and evaluated at once.
|
|
27
|
+
#
|
|
28
|
+
# Otherwise returns RailsAdmin::Config class.
|
|
29
|
+
#
|
|
30
|
+
# @see RailsAdmin::Config
|
|
31
|
+
def self.config(entity = nil, &block)
|
|
32
|
+
if entity
|
|
33
|
+
RailsAdmin::Config.model(entity, &block)
|
|
34
|
+
elsif block_given?
|
|
35
|
+
RailsAdmin::Config::ConstLoadSuppressor.suppressing { yield(RailsAdmin::Config) }
|
|
36
|
+
else
|
|
37
|
+
RailsAdmin::Config
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Backwards-compatible with safe_yaml/load when SafeYAML isn't available.
|
|
42
|
+
# Evaluates available YAML loaders at boot and creates appropriate method,
|
|
43
|
+
# so no conditionals are required at runtime.
|
|
44
|
+
begin
|
|
45
|
+
require 'safe_yaml/load'
|
|
46
|
+
def self.yaml_load(yaml)
|
|
47
|
+
SafeYAML.load(yaml)
|
|
48
|
+
end
|
|
49
|
+
rescue LoadError
|
|
50
|
+
if YAML.respond_to?(:safe_load)
|
|
51
|
+
def self.yaml_load(yaml)
|
|
52
|
+
YAML.safe_load(yaml)
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
raise LoadError.new "Safe-loading of YAML is not available. Please install 'safe_yaml' or install Psych 2.0+"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.yaml_dump(object)
|
|
60
|
+
YAML.dump(object)
|
|
61
|
+
end
|
|
62
|
+
end
|