Class: LowLoad::Loader

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

Defined Under Namespace

Classes: MissingDependencyError

Class Method Summary collapse

Class Method Details

.add_autoloads(file_proxy:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/loader.rb', line 8

def add_autoloads(file_proxy:)
  autoloads = []

  file_proxy.dependencies.each do |namespace_with_dependency|
    *namespace, dependency = namespace_with_dependency.split('::')

    definition_proxies = find_definition_proxies(namespace:, dependency:)

    current_namespace = Object
    namespace.each do |module_name|
      current_namespace.const_set(module_name, Module.new) unless current_namespace.const_defined?(module_name)
      current_namespace = current_namespace.const_get(module_name)
    end

    definition_proxies.each do |definition_proxy|
      autoloads << { origin: file_proxy.file_path, current_namespace:, dependency:, file_path: definition_proxy.file_path }
      current_namespace.autoload(dependency.to_sym, definition_proxy.file_path)
    end
  end

  autoloads
end

.find_definition_proxies(namespace:, dependency:) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/loader.rb', line 31

def find_definition_proxies(namespace:, dependency:)
  return Lowkey[dependency] || raise(MissingDependencyError) if namespace.empty?

  namespace_with_dependency = [namespace, dependency].join('::')
  return Lowkey[namespace_with_dependency] if Lowkey[namespace_with_dependency]

  namespace.pop
  find_definition_proxies(namespace:, dependency:)
end