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