Class: JetSet::DependencyGraph

Inherits:
Object
  • Object
show all
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

Constructor Details

#initialize(mapping) ⇒ DependencyGraph

Initializes a dependency graph using a mapping definition. Parameters:

+mapping+:: JetSet::Mapping


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