Module: Avo

Defined in:
lib/avo/view_inquirer.rb,
lib/avo.rb,
lib/avo/cover.rb,
lib/avo/avatar.rb,
lib/avo/engine.rb,
lib/avo/plugin.rb,
lib/avo/version.rb,
lib/avo/mappings.rb,
lib/avo/base_action.rb,
lib/avo/test_helpers.rb,
app/avo/base_resource.rb,
lib/avo/asset_manager.rb,
lib/avo/configuration.rb,
lib/avo/error_manager.rb,
lib/avo/loaders/loader.rb,
lib/avo/plugin_manager.rb,
lib/avo/resources/base.rb,
lib/avo/fields/id_field.rb,
lib/avo/wait_for_loaded.rb,
lib/avo/dsl/field_parser.rb,
lib/avo/execution_context.rb,
lib/avo/fields/area_field.rb,
lib/avo/fields/base_field.rb,
lib/avo/fields/code_field.rb,
lib/avo/fields/date_field.rb,
lib/avo/fields/file_field.rb,
lib/avo/fields/tags_field.rb,
lib/avo/fields/text_field.rb,
lib/avo/fields/time_field.rb,
lib/avo/fields/trix_field.rb,
lib/avo/base_resource_tool.rb,
lib/avo/concerns/has_cover.rb,
lib/avo/concerns/has_items.rb,
lib/avo/concerns/hydration.rb,
lib/avo/concerns/safe_call.rb,
lib/avo/fields/array_field.rb,
lib/avo/fields/badge_field.rb,
lib/avo/fields/files_field.rb,
lib/avo/fields/radio_field.rb,
lib/avo/fields/stars_field.rb,
lib/avo/tools/tool_manager.rb,
app/helpers/avo/url_helpers.rb,
lib/avo/concerns/has_avatar.rb,
lib/avo/concerns/is_visible.rb,
lib/avo/concerns/pagination.rb,
lib/avo/fields/avatar_field.rb,
lib/avo/fields/hidden_field.rb,
lib/avo/fields/number_field.rb,
lib/avo/fields/select_field.rb,
lib/avo/fields/status_field.rb,
lib/avo/fields/tiptap_field.rb,
lib/avo/filters/base_filter.rb,
lib/avo/filters/text_filter.rb,
lib/avo/concerns/breadcrumbs.rb,
lib/avo/concerns/has_helpers.rb,
lib/avo/fields/boolean_field.rb,
lib/avo/fields/country_field.rb,
lib/avo/fields/field_manager.rb,
lib/avo/fields/has_one_field.rb,
lib/avo/fields/heading_field.rb,
lib/avo/fields/preview_field.rb,
lib/avo/services/hq_reporter.rb,
lib/avo/services/uri_service.rb,
lib/avo/concerns/form_builder.rb,
lib/avo/concerns/has_controls.rb,
lib/avo/fields/easy_mde_field.rb,
lib/avo/fields/gravatar_field.rb,
lib/avo/fields/has_many_field.rb,
lib/avo/fields/location_field.rb,
lib/avo/fields/password_field.rb,
lib/avo/fields/textarea_field.rb,
lib/avo/filters/select_filter.rb,
lib/avo/loaders/fields_loader.rb,
lib/avo/loaders/scopes_loader.rb,
lib/avo/prefixed_test_helpers.rb,
lib/avo/concerns/has_item_type.rb,
lib/avo/concerns/visible_items.rb,
lib/avo/fields/concerns/dom_id.rb,
lib/avo/fields/concerns/nested.rb,
lib/avo/fields/date_time_field.rb,
lib/avo/fields/key_value_field.rb,
lib/avo/filters/boolean_filter.rb,
lib/avo/grid_fields/body_field.rb,
lib/avo/grid_fields/grid_field.rb,
lib/avo/loaders/actions_loader.rb,
lib/avo/loaders/filters_loader.rb,
lib/avo/fields/belongs_to_field.rb,
lib/avo/fields/frame_base_field.rb,
lib/avo/grid_fields/title_field.rb,
app/helpers/avo/resources_helper.rb,
lib/avo/concerns/has_description.rb,
lib/avo/concerns/request_methods.rb,
lib/avo/fields_execution_context.rb,
lib/avo/filters/date_time_filter.rb,
lib/avo/resources/array_resource.rb,
lib/avo/concerns/is_resource_item.rb,
lib/avo/fields/progress_bar_field.rb,
lib/avo/grid_fields/preview_field.rb,
app/helpers/avo/application_helper.rb,
lib/avo/concerns/abstract_resource.rb,
lib/avo/concerns/can_replace_items.rb,
lib/avo/fields/boolean_group_field.rb,
lib/avo/fields/has_many_base_field.rb,
lib/avo/resources/resource_manager.rb,
app/controllers/avo/base_controller.rb,
app/controllers/avo/home_controller.rb,
lib/avo/fields/concerns/has_default.rb,
lib/avo/fields/concerns/is_disabled.rb,
lib/avo/fields/concerns/is_readonly.rb,
lib/avo/fields/concerns/is_required.rb,
lib/avo/fields/concerns/reload_icon.rb,
lib/avo/fields/external_image_field.rb,
lib/avo/media_library/configuration.rb,
lib/avo/services/encryption_service.rb,
app/controllers/avo/array_controller.rb,
app/controllers/avo/debug_controller.rb,
lib/avo/concerns/borrow_items_holder.rb,
lib/avo/concerns/has_field_discovery.rb,
lib/avo/fields/concerns/use_resource.rb,
lib/avo/fields/many_frame_base_field.rb,
lib/avo/view_types/view_type_manager.rb,
app/controllers/avo/charts_controller.rb,
app/controllers/avo/search_controller.rb,
lib/avo/fields/concerns/frame_loading.rb,
lib/avo/fields/concerns/is_searchable.rb,
app/controllers/avo/actions_controller.rb,
app/controllers/avo/private_controller.rb,
lib/avo/fields/concerns/has_field_name.rb,
lib/avo/fields/concerns/linkable_title.rb,
lib/avo/filters/multiple_select_filter.rb,
lib/avo/resources/controls/back_button.rb,
lib/avo/resources/controls/edit_button.rb,
lib/avo/resources/controls/save_button.rb,
lib/avo/resources/controls/show_button.rb,
lib/avo/services/authorization_service.rb,
lib/avo/concerns/find_association_field.rb,
lib/avo/resources/controls/actions_list.rb,
lib/avo/resources/controls/base_control.rb,
app/controllers/avo/resources_controller.rb,
lib/avo/concerns/filters_session_handler.rb,
lib/avo/resources/controls/attach_button.rb,
lib/avo/resources/controls/create_button.rb,
lib/avo/resources/controls/delete_button.rb,
lib/avo/resources/controls/detach_button.rb,
app/components/avo/u_i/tabs/tab_component.rb,
lib/avo/concerns/has_discreet_information.rb,
lib/avo/concerns/model_class_constantized.rb,
lib/avo/resources/controls/order_controls.rb,
app/components/avo/u_i/tabs/tabs_component.rb,
app/controllers/avo/application_controller.rb,
app/controllers/avo/attachments_controller.rb,
lib/avo/concerns/checks_show_authorization.rb,
lib/avo/fields/concerns/file_authorization.rb,
lib/avo/fields/concerns/handles_field_args.rb,
app/controllers/avo/associations_controller.rb,
app/helpers/avo/turbo_stream_actions_helper.rb,
lib/avo/concerns/checks_assoc_authorization.rb,
lib/avo/concerns/row_controls_configuration.rb,
lib/avo/concerns/visible_in_different_views.rb,
lib/avo/fields/concerns/has_html_attributes.rb,
lib/avo/fields/concerns/use_view_components.rb,
app/controllers/avo/media_library_controller.rb,
app/controllers/concerns/avo/initializes_avo.rb,
lib/avo/fields/has_and_belongs_to_many_field.rb,
app/components/avo/fields/concerns/item_labels.rb,
app/controllers/concerns/avo/common_controller.rb,
app/components/avo/media_library/list_component.rb,
app/controllers/avo/base_application_controller.rb,
lib/avo/concerns/has_action_stimulus_controllers.rb,
lib/avo/fields/field_extensions/has_include_blank.rb,
lib/avo/concerns/has_resource_stimulus_controllers.rb,
app/components/avo/media_library/list_item_component.rb,
app/components/avo/media_library/item_details_component.rb

