class Wallaby::ActiveRecord::ModelDecorator::FieldsBuilder

To build the metadata for fields

Public Class Methods

new(model_class) click to toggle source

@param model_class [Class]

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 9
def initialize(model_class)
  @model_class = model_class
end

Public Instance Methods

association_fields() click to toggle source

@return [Hash<String, Hash>] a hash for association fields

(e.g. belongs_to / has_one / has_many / has_and_belongs_to_many)
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 27
def association_fields
  @model_class.reflections.each_with_object({}) do |(name, ref), fields|
    metadata = {
      type: ref.macro.to_s,
      label: @model_class.human_attribute_name(name)
    }
    association_builder.update(metadata, ref)
    polymorphic_builder.update(metadata, ref)
    fields[name] = metadata
  end
end
general_fields() click to toggle source

@return [Hash<String, Hash>] a hash for general fields

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 14
def general_fields
  @model_class.columns.each_with_object({}) do |column, fields|
    metadata = {
      type: to_type(column).freeze,
      label: @model_class.human_attribute_name(column.name)
    }
    sti_builder.update(metadata, column)
    fields[column.name] = metadata
  end
end

Protected Instance Methods

association_builder() click to toggle source

@return [Wallaby::ActiveRecord::ModelDecorator::AssociationBuilder]

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 56
def association_builder
  @association_builder ||= AssociationBuilder.new
end
polymorphic_builder() click to toggle source

@return [Wallaby::ActiveRecord::ModelDecorator::PolymorphicBuilder]

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 61
def polymorphic_builder
  @polymorphic_builder ||= PolymorphicBuilder.new
end
sti_builder() click to toggle source

@return [Wallaby::ActiveRecord::ModelDecorator::StiBuilder]

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 51
def sti_builder
  @sti_builder ||= StiBuilder.new(@model_class)
end
to_type(column) click to toggle source

Detect active_storage type @param column [ActiveRecord::ConnectionAdapters::Column] @return [String] field type

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb, line 44
def to_type(column)
  return 'active_storage' if @model_class.respond_to?("with_attached_#{column.name}")

  column.type.to_s
end