avo 2.46.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 +12 -29
- 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 +10 -6
- 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 -67
- data/lib/avo/base_resource.rb +286 -226
- 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/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
- 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 -122
- 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 +1 -0
- 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 +106 -116
- 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_action_stimulus_controllers.rb +0 -15
- 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 -123
- 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
@@ -2,42 +2,22 @@
|
|
2
2
|
module Avo
|
3
3
|
module Concerns
|
4
4
|
module IsResourceItem
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
self.class.
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def is_tool?
|
24
|
-
self.class.item_type == :tool
|
25
|
-
end
|
26
|
-
|
27
|
-
def is_tab?
|
28
|
-
self.class.item_type == :tab
|
29
|
-
end
|
30
|
-
|
31
|
-
def is_tab_group?
|
32
|
-
self.class.item_type == :tab_group
|
33
|
-
end
|
34
|
-
|
35
|
-
def is_sidebar?
|
36
|
-
self.class.item_type == :sidebar
|
37
|
-
end
|
38
|
-
|
39
|
-
def is_row?
|
40
|
-
self.class.item_type == :row
|
5
|
+
include Avo::Concerns::Hydration
|
6
|
+
|
7
|
+
# These attributes are required to be hydrated in order to properly find the visible_items
|
8
|
+
attr_accessor :resource
|
9
|
+
attr_accessor :view
|
10
|
+
|
11
|
+
# Returns the final state of if an item is visible or not
|
12
|
+
# For items that have children it checks to see if it contains any visible children.
|
13
|
+
def visible?
|
14
|
+
# For items that may contains other items like tabs and panels we should also check
|
15
|
+
# if any on their children have visible items.
|
16
|
+
if self.class.ancestors.include?(Avo::Concerns::HasItems)
|
17
|
+
return false unless visible_items.any?
|
18
|
+
end
|
19
|
+
|
20
|
+
super
|
41
21
|
end
|
42
22
|
end
|
43
23
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Adds the ability to set the visibility of an item in the execution context.
|
2
|
+
module Avo
|
3
|
+
module Concerns
|
4
|
+
module IsVisible
|
5
|
+
attr_accessor :visible
|
6
|
+
|
7
|
+
def visible?
|
8
|
+
# Default to true
|
9
|
+
return true if visible.nil?
|
10
|
+
|
11
|
+
Avo::ExecutionContext.new(target: visible, resource: @resource).handle
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module Avo
|
2
|
+
module Concerns
|
3
|
+
module VisibleInDifferentViews
|
4
|
+
attr_accessor :show_on_index
|
5
|
+
attr_accessor :show_on_show
|
6
|
+
attr_accessor :show_on_new
|
7
|
+
attr_accessor :show_on_edit
|
8
|
+
attr_accessor :show_on_preview
|
9
|
+
|
10
|
+
def post_initialize
|
11
|
+
initialize_views
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize_views
|
15
|
+
# Set defaults
|
16
|
+
@show_on_index = @show_on_index.nil? ? true : @show_on_index
|
17
|
+
@show_on_show = @show_on_show.nil? ? true : @show_on_show
|
18
|
+
@show_on_new = @show_on_new.nil? ? true : @show_on_new
|
19
|
+
@show_on_edit = @show_on_edit.nil? ? true : @show_on_edit
|
20
|
+
@show_on_preview = @show_on_preview.nil? ? false : @show_on_preview
|
21
|
+
|
22
|
+
if @args.present?
|
23
|
+
# Execute options
|
24
|
+
show_on @args[:show_on] if @args[:show_on].present?
|
25
|
+
hide_on @args[:hide_on] if @args[:hide_on].present?
|
26
|
+
only_on @args[:only_on] if @args[:only_on].present?
|
27
|
+
except_on @args[:except_on] if @args[:except_on].present?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Validates if the field is visible on certain view
|
32
|
+
def visible_in_view?(view:)
|
33
|
+
raise "No view specified on visibility check." if view.blank?
|
34
|
+
|
35
|
+
send "show_on_#{view}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def show_on(*where)
|
39
|
+
return show_on_all if where.include? :all
|
40
|
+
|
41
|
+
normalize_views(where).flatten.each do |view|
|
42
|
+
show_on_view view
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def hide_on(*where)
|
47
|
+
return hide_on_all if where.include? :all
|
48
|
+
|
49
|
+
normalize_views(where).flatten.each do |view|
|
50
|
+
hide_on_view view
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def only_on(*where)
|
55
|
+
hide_on_all
|
56
|
+
normalize_views(where).flatten.each do |view|
|
57
|
+
show_on_view view
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def except_on(*where)
|
62
|
+
show_on_all
|
63
|
+
normalize_views(where).flatten.each do |view|
|
64
|
+
hide_on_view view
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# When submitting the form on creation, the new page will be create but we don't have a visibility marker for create so we'll default to new
|
69
|
+
def show_on_create
|
70
|
+
show_on_new
|
71
|
+
end
|
72
|
+
|
73
|
+
# When submitting the form on update, the new page will be create but we don't have a visibility marker for update so we'll default to edit
|
74
|
+
def show_on_update
|
75
|
+
show_on_edit
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def show_on_view(view)
|
81
|
+
send("show_on_#{view}=", true)
|
82
|
+
end
|
83
|
+
|
84
|
+
def hide_on_view(view)
|
85
|
+
send("show_on_#{view}=", false)
|
86
|
+
end
|
87
|
+
|
88
|
+
def only_on_view(view)
|
89
|
+
hide_on_all
|
90
|
+
show_on_view view
|
91
|
+
end
|
92
|
+
|
93
|
+
def except_on_view(view)
|
94
|
+
show_on_all
|
95
|
+
hide_on_view view
|
96
|
+
end
|
97
|
+
|
98
|
+
def show_on_all
|
99
|
+
@show_on_index = true
|
100
|
+
@show_on_show = true
|
101
|
+
@show_on_edit = true
|
102
|
+
@show_on_new = true
|
103
|
+
@show_on_preview = true
|
104
|
+
end
|
105
|
+
|
106
|
+
def hide_on_all
|
107
|
+
@show_on_index = false
|
108
|
+
@show_on_show = false
|
109
|
+
@show_on_edit = false
|
110
|
+
@show_on_new = false
|
111
|
+
@show_on_preview = false
|
112
|
+
end
|
113
|
+
|
114
|
+
def normalize_views(*views_and_groups)
|
115
|
+
forms = views_and_groups.flatten! & [:forms]
|
116
|
+
display = views_and_groups & [:display]
|
117
|
+
|
118
|
+
if forms.present?
|
119
|
+
views_and_groups -= forms
|
120
|
+
views_and_groups += [:new, :edit]
|
121
|
+
end
|
122
|
+
|
123
|
+
if display.present?
|
124
|
+
views_and_groups -= display
|
125
|
+
views_and_groups += [:index, :show]
|
126
|
+
end
|
127
|
+
|
128
|
+
views_and_groups.flatten.uniq
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -3,48 +3,17 @@ module Avo
|
|
3
3
|
module Concerns
|
4
4
|
module VisibleItems
|
5
5
|
extend ActiveSupport::Concern
|
6
|
-
def items
|
7
|
-
if items_holder.present?
|
8
|
-
items_holder.items
|
9
|
-
else
|
10
|
-
[]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def visible_items
|
15
|
-
items
|
16
|
-
.map do |item|
|
17
|
-
if item.respond_to? :hydrate
|
18
|
-
item.hydrate(view: view)
|
19
|
-
end
|
20
|
-
|
21
|
-
item
|
22
|
-
end
|
23
|
-
.map do |item|
|
24
|
-
visible(item) ? item : nil
|
25
|
-
end
|
26
|
-
.compact
|
27
|
-
end
|
28
|
-
|
29
|
-
def visible(item)
|
30
|
-
return item.visible? unless item.is_field?
|
31
6
|
|
32
|
-
|
33
|
-
|
34
|
-
item.visible? && item.visible_on?(view)
|
7
|
+
included do
|
8
|
+
include Avo::Concerns::Hydration
|
35
9
|
end
|
36
10
|
|
37
11
|
def visible?
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
def hydrate(view: nil)
|
45
|
-
@view = view
|
46
|
-
|
47
|
-
self
|
12
|
+
if respond_to?(:visible_on?)
|
13
|
+
visible_on?(view) && visible_items.any?
|
14
|
+
else
|
15
|
+
visible_items.any?
|
16
|
+
end
|
48
17
|
end
|
49
18
|
end
|
50
19
|
end
|
@@ -32,40 +32,28 @@ class Avo::Configuration::Branding
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def logo
|
35
|
-
return @default_logo if Avo::App.license.lacks_with_trial(:branding)
|
36
|
-
|
37
35
|
@logo || @default_logo
|
38
36
|
end
|
39
37
|
|
40
38
|
def logomark
|
41
|
-
return @default_logomark if Avo::App.license.lacks_with_trial(:branding)
|
42
|
-
|
43
39
|
@logomark || @default_logomark
|
44
40
|
end
|
45
41
|
|
46
42
|
def placeholder
|
47
|
-
return @default_placeholder if Avo::App.license.lacks_with_trial(:branding)
|
48
|
-
|
49
43
|
@placeholder || @default_placeholder
|
50
44
|
end
|
51
45
|
|
52
46
|
def chart_colors
|
53
|
-
return @default_chart_colors if Avo::App.license.lacks_with_trial(:branding)
|
54
|
-
|
55
47
|
@chart_colors || @default_chart_colors
|
56
48
|
end
|
57
49
|
|
58
50
|
def favicon
|
59
|
-
return @default_favicon if Avo::App.license.lacks_with_trial(:branding)
|
60
|
-
|
61
51
|
@favicon || @default_favicon
|
62
52
|
end
|
63
53
|
|
64
54
|
private
|
65
55
|
|
66
56
|
def colors
|
67
|
-
return @default_colors if Avo::App.license.lacks_with_trial(:branding)
|
68
|
-
|
69
57
|
@default_colors.merge(@colors) || @default_colors
|
70
58
|
end
|
71
59
|
|
data/lib/avo/configuration.rb
CHANGED
@@ -13,7 +13,6 @@ module Avo
|
|
13
13
|
attr_accessor :locale
|
14
14
|
attr_accessor :currency
|
15
15
|
attr_accessor :default_view_type
|
16
|
-
attr_accessor :license
|
17
16
|
attr_accessor :license_key
|
18
17
|
attr_accessor :authorization_methods
|
19
18
|
attr_accessor :authenticate
|
@@ -38,13 +37,14 @@ module Avo
|
|
38
37
|
attr_accessor :main_menu
|
39
38
|
attr_accessor :profile_menu
|
40
39
|
attr_accessor :model_resource_mapping
|
41
|
-
|
42
|
-
attr_accessor :resource_default_view
|
40
|
+
attr_reader :resource_default_view
|
43
41
|
attr_accessor :authorization_client
|
44
42
|
attr_accessor :field_wrapper_layout
|
45
43
|
attr_accessor :sign_out_path_name
|
46
44
|
attr_accessor :resources
|
47
45
|
attr_accessor :prefix_path
|
46
|
+
attr_accessor :resource_parent_controller
|
47
|
+
attr_accessor :mount_avo_engines
|
48
48
|
|
49
49
|
def initialize
|
50
50
|
@root_path = "/avo"
|
@@ -56,7 +56,6 @@ module Avo
|
|
56
56
|
@locale = nil
|
57
57
|
@currency = "USD"
|
58
58
|
@default_view_type = :table
|
59
|
-
@license = "community"
|
60
59
|
@license_key = nil
|
61
60
|
@current_user = proc {}
|
62
61
|
@authenticate = proc {}
|
@@ -91,12 +90,12 @@ module Avo
|
|
91
90
|
@main_menu = nil
|
92
91
|
@profile_menu = nil
|
93
92
|
@model_resource_mapping = {}
|
94
|
-
@
|
95
|
-
@resource_default_view = :show
|
93
|
+
@resource_default_view = Avo::ViewInquirer.new("show")
|
96
94
|
@authorization_client = :pundit
|
97
95
|
@field_wrapper_layout = :inline
|
98
96
|
@resources = nil
|
99
|
-
@
|
97
|
+
@resource_parent_controller = "Avo::ResourcesController"
|
98
|
+
@mount_avo_engines = true
|
100
99
|
@cache_store = computed_cache_store
|
101
100
|
end
|
102
101
|
|
@@ -143,13 +142,31 @@ module Avo
|
|
143
142
|
end
|
144
143
|
|
145
144
|
def app_name
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
145
|
+
Avo::ExecutionContext.new(target: @app_name).handle
|
146
|
+
end
|
147
|
+
|
148
|
+
def license=(value)
|
149
|
+
if Rails.env.development?
|
150
|
+
puts "[Avo DEPRECATION WARNING]: The `config.license` configuration option is no longer supported and will be removed in future versions. Please discontinue its use and solely utilize the `license_key` instead."
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
154
|
+
def license
|
155
|
+
gems = Gem::Specification.map {|gem| gem.name}
|
156
|
+
|
157
|
+
@license ||= if gems.include?("avo-advanced")
|
158
|
+
"advanced"
|
159
|
+
elsif gems.include?("avo-pro")
|
160
|
+
"pro"
|
161
|
+
elsif gems.include?("avo")
|
162
|
+
"community"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def resource_default_view=(view)
|
167
|
+
@resource_default_view = Avo::ViewInquirer.new(view.to_s)
|
168
|
+
end
|
169
|
+
|
153
170
|
def cache_store
|
154
171
|
Avo::ExecutionContext.new(
|
155
172
|
target: @cache_store,
|
data/lib/avo/current.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
class Avo::Current < ActiveSupport::CurrentAttributes
|
2
|
+
# if Rails.env.development?
|
3
|
+
# singleton_class.attr_accessor :previous_attributes
|
4
|
+
# before_reset {
|
5
|
+
# puts ["before_reset->", self.previous_attributes].inspect
|
6
|
+
# if attributes.present?
|
7
|
+
# puts ["has attributes->"].inspect
|
8
|
+
# self.previous_attributes = attributes
|
9
|
+
# end
|
10
|
+
# puts ["before_reset->", self.previous_attributes].inspect
|
11
|
+
# }
|
12
|
+
|
13
|
+
# attr_accessor :previous_attributes
|
14
|
+
|
15
|
+
# def previous_attributes=(value)
|
16
|
+
# @previous_attributes = value
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
|
20
|
+
attribute :app
|
21
|
+
attribute :license
|
22
|
+
attribute :context, :user, :view_context
|
23
|
+
attribute :error_manager
|
24
|
+
attribute :resource_manager
|
25
|
+
attribute :tool_manager
|
26
|
+
attribute :plugin_manager
|
27
|
+
attribute :locale
|
28
|
+
|
29
|
+
# Protect from error #<RuntimeError: Missing rack.input> when request is ActionDispatch::Request.empty
|
30
|
+
def params
|
31
|
+
request.params
|
32
|
+
rescue
|
33
|
+
{}
|
34
|
+
end
|
35
|
+
|
36
|
+
def request
|
37
|
+
view_context&.request || ActionDispatch::Request.empty
|
38
|
+
end
|
39
|
+
end
|
data/lib/avo/dsl/field_parser.rb
CHANGED
@@ -10,7 +10,7 @@ module Avo
|
|
10
10
|
|
11
11
|
def initialize(id:, order_index: 0, **args, &block)
|
12
12
|
@id = id
|
13
|
-
@as = args.fetch(:as,
|
13
|
+
@as = args.fetch(:as, :text)
|
14
14
|
@order_index = order_index
|
15
15
|
@args = args
|
16
16
|
@block = block
|
@@ -47,7 +47,7 @@ module Avo
|
|
47
47
|
else
|
48
48
|
# The symbol can be transformed to a class and found.
|
49
49
|
class_name = as.to_s.camelize
|
50
|
-
field_class = "
|
50
|
+
field_class = "Avo::Fields::#{class_name}Field"
|
51
51
|
|
52
52
|
# Discover & load custom field classes
|
53
53
|
if Object.const_defined? field_class
|
@@ -72,7 +72,7 @@ module Avo
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def field_class_from_symbol(symbol)
|
75
|
-
matched_field = Avo
|
75
|
+
matched_field = Avo.field_manager.all.find do |field|
|
76
76
|
field[:name].to_s == symbol.to_s
|
77
77
|
end
|
78
78
|
|
data/lib/avo/dynamic_router.rb
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
module Avo
|
2
2
|
class DynamicRouter
|
3
|
+
def self.eager_load(entity)
|
4
|
+
paths = Avo::ENTITIES.fetch entity
|
5
|
+
|
6
|
+
return unless paths.present?
|
7
|
+
|
8
|
+
pathname = Rails.root.join(*paths)
|
9
|
+
if pathname.directory?
|
10
|
+
Rails.autoloaders.main.eager_load_dir(pathname.to_s)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
3
14
|
def self.routes
|
4
15
|
Avo::Engine.routes.draw do
|
5
16
|
scope "resources", as: "resources" do
|
6
17
|
# Check if the user chose to manually register the resource files.
|
7
18
|
# If so, eager_load the resources dir.
|
8
19
|
if Avo.configuration.resources.nil?
|
9
|
-
Avo::
|
20
|
+
Avo::DynamicRouter.eager_load(:resources) unless Rails.application.config.eager_load
|
10
21
|
end
|
11
22
|
|
12
|
-
Avo::
|
23
|
+
Avo::Resources::ResourceManager.fetch_resources
|
13
24
|
.select do |resource|
|
14
25
|
resource != :BaseResource
|
15
26
|
end
|
@@ -17,7 +28,11 @@ module Avo
|
|
17
28
|
resource.is_a? Class
|
18
29
|
end
|
19
30
|
.map do |resource|
|
20
|
-
resources resource.
|
31
|
+
resources resource.route_key do
|
32
|
+
member do
|
33
|
+
get :preview
|
34
|
+
end
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
data/lib/avo/engine.rb
CHANGED
@@ -3,6 +3,8 @@ Gem.loaded_specs["avo"].dependencies.each do |d|
|
|
3
3
|
case d.name
|
4
4
|
when "activerecord"
|
5
5
|
require "active_record/railtie"
|
6
|
+
when "activesupport"
|
7
|
+
require "active_support/railtie"
|
6
8
|
when "actionview"
|
7
9
|
require "action_view/railtie"
|
8
10
|
when "activestorage"
|
@@ -19,23 +21,40 @@ module Avo
|
|
19
21
|
isolate_namespace Avo
|
20
22
|
|
21
23
|
config.after_initialize do
|
22
|
-
#
|
23
|
-
::Avo
|
24
|
-
end
|
24
|
+
# Reset before reloads in development
|
25
|
+
::Avo.asset_manager.reset
|
25
26
|
|
26
|
-
|
27
|
-
Avo
|
28
|
-
path = Rails.root.join(*path_params)
|
27
|
+
# Boot Avo
|
28
|
+
::Avo.boot
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
# After deploy we want to make sure the license response is being cleared.
|
31
|
+
# We need a fresh license response.
|
32
|
+
# This is disabled in development because the initialization process might be triggered more than once.
|
33
|
+
unless Rails.env.development?
|
34
|
+
begin
|
35
|
+
Licensing::HQ.new.clear_response
|
36
|
+
rescue => exception
|
37
|
+
Avo.logger.info "Failed to clear Avo HQ response: #{exception.message}"
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
42
|
+
# Ensure we reboot the app when something changes
|
43
|
+
config.to_prepare do
|
44
|
+
# Boot Avo
|
45
|
+
::Avo.boot
|
46
|
+
end
|
47
|
+
|
48
|
+
initializer "avo.autoload" do |app|
|
49
|
+
# This undoes Rails' previous nested directories behavior in the `app` dir.
|
50
|
+
# More on this: https://github.com/fxn/zeitwerk/issues/250
|
51
|
+
avo_directory = Rails.root.join("app", "avo").to_s
|
52
|
+
ActiveSupport::Dependencies.autoload_paths.delete(avo_directory)
|
53
|
+
|
54
|
+
if Dir.exist?(avo_directory)
|
55
|
+
Rails.autoloaders.main.push_dir(avo_directory, namespace: Avo)
|
56
|
+
app.config.watchable_dirs[avo_directory] = [:rb]
|
57
|
+
end
|
39
58
|
end
|
40
59
|
|
41
60
|
initializer "avo.reloader" do |app|
|
@@ -46,17 +65,16 @@ module Avo
|
|
46
65
|
end
|
47
66
|
end
|
48
67
|
|
49
|
-
initializer "debug_exception_response_format" do |app|
|
50
|
-
app.config.debug_exception_response_format = :api
|
51
|
-
# app.config.logger = ::Logger.new(STDOUT)
|
52
|
-
end
|
53
|
-
|
54
68
|
initializer "avo.test_buddy" do |app|
|
55
69
|
if Avo::IN_DEVELOPMENT
|
56
|
-
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "
|
70
|
+
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "testing_helpers")
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
74
|
+
initializer "debug_exception_response_format" do |app|
|
75
|
+
app.config.debug_exception_response_format = :api
|
76
|
+
end
|
77
|
+
|
60
78
|
config.app_middleware.use(
|
61
79
|
Rack::Static,
|
62
80
|
urls: ["/avo-assets"],
|
@@ -75,18 +93,5 @@ module Avo
|
|
75
93
|
initializer "avo.locales" do |app|
|
76
94
|
I18n.load_path += Dir[Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "*.{rb,yml}")]
|
77
95
|
end
|
78
|
-
|
79
|
-
# After deploy we want to make sure the license response is being cleared.
|
80
|
-
# We need a fresh license response.
|
81
|
-
# This is disabled in development because the initialization process might be triggered more than once.
|
82
|
-
config.after_initialize do
|
83
|
-
unless Rails.env.development?
|
84
|
-
begin
|
85
|
-
Licensing::HQ.new.clear_response
|
86
|
-
rescue => exception
|
87
|
-
puts "Failed to clear Avo HQ response: #{exception.message}"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
96
|
end
|
92
97
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Avo
|
2
|
+
class ErrorManager
|
3
|
+
class << self
|
4
|
+
def build
|
5
|
+
new
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :errors
|
10
|
+
|
11
|
+
alias_method :all, :errors
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@errors = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(error)
|
18
|
+
errors << error
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_errors?
|
22
|
+
errors.present?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Avo
|
2
2
|
class ExecutionContext
|
3
|
-
|
3
|
+
include Avo::Concerns::HasHelpers
|
4
|
+
|
5
|
+
attr_accessor :target, :context, :params, :view_context, :current_user, :request, :include, :main_app, :avo, :locale
|
4
6
|
|
5
7
|
def initialize(**args)
|
6
8
|
# Extend the class with custom modules if required.
|
@@ -10,13 +12,6 @@ module Avo
|
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
# If you want this block to behave like a view you can delegate the missing methods to the view_context
|
14
|
-
#
|
15
|
-
# Ex: Avo::ExecutionContext.new(target: ..., delegate_missing_to: :view_context).handle
|
16
|
-
if args[:delegate_missing_to].present?
|
17
|
-
self.class.send(:delegate_missing_to, args[:delegate_missing_to])
|
18
|
-
end
|
19
|
-
|
20
15
|
# If target doesn't respond to call, we don't need to initialize the others attr_accessors.
|
21
16
|
return unless (@target = args[:target]).respond_to? :call
|
22
17
|
|
@@ -26,15 +21,19 @@ module Avo
|
|
26
21
|
end
|
27
22
|
|
28
23
|
# Set defaults on not initialized accessors
|
29
|
-
@context ||= Avo::
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
24
|
+
@context ||= Avo::Current.context
|
25
|
+
@current_user ||= Avo::Current.user
|
26
|
+
@params ||= Avo::Current.params
|
27
|
+
@request ||= Avo::Current.request
|
28
|
+
@view_context ||= Avo::Current.view_context
|
29
|
+
@locale ||= Avo::Current.locale
|
30
|
+
@main_app ||= @view_context&.main_app
|
31
|
+
@avo ||= @view_context&.avo
|
36
32
|
end
|
37
33
|
|
34
|
+
delegate :result, to: :card
|
35
|
+
delegate :authorize, to: Avo::Services::AuthorizationService
|
36
|
+
|
38
37
|
# Return target if target is not callable, otherwise, execute target on this instance context
|
39
38
|
def handle
|
40
39
|
target.respond_to?(:call) ? instance_exec(&target) : target
|