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.3"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.cache_storeObject (readonly)

Returns the value of attribute cache_store.



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

def cache_store
  @cache_store
end

.field_managerObject (readonly)

Returns the value of attribute field_manager.



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

def field_manager
  @field_manager
end

.loggerObject (readonly)

Returns the value of attribute logger.



115
116
117
# File 'lib/avo.rb', line 115

def logger
  @logger
end

Class Method Details

.app_statusObject



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

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)


165
166
167
# File 'lib/avo.rb', line 165

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

.bootObject

Runs when the app boots up



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/avo.rb', line 121

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



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/avo.rb', line 185

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



202
203
204
205
206
207
208
209
210
# File 'lib/avo.rb', line 202

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



212
213
214
215
216
217
218
219
220
# File 'lib/avo.rb', line 212

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



181
182
183
# File 'lib/avo.rb', line 181

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

.extra_gemsObject



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

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

.initObject

Runs on each request



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

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



169
170
171
172
173
174
175
# File 'lib/avo.rb', line 169

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



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

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