lib/rails_erd/domain/entity.rb in rails-erd-0.4.5 vs lib/rails_erd/domain/entity.rb in rails-erd-1.0.0
- old
+ new
@@ -5,46 +5,46 @@
class Entity
class << self
def from_models(domain, models) # @private :nodoc:
(concrete_from_models(domain, models) + abstract_from_models(domain, models)).sort
end
-
+
private
-
+
def concrete_from_models(domain, models)
models.collect { |model| new(domain, model.name, model) }
end
-
+
def abstract_from_models(domain, models)
models.collect(&:reflect_on_all_associations).flatten.collect { |association|
association.options[:as].to_s.classify if association.options[:as]
}.flatten.compact.uniq.collect { |name| new(domain, name) }
end
end
-
+
extend Inspectable
inspection_attributes :model
-
+
# The domain in which this entity resides.
attr_reader :domain
-
+
# The Active Record model that this entity corresponds to.
attr_reader :model
-
+
# The name of this entity. Equal to the class name of the corersponding
# model (for concrete entities) or given name (for abstract entities).
attr_reader :name
def initialize(domain, name, model = nil) # @private :nodoc:
@domain, @name, @model = domain, name, model
end
-
+
# Returns an array of attributes for this entity.
def attributes
@attributes ||= if generalized? then [] else Attribute.from_model(domain, model) end
end
-
+
# Returns an array of all relationships that this entity has with other
# entities in the domain model.
def relationships
domain.relationships_by_entity_name(name)
end
@@ -58,43 +58,43 @@
# Returns +true+ if this entity has no relationships with any other models,
# +false+ otherwise. Opposite of +connected?+.
def disconnected?
relationships.none?
end
-
+
# Returns +true+ if this entity is a generalization, which does not
# correspond with a database table. Generalized entities are constructed
# from polymorphic interfaces. Any +has_one+ or +has_many+ association
# that defines a polymorphic interface with <tt>:as => :name</tt> will
# lead to a generalized entity to be created.
def generalized?
!model
end
-
+
# Returns +true+ if this entity descends from another entity, and is
# represented in the same table as its parent. In Rails this concept is
# referred to as single-table inheritance. In entity-relationship
# diagrams it is called specialization.
def specialized?
!generalized? and !model.descends_from_active_record?
end
-
+
# Returns +true+ if this entity does not correspond directly with a
# database table (if and only if the entity is specialized or
# generalized).
def abstract?
specialized? or generalized?
end
-
+
# Returns all child entities, if this is a generalized entity.
def children
@children ||= domain.specializations_by_entity_name(name).map(&:specialized)
end
-
+
def to_s # @private :nodoc:
name
end
-
+
def <=>(other) # @private :nodoc:
self.name <=> other.name
end
end
end