Sha256: 0317e6f6bba3419ee8f62bef237d96b9e10d9bc68672a7fe62fa619d3ff3cf0a

Contents?: true

Size: 1.43 KB

Versions: 86

Compression:

Stored size: 1.43 KB

Contents

module Avo
  module Fields
    class FieldManager
      class << self
        def build
          instance = new
          instance.init_fields
          instance
        end
      end

      attr_reader :fields

      def initialize
        @fields = []
      end

      def all
        fields
          .map do |field|
            field[:name] = field[:name].to_s

            field
          end
          .uniq do |field|
            field[:name]
          end
      end

      # This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array
      # so later we can instantiate them on our resources.
      #
      # If the field has their `def_method` set up it will follow that convention, if not it will snake_case the name:
      #
      # Avo::Fields::TextField -> text
      # Avo::Fields::DateTimeField -> date_time
      def init_fields
        Avo::Fields::BaseField.descendants.each do |class_name|
          next if class_name.to_s == "BaseField"

          if class_name.to_s.end_with? "Field"
            load_field class_name.get_field_name, class_name
          end
        end
      end

      def load_field(name, klass)
        return if field_exists?(name)

        fields.push(
          name: name.to_s,
          class: klass
        )
      end

      private

      def field_exists?(name)
        fields.pluck(:name).map(&:to_sym).include?(name.to_sym)
      end
    end
  end
end

Version data entries

86 entries across 86 versions & 1 rubygems

Version Path
avo-3.18.1.tw4 lib/avo/fields/field_manager.rb
avo-3.18.1 lib/avo/fields/field_manager.rb
avo-3.18.0.tw4 lib/avo/fields/field_manager.rb
avo-3.18.0 lib/avo/fields/field_manager.rb
avo-3.17.9.beta2 lib/avo/fields/field_manager.rb
avo-3.17.9.beta1 lib/avo/fields/field_manager.rb
avo-3.17.9.tw4 lib/avo/fields/field_manager.rb
avo-3.17.9 lib/avo/fields/field_manager.rb
avo-3.17.8.tw4 lib/avo/fields/field_manager.rb
avo-3.17.8 lib/avo/fields/field_manager.rb
avo-3.17.7 lib/avo/fields/field_manager.rb
avo-3.17.6.tw4 lib/avo/fields/field_manager.rb
avo-3.17.6 lib/avo/fields/field_manager.rb
avo-3.17.5 lib/avo/fields/field_manager.rb
avo-3.17.4 lib/avo/fields/field_manager.rb
avo-3.17.3 lib/avo/fields/field_manager.rb
avo-3.17.5.tw4 lib/avo/fields/field_manager.rb
avo-3.17.4.tw4 lib/avo/fields/field_manager.rb
avo-3.17.3.tw4 lib/avo/fields/field_manager.rb
avo-3.17.2.tw4 lib/avo/fields/field_manager.rb