Overview

TODO: Refactor this concern to be more readable and maintainable rubocop:disable Metrics/ModuleLength

Defined Under Namespace

Modules: ApplicationHelper, CommonController, Concerns, Dsl, Fields, Filters, GridFields, InitializesAvo, Loaders, Mappings, MediaLibrary, PrefixedTestHelpers, Resources, ResourcesHelper, Services, TestHelpers, Tools, TurboStreamActionsHelper, UI, UrlHelpers, ViewTypes, WaitForLoaded Classes: ActionsComponent, ActionsController, AlertComponent, ApplicationController, ArrayController, AssetManager, AssociationsController, AttachmentsController, Avatar, BacktraceAlertComponent, BaseAction, BaseApplicationController, BaseComponent, BaseController, BaseResource, BaseResourceTool, BlankFieldComponent, BreadcrumbElementComponent, BreadcrumbsComponent, ButtonComponent, ChartsController, ClipboardComponent, ComponentMissingComponent, Configuration, Cover, CoverComponent, Current, DebugController, DeprecatedAPIError, DescriptionListComponent, DiscreetInformation, DiscreetInformationComponent, Divider, DividerComponent, EmptyStateComponent, Engine, ErrorManager, ExecutionContext, FieldWrapperComponent, FieldsExecutionContext, FiltersComponent, FlashAlertsComponent, HomeController, ItemGrapher, LicenseInvalidError, LicenseVerificationTemperedError, LoadingComponent, MediaLibraryController, MissingGemError, MissingResourceError, ModalComponent, NoPolicyError, NotAuthorizedError, PaginatorComponent, PanelNameComponent, PhotoObject, Plugin, PluginManager, PrivateController, ProfileItemComponent, ReferrerParamsComponent, Reloader, ResourceComponent, ResourceListingComponent, ResourceNotFoundError, ResourceSidebarComponent, ResourcesController, RowComponent, RowSelectorComponent, SearchController, SearchOverlayComponent, SidebarComponent, SidebarProfileComponent, TabContentComponent, TabGroupComponent, TurboFrameWrapperComponent, UIInstance, ViewInquirer, ViewTypeComponentNotFoundError

