Class: JetSet::DependencyGraph
- Inherits:
-
Object
- Object
- JetSet::DependencyGraph
- Defined in:
- lib/jet_set/dependency_graph.rb
Overview
Dependency graph stores a matrix of entities dependencies and is used by JetSet::Session
for ordering entities for persistence process using method order
.
Instance Method Summary collapse
-
#initialize(mapping) ⇒ DependencyGraph
constructor
Initializes a dependency graph using a mapping definition.
-
#order(entities) ⇒ Object
Orders entities according their dependencies in mapping definition.
Constructor Details
#initialize(mapping) ⇒ DependencyGraph
8 9 10 11 12 13 14 15 |
# File 'lib/jet_set/dependency_graph.rb', line 8 def initialize(mapping) @matrix = {} mapping.entity_mappings.keys.each do |key| entity = mapping.entity_mappings[key] @matrix[entity.type.name] = entity.relations.map{|d| d.name} end end |
Instance Method Details
#order(entities) ⇒ Object
Orders entities according their dependencies in mapping definition. Parameters:
+entities+:: entities to order.
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/jet_set/dependency_graph.rb', line 20 def order(entities) groups = {} entities.each do |entity| groups[entity.class.name] ||= [] groups[entity.class.name] << entity end type_order = groups.keys.sort{|a, b| @matrix[b].include?(a) ? -1 : 1} entity_order = type_order.map{|type| groups[type]} entity_order.flatten end |