class RailsERD::Domain::Specialization

Describes the specialization of an entity. Specialized entities correspond to inheritance or polymorphism. In Rails, specialization is referred to as single table inheritance, while generalization is referred to as polymorphism or abstract classes.

Attributes

domain[R]

The domain in which this specialization is defined.

generalized[R]

The source entity.

specialized[R]

The destination entity.

Private Class Methods

abstract_from_models(domain, models) click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 32
def abstract_from_models(domain, models)
  abstract_classes = models.select(&:abstract_class?)          
  direct_descendants = if ActiveRecord.version >= Gem::Version.new("7.0.0")
                         abstract_classes.collect(&:subclasses)
                       else
                         abstract_classes.collect(&:direct_descendants)
                       end
  
  direct_descendants.flatten.collect { |model|
    new(domain, domain.entity_by_name(model.superclass.name), domain.entity_by_name(model.name))
  }
end
inheritance_from_models(domain, models) click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 26
def inheritance_from_models(domain, models)
  models.reject(&:descends_from_active_record?).collect { |model|
    new(domain, domain.entity_by_name(model.base_class.name), domain.entity_by_name(model.name))
  }
end
polymorphic_from_models(domain, models) click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 18
def polymorphic_from_models(domain, models)
  models.collect(&:reflect_on_all_associations).flatten.collect { |association|
    [association.options[:as].to_s.classify, association.active_record.name] if association.options[:as]
  }.compact.uniq.collect { |names|
    new(domain, domain.entity_by_name(names.first), domain.entity_by_name(names.last))
  }
end

Public Instance Methods

generalization?() click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 64
def generalization?
  generalized.generalized?
end
Also aliased as: polymorphic?
inheritance?()
Alias for: specialization?
polymorphic?()
Alias for: generalization?
specialization?() click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 69
def specialization?
  !generalization?
end
Also aliased as: inheritance?