Constant Summary collapse

ROOT_PATH =
Pathname.new(File.join(__dir__, ".."))
IN_DEVELOPMENT =
ENV["AVO_IN_DEVELOPMENT"] == "1"
PACKED =
!IN_DEVELOPMENT
COOKIES_KEY =
"avo"
:modal_frame
MEDIA_LIBRARY_ITEM_DETAILS_FRAME_ID =
:media_library_item_details
ACTIONS_BACKGROUND_FRAME_ID =
:actions_background
VERSION =
"4.0.0.beta.1"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.cache_storeObject (readonly)

Returns the value of attribute cache_store.



71
72
73
# File 'lib/avo.rb', line 71

def cache_store
  @cache_store
end

.field_managerObject (readonly)

Returns the value of attribute field_manager.



72
73
74
# File 'lib/avo.rb', line 72

def field_manager
  @field_manager
end

.loggerObject (readonly)

Returns the value of attribute logger.



70
71
72
# File 'lib/avo.rb', line 70

def logger
  @logger
end

Class Method Details

.app_statusObject



113
114
115
# File 'lib/avo.rb', line 113

def app_status
  true
end

.asset_managerObject



40
41
42
# File 'lib/avo/asset_manager.rb', line 40

def self.asset_manager
  @manager ||= AssetManager.new
end

.avo_dynamic_filters_installed?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'lib/avo.rb', line 117

def avo_dynamic_filters_installed?
  defined?(Avo::DynamicFilters).present?
end

.bootObject

Runs when the app boots up



76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/avo.rb', line 76

def boot
  Turbo::Streams::TagBuilder.prepend(Avo::TurboStreamActionsHelper)
  @logger = Avo.configuration.logger
  @field_manager = Avo::Fields::FieldManager.build
  @view_type_manager = nil # force re-init with defaults on next access
  @cache_store = Avo.configuration.cache_store
  Avo.plugin_manager.reset
  # Run load hooks for plugins to include them in the app.
  # This is useful for plugins that need to include modules in the app that will be used on avo_boot hook.
  ActiveSupport.run_load_hooks(:avo_plugin_include, self)
  ActiveSupport.run_load_hooks(:avo_boot, self)
  eager_load_actions
