class Wallaby::ActiveRecord::ModelDecorator::FieldsBuilder::PolymorphicBuilder

To build the metadata for polymorphic

Public Instance Methods

update(metadata, reflection) click to toggle source

update the metadata @param metadata [Hash] @param reflection [ActiveRecord::Reflection]

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb, line 12
def update(metadata, reflection)
  if reflection.polymorphic?
    metadata[:is_polymorphic] = true
    metadata[:polymorphic_type] = reflection.foreign_type
    metadata[:polymorphic_list] = polymorphic_list_for(reflection)
  else
    metadata[:class] = reflection.klass
  end
end

Protected Instance Methods

all_model_class() click to toggle source

@return [Array<Class>] a list of all ActiveRecord classes

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb, line 33
def all_model_class
  Map
    .mode_map
    .select { |_, mode| mode == ::Wallaby::ActiveRecord }.keys
end
polymorphic_defined?(model_class, polymorphic_name) click to toggle source

@param model_class [Class] @param polymorphic_name [String] polymorphic name @return [true] if polymorphism defined? @return [false] otherwise

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb, line 43
def polymorphic_defined?(model_class, polymorphic_name)
  polymorphic_name_sym = polymorphic_name.try(:to_sym)
  model_class.reflections.any? do |_field_name, reflection|
    reflection.options[:as].try(:to_sym) == polymorphic_name_sym
  end
end
polymorphic_list_for(reflection) click to toggle source

@param reflection [ActiveRecord::Reflection] @return [Array<Class>] a list of classes for this polymorphism

# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb, line 26
def polymorphic_list_for(reflection)
  all_model_class.each_with_object([]) do |model_class, list|
    list << model_class if polymorphic_defined? model_class, reflection.name
  end
end