avo 2.45.0 → 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of avo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +28 -26
- data/Gemfile.lock +231 -161
- data/README.md +19 -27
- data/Rakefile +2 -0
- data/app/assets/stylesheets/avo.base.css +1 -1
- data/app/assets/svgs/font.svg +1 -0
- data/app/assets/svgs/triangle-up.svg +1 -0
- data/app/components/avo/actions_component.html.erb +19 -5
- data/app/components/avo/actions_component.rb +39 -19
- data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
- data/app/components/avo/asset_manager/javascript_component.rb +13 -0
- data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
- data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
- data/app/components/avo/base_component.rb +15 -12
- data/app/components/avo/button_component.rb +20 -3
- data/app/components/avo/empty_state_component.rb +1 -1
- data/app/components/avo/field_wrapper_component.html.erb +1 -1
- data/app/components/avo/field_wrapper_component.rb +9 -15
- data/app/components/avo/fields/area_field/edit_component.html.erb +2 -2
- data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +75 -79
- data/app/components/avo/fields/belongs_to_field/edit_component.rb +7 -7
- data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
- data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/boolean_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
- data/app/components/avo/fields/common/badge_viewer_component.rb +1 -1
- data/app/components/avo/fields/common/boolean_check_component.html.erb +1 -12
- data/app/components/avo/fields/common/boolean_check_component.rb +2 -1
- data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
- data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +2 -2
- data/app/components/avo/fields/common/gravatar_viewer_component.html.erb +1 -1
- data/app/components/avo/fields/common/gravatar_viewer_component.rb +2 -2
- data/app/components/avo/fields/common/heading_component.html.erb +3 -8
- data/app/components/avo/fields/common/heading_component.rb +1 -3
- data/app/components/avo/fields/common/key_value_component.html.erb +2 -2
- data/app/components/avo/fields/common/key_value_component.rb +2 -2
- data/app/components/avo/fields/common/progress_bar_component.rb +3 -9
- data/app/components/avo/fields/common/status_viewer_component.html.erb +3 -0
- data/app/components/avo/fields/edit_component.rb +2 -2
- data/app/components/avo/fields/external_image_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/file_field/index_component.html.erb +2 -2
- data/app/components/avo/fields/gravatar_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/has_one_field/show_component.html.erb +3 -2
- data/app/components/avo/fields/has_one_field/show_component.rb +2 -2
- data/app/components/avo/fields/heading_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/heading_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/id_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/index_component.rb +6 -6
- data/app/components/avo/fields/location_field/edit_component.html.erb +12 -10
- data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
- data/app/components/avo/fields/preview_field/index_component.rb +4 -0
- data/app/components/avo/fields/select_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/show_component.rb +5 -2
- data/app/components/avo/fields/text_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/trix_field/edit_component.html.erb +2 -2
- data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
- data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
- data/app/components/avo/filters_component.html.erb +9 -3
- data/app/components/avo/filters_component.rb +4 -4
- data/app/components/avo/index/field_wrapper_component.rb +1 -13
- data/app/components/avo/index/grid_item_component.html.erb +13 -36
- data/app/components/avo/index/grid_item_component.rb +43 -16
- data/app/components/avo/index/resource_controls_component.html.erb +3 -81
- data/app/components/avo/index/resource_controls_component.rb +125 -18
- data/app/components/avo/index/resource_grid_component.html.erb +5 -3
- data/app/components/avo/index/resource_grid_component.rb +5 -2
- data/app/components/avo/index/resource_map_component.html.erb +1 -1
- data/app/components/avo/index/resource_map_component.rb +3 -3
- data/app/components/avo/index/resource_table_component.html.erb +3 -2
- data/app/components/avo/index/resource_table_component.rb +8 -7
- data/app/components/avo/index/table_row_component.html.erb +9 -5
- data/app/components/avo/index/table_row_component.rb +3 -2
- data/app/components/avo/items/panel_component.html.erb +25 -0
- data/app/components/avo/items/panel_component.rb +43 -0
- data/app/components/avo/items/switcher_component.html.erb +17 -0
- data/app/components/avo/items/switcher_component.rb +79 -0
- data/app/components/avo/items/visible_items_component.html.erb +10 -0
- data/app/components/avo/items/visible_items_component.rb +11 -0
- data/app/components/avo/modal_component.html.erb +3 -4
- data/app/components/avo/paginator_component.html.erb +1 -1
- data/app/components/avo/paginator_component.rb +6 -6
- data/app/components/avo/panel_component.html.erb +7 -5
- data/app/components/avo/referrer_params_component.html.erb +1 -1
- data/app/components/avo/resource_component.rb +205 -26
- data/app/components/avo/resource_sidebar_component.html.erb +15 -18
- data/app/components/avo/resource_sidebar_component.rb +5 -3
- data/app/components/avo/sidebar/link_component.rb +1 -1
- data/app/components/avo/sidebar_component.html.erb +10 -3
- data/app/components/avo/sidebar_component.rb +5 -3
- data/app/components/avo/sidebar_profile_component.html.erb +18 -12
- data/app/components/avo/tab_group_component.html.erb +14 -8
- data/app/components/avo/tab_group_component.rb +1 -6
- data/app/components/avo/tab_switcher_component.html.erb +17 -40
- data/app/components/avo/tab_switcher_component.rb +6 -41
- data/app/components/avo/views/resource_edit_component.html.erb +23 -86
- data/app/components/avo/views/resource_edit_component.rb +20 -19
- data/app/components/avo/views/resource_index_component.html.erb +42 -47
- data/app/components/avo/views/resource_index_component.rb +76 -13
- data/app/components/avo/views/resource_show_component.html.erb +16 -177
- data/app/components/avo/views/resource_show_component.rb +16 -10
- data/app/controllers/avo/actions_controller.rb +29 -31
- data/app/controllers/avo/application_controller.rb +119 -180
- data/app/controllers/avo/associations_controller.rb +34 -43
- data/app/controllers/avo/attachments_controller.rb +4 -4
- data/app/controllers/avo/base_controller.rb +139 -91
- data/app/controllers/avo/debug_controller.rb +17 -5
- data/app/controllers/avo/home_controller.rb +1 -1
- data/app/controllers/avo/search_controller.rb +56 -50
- data/app/controllers/concerns/avo/initializes_avo.rb +22 -0
- data/app/helpers/avo/application_helper.rb +18 -8
- data/app/helpers/avo/resources_helper.rb +1 -1
- data/app/helpers/avo/url_helpers.rb +28 -12
- data/app/javascript/avo.base.js +1 -0
- data/app/javascript/js/controllers/action_controller.js +5 -3
- data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
- data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +7 -7
- data/app/javascript/js/controllers/filter_controller.js +1 -1
- data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
- data/app/javascript/js/controllers/preview_controller.js +24 -0
- data/app/javascript/js/controllers/search_controller.js +4 -2
- data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
- data/app/javascript/js/controllers/toggle_controller.js +48 -0
- data/app/javascript/js/controllers.js +11 -5
- data/app/javascript/js/custom-stream-actions.js +15 -0
- data/app/views/avo/actions/show.html.erb +9 -5
- data/app/views/avo/associations/new.html.erb +2 -2
- data/app/views/avo/base/_new_via_belongs_to.html.erb +1 -1
- data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +3 -3
- data/app/views/avo/base/create_fail_action.turbo_stream.erb +2 -2
- data/app/views/avo/base/edit.html.erb +1 -1
- data/app/views/avo/base/index.html.erb +4 -3
- data/app/views/avo/base/new.html.erb +2 -1
- data/app/views/avo/base/preview.html.erb +19 -0
- data/app/views/avo/base/show.html.erb +2 -2
- data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
- data/app/views/avo/debug/report.html.erb +32 -17
- data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
- data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
- data/app/views/avo/partials/_footer.html.erb +1 -1
- data/app/views/avo/partials/_javascript.html.erb +5 -0
- data/app/views/avo/partials/_logo.html.erb +1 -1
- data/app/views/avo/partials/_navbar.html.erb +3 -5
- data/app/views/avo/partials/_resource_search.html.erb +1 -0
- data/app/views/avo/partials/_table_header.html.erb +5 -11
- data/app/views/layouts/avo/application.html.erb +5 -4
- data/avo.gemspec +10 -8
- data/bin/dev +3 -1
- data/bin/prod +0 -0
- data/config/master.key +1 -0
- data/config/routes.rb +7 -10
- data/db/factories.rb +6 -0
- data/lib/avo/asset_manager.rb +30 -0
- data/lib/avo/base_action.rb +82 -66
- data/lib/avo/base_resource.rb +285 -225
- data/lib/avo/base_resource_tool.rb +9 -16
- data/lib/avo/concerns/borrow_items_holder.rb +35 -0
- data/lib/avo/concerns/breadcrumbs.rb +2 -2
- data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
- data/lib/avo/concerns/filters_session_handler.rb +7 -5
- data/lib/avo/concerns/has_controls.rb +37 -0
- data/lib/avo/concerns/has_description.rb +23 -0
- data/lib/avo/concerns/has_helpers.rb +18 -0
- data/lib/avo/concerns/has_item_type.rb +42 -0
- data/lib/avo/concerns/has_items.rb +339 -0
- data/lib/avo/concerns/hydration.rb +17 -0
- data/lib/avo/concerns/is_resource_item.rb +16 -36
- data/lib/avo/concerns/is_visible.rb +15 -0
- data/lib/avo/concerns/model_class_constantized.rb +0 -2
- data/lib/avo/concerns/visible_in_different_views.rb +132 -0
- data/lib/avo/concerns/visible_items.rb +7 -38
- data/lib/avo/configuration/branding.rb +0 -12
- data/lib/avo/configuration.rb +28 -11
- data/lib/avo/current.rb +39 -0
- data/lib/avo/dsl/field_parser.rb +3 -3
- data/lib/avo/dynamic_router.rb +18 -3
- data/lib/avo/engine.rb +35 -30
- data/lib/avo/error_manager.rb +25 -0
- data/lib/avo/execution_context.rb +14 -15
- data/lib/avo/fields/base_field.rb +84 -121
- data/lib/avo/fields/belongs_to_field.rb +19 -23
- data/lib/avo/fields/concerns/file_authorization.rb +2 -2
- data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
- data/lib/avo/fields/concerns/has_default.rb +1 -5
- data/lib/avo/fields/concerns/has_field_name.rb +22 -0
- data/lib/avo/fields/concerns/has_html_attributes.rb +112 -0
- data/lib/avo/fields/concerns/is_disabled.rb +1 -5
- data/lib/avo/fields/concerns/is_readonly.rb +1 -5
- data/lib/avo/fields/concerns/is_required.rb +5 -7
- data/lib/avo/fields/concerns/is_searchable.rb +15 -0
- data/lib/avo/fields/concerns/use_resource.rb +5 -1
- data/lib/avo/fields/concerns/use_view_components.rb +45 -0
- data/lib/avo/fields/country_field.rb +4 -0
- data/lib/avo/fields/date_time_field.rb +1 -5
- data/lib/avo/fields/external_image_field.rb +2 -2
- data/lib/avo/fields/field_manager.rb +55 -0
- data/lib/avo/fields/file_field.rb +2 -2
- data/lib/avo/fields/gravatar_field.rb +2 -2
- data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
- data/lib/avo/fields/has_base_field.rb +21 -17
- data/lib/avo/fields/has_many_field.rb +5 -2
- data/lib/avo/fields/has_one_field.rb +8 -12
- data/lib/avo/fields/heading_field.rb +9 -14
- data/lib/avo/fields/hidden_field.rb +1 -1
- data/lib/avo/fields/id_field.rb +3 -3
- data/lib/avo/fields/location_field.rb +10 -10
- data/lib/avo/fields/password_field.rb +1 -1
- data/lib/avo/fields/preview_field.rb +14 -0
- data/lib/avo/fields/select_field.rb +12 -8
- data/lib/avo/fields/status_field.rb +7 -1
- data/lib/avo/fields/text_field.rb +2 -2
- data/lib/avo/filters/base_filter.rb +9 -4
- data/lib/avo/html/builder.rb +8 -8
- data/lib/avo/item_grapher.rb +78 -0
- data/lib/avo/licensing/h_q.rb +11 -73
- data/lib/avo/licensing/license.rb +5 -1
- data/lib/avo/licensing/license_manager.rb +1 -1
- data/lib/avo/licensing/pro_license.rb +1 -7
- data/lib/avo/loaders/fields_loader.rb +7 -1
- data/lib/avo/plugin.rb +36 -0
- data/lib/avo/plugin_manager.rb +56 -0
- data/lib/avo/prefixed_test_helpers.rb +20 -0
- data/lib/avo/reloader.rb +3 -0
- data/lib/avo/resources/controls/actions_list.rb +7 -12
- data/lib/avo/resources/controls/attach_button.rb +15 -0
- data/lib/avo/resources/controls/back_button.rb +1 -1
- data/lib/avo/resources/controls/base_control.rb +15 -49
- data/lib/avo/resources/controls/create_button.rb +15 -0
- data/lib/avo/resources/controls/delete_button.rb +5 -1
- data/lib/avo/resources/controls/detach_button.rb +4 -1
- data/lib/avo/resources/controls/edit_button.rb +4 -1
- data/lib/avo/resources/controls/order_controls.rb +8 -0
- data/lib/avo/resources/controls/save_button.rb +13 -0
- data/lib/avo/resources/controls/show_button.rb +15 -0
- data/lib/avo/resources/items/holder.rb +96 -0
- data/lib/avo/resources/items/item_group.rb +44 -0
- data/lib/avo/resources/items/main_panel.rb +12 -0
- data/lib/avo/resources/items/panel.rb +2 -0
- data/lib/avo/resources/items/row.rb +42 -0
- data/lib/avo/resources/items/sidebar.rb +46 -0
- data/lib/avo/resources/items/tab.rb +54 -0
- data/lib/avo/resources/items/tab_group.rb +62 -0
- data/lib/avo/resources/resource_manager.rb +179 -0
- data/lib/avo/services/authorization_service.rb +11 -110
- data/lib/avo/services/debug_service.rb +93 -0
- data/lib/avo/services/encryption_service.rb +8 -12
- data/lib/avo/services/telemetry_service.rb +85 -0
- data/lib/avo/test_helpers.rb +362 -0
- data/lib/avo/tools/tool_manager.rb +30 -0
- data/lib/avo/version.rb +1 -1
- data/lib/avo/view_inquirer.rb +36 -0
- data/lib/avo.rb +109 -24
- data/lib/generators/avo/action_generator.rb +8 -8
- data/lib/generators/avo/card_generator.rb +27 -0
- data/lib/generators/avo/concerns/parent_controller.rb +20 -0
- data/lib/generators/avo/controller_generator.rb +3 -0
- data/lib/generators/avo/eject_generator.rb +180 -15
- data/lib/generators/avo/field_generator.rb +49 -2
- data/lib/generators/avo/filter_generator.rb +8 -8
- data/lib/generators/avo/js/install_generator.rb +2 -2
- data/lib/generators/avo/resource_generator.rb +12 -9
- data/lib/generators/avo/scope_generator.rb +15 -0
- data/lib/generators/avo/tailwindcss/install_generator.rb +70 -26
- data/lib/generators/avo/templates/action.tt +8 -6
- data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
- data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
- data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
- data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
- data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
- data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
- data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
- data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
- data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
- data/lib/generators/avo/templates/initializer/avo.tt +7 -3
- data/lib/generators/avo/templates/locales/avo.ar.yml +2 -1
- data/lib/generators/avo/templates/locales/avo.en.yml +4 -3
- data/lib/generators/avo/templates/locales/avo.es.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.fr.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.nb.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.nn.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.pt.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.ro.yml +6 -5
- data/lib/generators/avo/templates/locales/avo.tr.yml +1 -0
- data/lib/generators/avo/templates/resource/controller.tt +1 -1
- data/lib/generators/avo/templates/resource/resource.tt +7 -7
- data/lib/generators/avo/templates/resource_tools/partial.tt +2 -2
- data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
- data/lib/generators/avo/templates/scope.tt +6 -0
- data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
- data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +5 -3
- data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +11 -0
- data/lib/tasks/avo_tasks.rake +72 -4
- data/public/avo-assets/avo.base.css +1893 -1187
- data/public/avo-assets/avo.base.js +217 -305
- data/public/avo-assets/avo.base.js.map +3 -3
- data/public/avo-assets/avo.css +9744 -0
- data/public/avo-assets/avo.js +513 -0
- data/public/avo-assets/avo.js.map +7 -0
- data/tailwind.custom.js +47 -0
- data/tailwind.preset.js +152 -0
- metadata +104 -113
- data/app/components/avo/card_component.html.erb +0 -46
- data/app/components/avo/card_component.rb +0 -25
- data/app/components/avo/dashboards/divider_component.html.erb +0 -9
- data/app/components/avo/dashboards/divider_component.rb +0 -19
- data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
- data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
- data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
- data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
- data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
- data/app/components/avo/fields/tags_field/index_component.rb +0 -9
- data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
- data/app/components/avo/fields/tags_field/show_component.rb +0 -5
- data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
- data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
- data/app/components/avo/index/ordering/base_component.rb +0 -9
- data/app/components/avo/index/ordering/button_component.html.erb +0 -11
- data/app/components/avo/index/ordering/button_component.rb +0 -23
- data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
- data/app/components/avo/index/ordering/buttons_component.rb +0 -47
- data/app/components/avo/item_switcher_component.html.erb +0 -27
- data/app/components/avo/item_switcher_component.rb +0 -48
- data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
- data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
- data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
- data/app/controllers/avo/dashboards_controller.rb +0 -22
- data/app/controllers/avo/reorder_controller.rb +0 -25
- data/app/javascript/js/controllers/base_controller.js +0 -22
- data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
- data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
- data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
- data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
- data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
- data/app/views/avo/dashboards/cards/show.html.erb +0 -3
- data/app/views/avo/dashboards/show.html.erb +0 -38
- data/app/views/avo/partials/_global_search.html.erb +0 -19
- data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
- data/lib/avo/app.rb +0 -237
- data/lib/avo/base_card.rb +0 -161
- data/lib/avo/concerns/fetches_things.rb +0 -150
- data/lib/avo/concerns/handles_field_args.rb +0 -47
- data/lib/avo/concerns/has_editable_controls.rb +0 -34
- data/lib/avo/concerns/has_fields.rb +0 -334
- data/lib/avo/concerns/has_html_attributes.rb +0 -108
- data/lib/avo/concerns/policy_helpers.rb +0 -31
- data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
- data/lib/avo/dashboards/base_dashboard.rb +0 -89
- data/lib/avo/dashboards/base_divider.rb +0 -35
- data/lib/avo/dashboards/chartkick_card.rb +0 -77
- data/lib/avo/dashboards/dashboard_card.rb +0 -6
- data/lib/avo/dashboards/metric_card.rb +0 -9
- data/lib/avo/dashboards/partial_card.rb +0 -7
- data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
- data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
- data/lib/avo/fields/tags_field.rb +0 -102
- data/lib/avo/grid_collector.rb +0 -42
- data/lib/avo/hosts/association_scope_host.rb +0 -8
- data/lib/avo/hosts/base_host.rb +0 -25
- data/lib/avo/hosts/card_visibility.rb +0 -20
- data/lib/avo/hosts/dashboard_card.rb +0 -22
- data/lib/avo/hosts/dashboard_visibility.rb +0 -19
- data/lib/avo/hosts/ordering.rb +0 -22
- data/lib/avo/hosts/record_host.rb +0 -7
- data/lib/avo/hosts/resource_record_host.rb +0 -7
- data/lib/avo/hosts/resource_view_record_host.rb +0 -7
- data/lib/avo/hosts/search_scope_host.rb +0 -7
- data/lib/avo/hosts/view_record_host.rb +0 -7
- data/lib/avo/hosts/visibility_host.rb +0 -12
- data/lib/avo/items_holder.rb +0 -96
- data/lib/avo/main_panel.rb +0 -3
- data/lib/avo/menu/base_item.rb +0 -25
- data/lib/avo/menu/builder.rb +0 -82
- data/lib/avo/menu/dashboard.rb +0 -22
- data/lib/avo/menu/group.rb +0 -2
- data/lib/avo/menu/link.rb +0 -6
- data/lib/avo/menu/menu.rb +0 -2
- data/lib/avo/menu/resource.rb +0 -22
- data/lib/avo/menu/section.rb +0 -2
- data/lib/avo/panel.rb +0 -24
- data/lib/avo/panel_builder.rb +0 -25
- data/lib/avo/resources/controls/action.rb +0 -38
- data/lib/avo/resources/controls/execution_context.rb +0 -58
- data/lib/avo/resources/controls/items_holder.rb +0 -19
- data/lib/avo/resources/controls/link_to.rb +0 -27
- data/lib/avo/row.rb +0 -26
- data/lib/avo/row_builder.rb +0 -24
- data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
- data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
- data/lib/avo/sidebar.rb +0 -30
- data/lib/avo/sidebar_builder.rb +0 -24
- data/lib/avo/tab.rb +0 -72
- data/lib/avo/tab_builder.rb +0 -25
- data/lib/avo/tab_group.rb +0 -42
- data/lib/avo/tab_group_builder.rb +0 -43
- data/lib/avo/tools_manager.rb +0 -11
- data/lib/generators/avo/card/chartkick_generator.rb +0 -18
- data/lib/generators/avo/card/metric_generator.rb +0 -18
- data/lib/generators/avo/card/partial_generator.rb +0 -19
- data/lib/generators/avo/templates/js/avo.custom.js +0 -2
- data/lib/generators/avo/templates/standalone_action.tt +0 -8
- /data/app/assets/stylesheets/css/{tags.css → fields/tags.css} +0 -0
@@ -6,109 +6,19 @@ module Avo
|
|
6
6
|
attr_accessor :policy_class
|
7
7
|
|
8
8
|
class << self
|
9
|
-
def
|
10
|
-
client = Avo.configuration.authorization_client
|
11
|
-
|
12
|
-
client = nil if Avo::App.license.lacks(:authorization)
|
13
|
-
|
14
|
-
klass = case client
|
15
|
-
when nil
|
16
|
-
nil_client
|
17
|
-
when :pundit
|
18
|
-
pundit_client
|
19
|
-
else
|
20
|
-
if client.is_a?(String)
|
21
|
-
client.safe_constantize
|
22
|
-
else
|
23
|
-
client
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
klass.new
|
28
|
-
end
|
29
|
-
|
30
|
-
def authorize(user, record, action, policy_class: nil, **args)
|
31
|
-
return true if skip_authorization
|
32
|
-
|
33
|
-
client.authorize user, record, action, policy_class: policy_class
|
34
|
-
|
9
|
+
def authorize(*args, **kwargs)
|
35
10
|
true
|
36
|
-
rescue NoPolicyError => error
|
37
|
-
# By default, Avo allows anything if you don't have a policy present.
|
38
|
-
return true unless Avo.configuration.raise_error_on_missing_policy
|
39
|
-
|
40
|
-
raise error
|
41
|
-
rescue => error
|
42
|
-
if args[:raise_exception] == false
|
43
|
-
false
|
44
|
-
else
|
45
|
-
raise error
|
46
|
-
end
|
47
11
|
end
|
48
12
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
# If no action passed we should raise error if the user wants that.
|
53
|
-
# If not, just allow it.
|
54
|
-
if action.nil?
|
55
|
-
raise NoPolicyError.new "Policy method is missing" if Avo.configuration.raise_error_on_missing_policy
|
56
|
-
|
57
|
-
return true
|
58
|
-
end
|
59
|
-
|
60
|
-
# Add the question mark if it's missing
|
61
|
-
action = "#{action}?" unless action.end_with? "?"
|
62
|
-
authorize(user, record, action, policy_class: policy_class, **args)
|
63
|
-
end
|
64
|
-
|
65
|
-
def apply_policy(user, model, policy_class: nil)
|
66
|
-
return model if skip_authorization
|
67
|
-
|
68
|
-
client.apply_policy(user, model, policy_class: policy_class)
|
69
|
-
rescue NoPolicyError => error
|
70
|
-
return model unless Avo.configuration.raise_error_on_missing_policy
|
71
|
-
|
72
|
-
raise error
|
73
|
-
end
|
74
|
-
|
75
|
-
def skip_authorization
|
76
|
-
Avo::App.license.lacks_with_trial :authorization
|
77
|
-
end
|
78
|
-
|
79
|
-
def defined_methods(user, record, policy_class: nil, **args)
|
80
|
-
return client.policy!(user, record).methods if policy_class.nil?
|
81
|
-
|
82
|
-
# I'm aware this will not raise a Pundit error.
|
83
|
-
# Should the policy not exist, it will however raise an uninitialized constant error, which is probably what we want when specifying a custom policy
|
84
|
-
policy_class.new(user, record).methods
|
85
|
-
rescue NoPolicyError => error
|
86
|
-
return [] unless Avo.configuration.raise_error_on_missing_policy
|
87
|
-
|
88
|
-
raise error
|
89
|
-
rescue => error
|
90
|
-
if args[:raise_exception] == false
|
91
|
-
[]
|
92
|
-
else
|
93
|
-
raise error
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def pundit_client
|
98
|
-
raise Avo::MissingGemError.new("Please add `gem 'pundit'` to your Gemfile.") unless defined?(Pundit)
|
99
|
-
|
100
|
-
Avo::Services::AuthorizationClients::PunditClient
|
101
|
-
end
|
102
|
-
|
103
|
-
def nil_client
|
104
|
-
Avo::Services::AuthorizationClients::NilClient
|
13
|
+
def apply_policy(user, query)
|
14
|
+
query
|
105
15
|
end
|
106
16
|
end
|
107
17
|
|
108
18
|
def initialize(user = nil, record = nil, policy_class: nil)
|
109
19
|
@user = user
|
110
20
|
@record = record
|
111
|
-
@policy_class =
|
21
|
+
@policy_class = NilPolicy
|
112
22
|
end
|
113
23
|
|
114
24
|
def set_record(record)
|
@@ -117,28 +27,19 @@ module Avo
|
|
117
27
|
self
|
118
28
|
end
|
119
29
|
|
120
|
-
def
|
121
|
-
|
30
|
+
def apply_policy(query)
|
31
|
+
query
|
122
32
|
end
|
123
33
|
|
124
|
-
def
|
125
|
-
|
34
|
+
def authorize_action(*args)
|
35
|
+
true
|
126
36
|
end
|
127
37
|
|
128
|
-
def
|
129
|
-
|
38
|
+
def has_method?(*args, **kwargs)
|
39
|
+
false
|
130
40
|
end
|
131
41
|
|
132
|
-
|
133
|
-
method = "#{method}?" unless method.to_s.end_with? "?"
|
134
|
-
defined_methods(args[:record] || record, **args).include? method.to_sym
|
135
|
-
end
|
136
|
-
|
137
|
-
# Check the received method to see if the user overrode it in their config and then checks if it's present on the policy.
|
138
|
-
def has_action_method?(method, **args)
|
139
|
-
method = Avo.configuration.authorization_methods.stringify_keys[method.to_s] || method
|
140
|
-
|
141
|
-
has_method? method, **args
|
42
|
+
class NilPolicy
|
142
43
|
end
|
143
44
|
end
|
144
45
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Avo::Services::DebugService
|
2
|
+
class << self
|
3
|
+
def debug_report(request = nil)
|
4
|
+
payload = {}
|
5
|
+
|
6
|
+
hq = Avo::Licensing::HQ.new(request)
|
7
|
+
|
8
|
+
payload[:license_id] = Avo::Current&.license&.id
|
9
|
+
payload[:license_valid] = Avo::Current&.license&.valid?
|
10
|
+
payload[:license_payload] = Avo::Current&.license&.payload
|
11
|
+
payload[:license_response] = Avo::Current&.license&.response
|
12
|
+
payload[:hq_payload] = hq&.payload
|
13
|
+
payload[:thread_count] = get_thread_count
|
14
|
+
payload[:license_abilities] = Avo::Current&.license&.abilities
|
15
|
+
payload[:cache_store] = Avo.cache_store&.class&.to_s
|
16
|
+
payload[:avo_metadata] = avo_metadata
|
17
|
+
payload[:app_timezone] = Time.current.zone
|
18
|
+
payload[:cache_key] = Avo::Licensing::HQ.cache_key
|
19
|
+
payload[:cache_key_contents] = hq&.cached_response
|
20
|
+
payload[:plugins] = Avo.plugin_manager
|
21
|
+
|
22
|
+
payload
|
23
|
+
rescue => e
|
24
|
+
e
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_thread_count
|
28
|
+
Thread.list.count { |thread| thread.status == "run" }
|
29
|
+
rescue => e
|
30
|
+
e
|
31
|
+
end
|
32
|
+
|
33
|
+
def avo_metadata
|
34
|
+
resources = Avo.resource_manager.all
|
35
|
+
dashboards = defined?(Avo::Dashboards) ? Avo::Dashboards.dashboard_manager.all : []
|
36
|
+
# field_definitions = resources.map(&:get_field_definitions)
|
37
|
+
# fields_count = field_definitions.map(&:count).sum
|
38
|
+
# fields_per_resource = sprintf("%0.01f", fields_count / (resources.count + 0.0))
|
39
|
+
|
40
|
+
# field_types = {}
|
41
|
+
# custom_fields_count = 0
|
42
|
+
# field_definitions.each do |fields|
|
43
|
+
# fields.each do |field|
|
44
|
+
# field_types[field.type] ||= 0
|
45
|
+
# field_types[field.type] += 1
|
46
|
+
|
47
|
+
# custom_fields_count += 1 if field.custom?
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
|
51
|
+
{
|
52
|
+
resources_count: resources.count,
|
53
|
+
dashboards_count: dashboards.count,
|
54
|
+
# fields_count: fields_count,
|
55
|
+
# fields_per_resource: fields_per_resource,
|
56
|
+
# custom_fields_count: custom_fields_count,
|
57
|
+
# field_types: field_types,
|
58
|
+
# **other_metadata(:actions), # TODO: this is fetching actions without hydration
|
59
|
+
# **other_metadata(:filters),
|
60
|
+
main_menu_present: Avo.configuration.main_menu.present?,
|
61
|
+
profile_menu_present: Avo.configuration.profile_menu.present?,
|
62
|
+
cache_store: Avo.cache_store&.class&.to_s,
|
63
|
+
**config_metadata
|
64
|
+
}
|
65
|
+
# rescue => error
|
66
|
+
# {
|
67
|
+
# error: error.message
|
68
|
+
# }
|
69
|
+
end
|
70
|
+
|
71
|
+
def other_metadata(type = :actions)
|
72
|
+
resources = Avo.resource_manager.all
|
73
|
+
|
74
|
+
types = resources.map(&:"get_#{type}")
|
75
|
+
type_count = types.flatten.uniq.count
|
76
|
+
type_per_resource = sprintf("%0.01f", types.map(&:count).sum / (resources.count + 0.0))
|
77
|
+
|
78
|
+
{
|
79
|
+
"#{type}_count": type_count,
|
80
|
+
"#{type}_per_resource": type_per_resource
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def config_metadata
|
85
|
+
{
|
86
|
+
config: {
|
87
|
+
root_path: Avo.configuration.root_path,
|
88
|
+
app_name: Avo.configuration.app_name
|
89
|
+
}
|
90
|
+
}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -1,32 +1,28 @@
|
|
1
1
|
module Avo
|
2
2
|
module Services
|
3
3
|
class EncryptionService
|
4
|
-
attr_reader :message
|
5
|
-
attr_reader :purpose
|
6
|
-
attr_reader :crypt
|
7
|
-
|
8
4
|
class << self
|
9
|
-
def encrypt(
|
10
|
-
new(
|
5
|
+
def encrypt(...)
|
6
|
+
new(...).encrypt
|
11
7
|
end
|
12
8
|
|
13
|
-
def decrypt(
|
14
|
-
new(
|
9
|
+
def decrypt(...)
|
10
|
+
new(...).decrypt
|
15
11
|
end
|
16
12
|
end
|
17
13
|
|
18
|
-
def initialize(message:, purpose
|
14
|
+
def initialize(message:, purpose:, **kwargs)
|
19
15
|
@message = message
|
20
16
|
@purpose = purpose
|
21
|
-
@crypt = ActiveSupport::MessageEncryptor.new(encryption_key)
|
17
|
+
@crypt = ActiveSupport::MessageEncryptor.new(encryption_key, **kwargs)
|
22
18
|
end
|
23
19
|
|
24
20
|
def encrypt
|
25
|
-
crypt.encrypt_and_sign(message, purpose: purpose)
|
21
|
+
@crypt.encrypt_and_sign(@message, purpose: @purpose)
|
26
22
|
end
|
27
23
|
|
28
24
|
def decrypt
|
29
|
-
crypt.decrypt_and_verify(message, purpose: purpose)
|
25
|
+
@crypt.decrypt_and_verify(@message, purpose: @purpose)
|
30
26
|
end
|
31
27
|
|
32
28
|
private
|
@@ -0,0 +1,85 @@
|
|
1
|
+
class Avo::Services::TelemetryService
|
2
|
+
class << self
|
3
|
+
def telemetry_info
|
4
|
+
{
|
5
|
+
# license: Avo.configuration.license,
|
6
|
+
# license_key: Avo.configuration.license_key,
|
7
|
+
avo_version: Avo::VERSION,
|
8
|
+
rails_version: Rails::VERSION::STRING,
|
9
|
+
ruby_version: RUBY_VERSION,
|
10
|
+
environment: Rails.env,
|
11
|
+
# ip: current_request&.ip,
|
12
|
+
# host: current_request&.host,
|
13
|
+
# port: current_request&.port,
|
14
|
+
app_name: app_name,
|
15
|
+
avo_metadata: avo_metadata,
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def app_name
|
20
|
+
Rails.application.class.to_s.split("::").first
|
21
|
+
rescue
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def avo_metadata
|
26
|
+
resources = Avo.resource_manager.all
|
27
|
+
dashboards = Avo::Current.app.dashboard_manager.all
|
28
|
+
field_definitions = resources.map(&:get_field_definitions)
|
29
|
+
fields_count = field_definitions.map(&:count).sum
|
30
|
+
fields_per_resource = sprintf("%0.01f", fields_count / (resources.count + 0.0))
|
31
|
+
|
32
|
+
field_types = {}
|
33
|
+
custom_fields_count = 0
|
34
|
+
field_definitions.each do |fields|
|
35
|
+
fields.each do |field|
|
36
|
+
field_types[field.type] ||= 0
|
37
|
+
field_types[field.type] += 1
|
38
|
+
|
39
|
+
custom_fields_count += 1 if field.custom?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
{
|
44
|
+
resources_count: resources.count,
|
45
|
+
dashboards_count: dashboards.count,
|
46
|
+
fields_count: fields_count,
|
47
|
+
fields_per_resource: fields_per_resource,
|
48
|
+
custom_fields_count: custom_fields_count,
|
49
|
+
field_types: field_types,
|
50
|
+
**other_metadata(:actions),
|
51
|
+
**other_metadata(:filters),
|
52
|
+
main_menu_present: Avo.configuration.main_menu.present?,
|
53
|
+
profile_menu_present: Avo.configuration.profile_menu.present?,
|
54
|
+
cache_store: Avo.cache_store&.class&.to_s,
|
55
|
+
**config_metadata
|
56
|
+
}
|
57
|
+
# rescue => error
|
58
|
+
# {
|
59
|
+
# error: error.message
|
60
|
+
# }
|
61
|
+
end
|
62
|
+
|
63
|
+
def other_metadata(type = :actions)
|
64
|
+
resources = Avo.resource_manager.all
|
65
|
+
|
66
|
+
types = resources.map(&:"get_#{type}")
|
67
|
+
type_count = types.flatten.uniq.count
|
68
|
+
type_per_resource = sprintf("%0.01f", types.map(&:count).sum / (resources.count + 0.0))
|
69
|
+
|
70
|
+
{
|
71
|
+
"#{type}_count": type_count,
|
72
|
+
"#{type}_per_resource": type_per_resource
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
def config_metadata
|
77
|
+
{
|
78
|
+
config: {
|
79
|
+
root_path: Avo.configuration.root_path,
|
80
|
+
app_name: Avo.configuration.app_name
|
81
|
+
}
|
82
|
+
}
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|