Class: DiverDown::Web::DefinitionModuleDependencies

Inherits:
Object
  • Object
show all
Defined in:
lib/diver_down/web/definition_module_dependencies.rb

Defined Under Namespace

Classes: ModuleDependency

Instance Method Summary collapse

Constructor Details

#initialize(metadata, definition) ⇒ DefinitionModuleDependencies

Returns a new instance of DefinitionModuleDependencies.



29
30
31
32
# File 'lib/diver_down/web/definition_module_dependencies.rb', line 29

def initialize(, definition)
  @metadata = 
  @definition = definition
end

Instance Method Details

#build_module_dependency_mapHash{ String => Hash{ String => Array<DiverDown::Definition::Source> } }

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/diver_down/web/definition_module_dependencies.rb', line 35

def build_module_dependency_map
  module_dependency_map = Hash.new { |h, k| h[k] = ModuleDependency.new(k) }

  @definition.sources.each do |source|
    source_module = @metadata.source(source.source_name).module
    next if source_module.nil?

    source_module_dependency = module_dependency_map[source_module]
    source_module_dependency.source_map[source.source_name] ||= DiverDown::Definition::Source.new(source_name: source.source_name)

    source.dependencies.each do |dependency|
      dependency_module = @metadata.source(dependency.source_name).module

      next if source_module == dependency_module
      next if dependency_module.nil?

      dependency_module_dependency = module_dependency_map[dependency_module]

      # Add module dependencies
      source_module_dependency.module_dependencies.add(dependency_module)

      # Add module reverse dependencies
      dependency_module_dependency.module_reverse_dependencies.add(source_module)

      # Add source
      definition_source = source_module_dependency.source_map[source.source_name]
      definition_dependency = definition_source.find_or_build_dependency(dependency.source_name)
      dependency.method_ids.each do |method_id|
        definition_dependency.find_or_build_method_id(name: method_id.name, context: method_id.context).add_path(*method_id.paths)
      end

      # Add source reverse dependencies
      # NOTE: Reverse dependencies's method_ids are not added because they are difficult to understand and not used.
      definition_source = dependency_module_dependency.source_reverse_dependency_map[source.source_name] ||= DiverDown::Definition::Source.new(source_name: source.source_name)
      definition_source.find_or_build_dependency(dependency.source_name)
    end
  end

  module_dependency_map
end