end

.check_rails_version_issuesObject



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/avo.rb', line 137

def check_rails_version_issues
  return if Rails.env.test?

  if Rails.version.start_with?("7.1")
    Avo.error_manager.add({
      url: "https://docs.avohq.io/3.0/upgrade.html#upgrade-from-3-7-4-to-3-9-1",
      target: "_blank",
      message: "Due to a Rails 7.1 bug the following features won't work:\n\r
                - Dashboards\n\r
                - Ordering\n\r
                - Dynamic filters\n\r
                We recommend you upgrade to Rails 7.2\n\r
                Click banner for more information."
    })
  end
end

.configurationObject



368
369
370
# File 'lib/avo/configuration.rb', line 368

def self.configuration
  @configuration ||= Configuration.new
end

.configuration=(config) ⇒ Object



372
373
374
# File 'lib/avo/configuration.rb', line 372

def self.configuration=(config)
  @configuration = config
end

.configure {|configuration| ... } ⇒ Object

Yields:



376
377
378
# File 'lib/avo/configuration.rb', line 376

def self.configure
  yield configuration
end

.display_menu_editor_warningObject



154
155
156
157
158
159
160
161
162
# File 'lib/avo.rb', line 154

def display_menu_editor_warning
  return if Avo.configuration.main_menu.nil?

  Avo.error_manager.add({
    url: "https://docs.avohq.io/3.0/menu-editor.html",
    target: "_blank",
    message: "The menu editor is available exclusively with the Pro license or above. Consider upgrading to access this feature."
  })
end

.display_profile_menu_editor_warningObject



164
165
166
167
168
169
170
171
172
# File 'lib/avo.rb', line 164

def display_profile_menu_editor_warning
  return if Avo.configuration.profile_menu.nil?

  Avo.error_manager.add({
    url: "https://docs.avohq.io/3.0/menu-editor.html#profile-menu",
    target: "_blank",
    message: "The profile menu editor is available exclusively with the Pro license or above. Consider upgrading to access this feature."
  })
end

.eager_load_actionsObject



133
134
135
# File 'lib/avo.rb', line 133

def eager_load_actions
  Rails.autoloaders.main.eager_load_namespace(Avo::Actions) if defined?(Avo::Actions)
end

.extra_gemsObject



129
130
131
# File 'lib/avo.rb', line 129

def extra_gems
  [:pro, :advanced, :menu, :dynamic_filters, :dashboards, :enterprise, :audits]
end

.initObject

Runs on each request



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/avo.rb', line 91

def init
  Avo::Current.error_manager = Avo::ErrorManager.build
  # Check rails version issues only on NON Production environments
  unless Rails.env.production?
    check_rails_version_issues
    display_menu_editor_warning
    display_profile_menu_editor_warning
  end
  Avo::Current.resource_manager = Avo::Resources::ResourceManager.build
  Avo::Current.tool_manager = Avo::Tools::ToolManager.build

  ActiveSupport.run_load_hooks(:avo_init, self)
end

.mount_enginesObject



121
122
123
124
125
126
127
# File 'lib/avo.rb', line 121

def mount_engines
  -> {
    raise "'mount_engines' method is now obsolete. \n" \
      "Please refer to the upgrade guide for details on the new mounting point: \n" \
      "https://docs.avohq.io/3.0/upgrade.html#Avo's%20mounting%20point%20update"
  }
end

.plugin_managerObject



70
71
72
# File 'lib/avo/plugin_manager.rb', line 70

def self.plugin_manager
  @plugin_manager ||= PluginManager.new
end

.root_path(paths: [], query: {}, **args) ⇒ Object

Generate a dynamic root path using the URIService



106
107
108
109
110
111
# File 'lib/avo.rb', line 106

def root_path(paths: [], query: {}, **args)
  Avo::Services::URIService.parse(Avo::Current.view_context.avo.root_url.to_s)
    .append_paths(paths)
    .append_query(query)
    .to_s
end

.view_type_managerObject



67
68
69
# File 'lib/avo/view_types/view_type_manager.rb', line 67

def self.view_type_manager
  @view_type_manager ||= Avo::ViewTypes::ViewTypeManager.new.tap(&:reset)
end