Class: Factorix::Dependency::Graph::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/factorix/dependency/graph/builder.rb

Overview

Builds a dependency graph from installed MODs and MOD list

The Builder constructs a Graph by:

  1. Creating nodes for all installed MODs

  2. Setting enabled state from mod-list.json

  3. Creating edges from dependency information in info.json

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(installed_mods:, mod_list:) ⇒ Builder

Returns a new instance of Builder.

Parameters:



22
23
24
25
# File 'lib/factorix/dependency/graph/builder.rb', line 22

def initialize(installed_mods:, mod_list:)
  @installed_mods = installed_mods
  @mod_list = mod_list
end

Class Method Details

.build(installed_mods:, mod_list:) ⇒ Factorix::Dependency::Graph

Build a dependency graph from current state

Parameters:

Returns:



18
# File 'lib/factorix/dependency/graph/builder.rb', line 18

def self.build(installed_mods:, mod_list:) = new(installed_mods:, mod_list:).build

Instance Method Details

#buildFactorix::Dependency::Graph

Build the graph

Returns:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/factorix/dependency/graph/builder.rb', line 30

def build
  graph = Graph.new

  unique_mods = @installed_mods.map(&:mod)
  unique_mods.uniq!

  unique_mods.each do |mod|
    add_node_for_mod(graph, mod)
  end

  # Only active versions contribute edges
  active_versions = graph.nodes.to_h {|node| [node.mod, node.version] }

  @installed_mods.each do |installed_mod|
    next unless active_versions[installed_mod.mod] == installed_mod.version

    add_edges_for_dependencies(graph, installed_mod)
  end

  graph
end