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?
specialization?()
click to toggle source
# File lib/rails_erd/domain/specialization.rb, line 69 def specialization? !generalization? end
Also aliased as: inheritance?