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
@@ -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
|