Module: Avo::Concerns::HasFieldDiscovery

Extended by:
ActiveSupport::Concern
Included in:
Resources::Base, Resources::Items::Sidebar, Resources::Items::Sidebar::Builder
Defined in:
lib/avo/concerns/has_field_discovery.rb

Overview

This concern facilitates field discovery for models in Avo, mapping database columns and associations to Avo fields. It supports:

- Automatic detection of fields based on column names, types, and associations.
- Customization via `only`, `except`, and global configuration overrides.
- Handling of special associations like rich text, attachments, and tags.

Constant Summary collapse

COLUMN_NAMES_TO_IGNORE =
%i[
  encrypted_password reset_password_token reset_password_sent_at remember_created_at password_digest
].freeze

Instance Method Summary collapse

Instance Method Details

#discover_associations(only: nil, except: nil, **field_options) ⇒ Object

Discovers and configures associations as fields



53
54
55
56
57
58
59
# File 'lib/avo/concerns/has_field_discovery.rb', line 53

def discover_associations(only: nil, except: nil, **field_options)
  setup_discovery_options(only, except, field_options)
  return unless safe_model_class.respond_to?(:reflections)

  discover_attachments
  discover_basic_associations
end

#discover_columns(only: nil, except: nil, **field_options) ⇒ Object

Discovers and configures database columns as fields



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/avo/concerns/has_field_discovery.rb', line 40

def discover_columns(only: nil, except: nil, **field_options)
  setup_discovery_options(only, except, field_options)
  return unless safe_model_class.respond_to?(:columns_hash)

  discoverable_columns.each do |column_name, column|
    process_column(column_name, column)
  end

  discover_tags
  discover_rich_texts
end

#model_db_columnsObject

Returns database columns for the model, excluding ignored columns



35
36
37
# File 'lib/avo/concerns/has_field_discovery.rb', line 35

def model_db_columns
  @model_db_columns ||= safe_model_class.columns_hash.symbolize_keys.except(*COLUMN_NAMES_TO_IGNORE)
end