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/engine_dsl.rb,
lib/avo/plugin_dsl.rb,
lib/avo/base_action.rb,
lib/avo/railtie_dsl.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/tailwind_builder.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/table_row_options.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/basic_filters.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/search/results_limiter.rb,
lib/avo/concerns/private_access.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/checkbox_list_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/concerns/frame_loading_mode.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,
lib/avo/tailwind_variables_preparer.rb,
app/controllers/avo/array_controller.rb,
app/controllers/avo/debug_controller.rb,
app/helpers/avo/summary_chart_helper.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/concerns/has_translatable_title.rb,
lib/avo/resources/controls/actions_list.rb,
lib/avo/resources/controls/base_control.rb,
app/components/avo/header_menu_component.rb,
app/controllers/avo/resources_controller.rb,
lib/avo/concerns/association_query_scope.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,
app/controllers/avo/appearance_settings_controller.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

This controller is currently only used for searchable fields, it keeps the old search controller without any changes Possibly have much more logic that it uses, but it's not worth the effort to refactor it since we're going to replace it with a new searchable fields way

Defined Under Namespace

Modules: ApplicationHelper, CommonController, Concerns, Dsl, EngineDSL, Fields, Filters, GridFields, InitializesAvo, Loaders, Mappings, MediaLibrary, PluginDSL, PrefixedTestHelpers, RailtieDSL, Resources, ResourcesHelper, Search, Services, SummaryChartHelper, TestHelpers, Tools, TurboStreamActionsHelper, UI, UrlHelpers, ViewTypes, WaitForLoaded Classes: ActionNotRegisteredError, ActionsComponent, ActionsController, AlertComponent, AppearanceSettingsController, 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, DeveloperWarningComponent, DiscreetInformation, DiscreetInformationComponent, Divider, DividerComponent, EmptyStateComponent, Engine, ErrorManager, ExecutionContext, FieldWrapperComponent, FieldsExecutionContext, FiltersComponent, FlashAlertsComponent, HeaderMenuComponent, HomeController, ItemGrapher, KeyboardShortcutsComponent, LicenseInvalidError, LicenseVerificationTemperedError, LoadingComponent, ManualFrameComponent, MediaLibraryController, MissingGemError, MissingResourceError, ModalComponent, NoPolicyError, NotAuthorizedError, PaginatorComponent, PanelNameComponent, PhotoObject, Plugin, PluginManager, PrivateController, ProfileItemComponent, ReferrerParamsComponent, Reloader, ResourceComponent, ResourceListingComponent, ResourceNotFoundError, ResourceSidebarComponent, ResourcesController, RowSelectorComponent, SearchController, SearchOverlayComponent, SidebarComponent, SidebarProfileComponent, TabContentComponent, TabGroupComponent, TableRowOptions, TailwindBuilder, TailwindVariablesPreparer, 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.1.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.cache_storeObject (readonly)

Returns the value of attribute cache_store.



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

def cache_store
  @cache_store
end

.field_managerObject (readonly)

Returns the value of attribute field_manager.



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

def field_manager
  @field_manager
end

.loggerObject (readonly)

Returns the value of attribute logger.



111
112
113
# File 'lib/avo.rb', line 111

def logger
  @logger
end

Class Method Details

.app_statusObject



157
158
159
# File 'lib/avo.rb', line 157

def app_status
  :ok
end

.asset_managerObject



38
39
40
# File 'lib/avo/asset_manager.rb', line 38

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

.avo_dynamic_filters_installed?Boolean

Returns:

  • (Boolean)


161
162
163
# File 'lib/avo.rb', line 161

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

.bootObject

Runs when the app boots up



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/avo.rb', line 117

def boot
  @boot_mutex.synchronize do
    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.begin_reload
    # 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)
    Avo.plugin_manager.commit_reload
  end
  eager_load_actions
end

.check_rails_version_issuesObject



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/avo.rb', line 181

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



511
512
513
# File 'lib/avo/configuration.rb', line 511

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

.configuration=(config) ⇒ Object



515
516
517
# File 'lib/avo/configuration.rb', line 515

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

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

Yields:



519
520
521
# File 'lib/avo/configuration.rb', line 519

def self.configure
  yield configuration
end

.display_menu_editor_warningObject



198
199
200
201
202
203
204
205
206
# File 'lib/avo.rb', line 198

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

  Avo.error_manager.add({
    url: "https://docs.avohq.io/4.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



208
209
210
211
212
213
214
215
216
# File 'lib/avo.rb', line 208

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

  Avo.error_manager.add({
    url: "https://docs.avohq.io/4.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



177
178
179
# File 'lib/avo.rb', line 177

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

.extra_gemsObject



173
174
175
# File 'lib/avo.rb', line 173

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

.initObject

Runs on each request



135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/avo.rb', line 135

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



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

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



160
161
162
# File 'lib/avo/plugin_manager.rb', line 160

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

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

Generate a dynamic root path using the URIService



150
151
152
153
154
155
# File 'lib/avo.rb', line 150

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