Method: Mud::Context#resolve

Defined in:
lib/mud/context.rb

#resolve(module_or_list) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/mud/context.rb', line 82

def resolve(module_or_list)
  modules = module_or_list.is_a?(Mud::Module) ? [module_or_list] : module_or_list

  resolved = []

  resolver = proc do |modules|
    modules.each do |mod|
      next if resolved.include?(mod)
      resolved.unshift(mod) if mod.is_a?(Mud::InstalledModule)

      dep = mod.unresolvable_dependencies.first
      raise Mud::ResolveError.new(dep) if dep

      dependencies = mod.dependencies.map(&:resolve).delete_if { |m| resolved.include?(m) }
      resolver.call(dependencies) unless dependencies.empty?
    end
  end
  resolver.call(modules)

  resolved
end