Class: Maglev::DependencyGraph

Inherits:
Object
  • Object
show all
Defined in:
lib/maglev/dependency_graph.rb

Defined Under Namespace

Classes: Edge

Class Method Summary collapse

Class Method Details

.capture_previous_dependents_for(record) ⇒ Object



34
35
36
37
# File 'lib/maglev/dependency_graph.rb', line 34

def capture_previous_dependents_for(record)
  owners = edges_for(record.class).flat_map { |edge| previous_owners_for(record, edge) }
  record.instance_variable_set(:@maglev_previous_dependent_owners, owners)
end

.register(schema) ⇒ Object



10
11
12
13
14
15
16
17
18
# File 'lib/maglev/dependency_graph.rb', line 10

def register(schema)
  schema.relations.each do |relation|
    edge = Edge.new(schema.model_class, relation.related_class, relation.name, relation.inverse)
    next if edges_for(relation.related_class).any? { |existing| same_edge?(existing, edge) }

    edges_for(relation.related_class) << edge
    install_callbacks(relation.related_class)
  end
end

.reindex_dependents_for(record) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/maglev/dependency_graph.rb', line 20

def reindex_dependents_for(record)
  dependent_owners = previous_dependent_owners(record)
  edges_for(record.class).each do |edge|
    dependent_owners.concat(owners_for(record, edge))
  end

  dependent_owners.uniq { |owner| [owner.class.name, owner.id] }.each do |owner|
    next unless owner.respond_to?(:id) && owner.id

    ReindexJob.perform_later(owner.class.name, owner.id)
  end
  record.remove_instance_variable(:@maglev_previous_dependent_owners) if record.instance_variable_defined?(:@maglev_previous_dependent_owners)
end