Module: Avo::FieldsCollector

Included in:
BaseAction, BaseResource, GridCollector
Defined in:
lib/avo/fields_collector.rb

Instance Method Summary collapse

Instance Method Details

#field(field_name, as:, **args, &block) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/avo/fields_collector.rb', line 3

def field(field_name, as:, **args, &block)
  self.fields ||= []

  field_instance = parse_field(field_name, as: as, **args, &block)

  if field_instance.present?
    self.fields << field_instance
  else
    message = "[Avo] The #{field_name} field, as: #{as} from #{self.name} has an invalid configuration."
    ::Rails.logger.warn message
  end
end

#heading(body, **args) ⇒ Object



42
43
44
45
# File 'lib/avo/fields_collector.rb', line 42

def heading(body, **args)
  self.fields ||= []
  self.fields << Avo::Fields::HeadingField.new(body, **args)
end

#parse_field(field_name, as:, **args, &block) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/avo/fields_collector.rb', line 16

def parse_field(field_name, as:, **args, &block)
  # The field is passed as a symbol eg: :text, :color_picker, :trix
  if as.is_a? Symbol
    field_class = field_class_from_symbol(as)

    if field_class.present?
      # The field has been registered before.
      instantiate_field(field_name, klass: field_class, **args, &block)
    else
      # The symbol can be transformed to a class and found.
      class_name = as.to_s.camelize
      field_class = "#{class_name}Field"

      # Discover & load custom field classes
      if Object.const_defined? field_class
        instantiate_field(field_name, klass: field_class.safe_constantize, **args, &block)
      end
    end
  elsif as.is_a? Class
    # The field has been passed as a class.
    if Object.const_defined? as.to_s
      instantiate_field(field_name, klass: as, **args, &block)
    end
  end
end